Как убрать с начала и с конца строки после определенных символов? - PullRequest
0 голосов
/ 01 августа 2020

У меня есть это: /opt/lampp/htdocs/website/inn/hemlata993/93/

Я хочу удалить /opt/lampp/htdocs и / в конце, поэтому все после 2-го / в конце должно быть удалено. В приведенном выше примере /93 должно быть удалено, следовательно, это будет:

/website/inn/hemlata993/

Я пытался сделать это:

$files = glob($dirName."*.*");
for ($i = 0; $i < count($files); $i++) {
    $image = $files[$i];
    echo $image;
    $arr = explode('/opt/lampp/htdocs', $image);
    $important = $arr[1];
 
    echo '<img src="'.$important.'" width="100" height="100" alt="Random image" />' . "<br /><br />";

}

Это удаляет /opt/lampp/htdocs I было интересно, как мне удалить и конец и сохранить его в одной переменной? Я пытаюсь использовать substr, но после удаления первой части его хранения в массиве я полагаю, поэтому я не могу этого сделать. Как я могу получить /website/inn/hemlata993/?

Ответы [ 2 ]

1 голос
/ 01 августа 2020

Я бы go за решение, которое не зависит от физического местоположения вашего веб-сайта:

$path = '/opt/lampp/htdocs/website/inn/hemlata993/93/';
if (preg_match('#/website/(.*)/(?=\d+/)#', $path, $matches)) {
  $path = $matches[0];
}

Это, однако, предполагает, что:

  • /website - это место, где файлы находятся в документе сервера. root,
  • пути всегда заканчиваются одной или несколькими цифрами в конце (перед последним /).

Демо

1 голос
/ 01 августа 2020

Один из способов добиться этого - использовать регулярное выражение для сопоставления всего, что находится после /opt/lampp/htdocs и вплоть до 2-го до последнего / включительно. Например:

$image = '/opt/lampp/htdocs/website/inn/hemlata993/93/';
$image = preg_replace('#/opt/lampp/htdocs(/.*/)[^/]+/[^/]*$#', '$1', $image);
echo $image;

Вывод:

/website/inn/hemlata993/

Демо на 3v4l.org

...