PHP избавиться от косой черты полного пути - PullRequest
1 голос
/ 15 декабря 2008

У меня есть полный путь, который я хотел бы удалить на определенных уровнях. Так, например,

/home/john/smith/web/test/testing/nothing/

Я бы хотел избавиться от 4-х уровней, чтобы я получил

/test/testing/nothing/

Что было бы хорошо для этого?

Спасибо

Ответы [ 2 ]

7 голосов
/ 15 декабря 2008

Простое решение состоит в том, чтобы разделить путь на части, а затем манипулировать массивом, прежде чем снова соединить его:

join("/", array_slice(explode("/", $path), 5));

Конечно, если вы хотите удалить этот конкретный путь, вы также можете использовать регулярное выражение:

preg_replace('~^/home/john/smith/web/~', '', $path);

Одно слово совета. Если ваше приложение много работает с путями, может быть неплохо создать класс для представления путей, чтобы инкапсулировать логику, вместо того, чтобы выполнять множество манипуляций со строками повсеместно. Это особенно хорошая идея, если вы смешиваете абсолютные и относительные пути.

0 голосов
/ 16 декабря 2008

Почему вы все используете регулярные выражения для чего-то, что не требует абсолютно никакого соответствия; Циклы процессора ценны!

str_replace будет более эффективным:

$s_path = '/home/john/smith/web/test/testing/nothing/';
$s_path = str_replace('john/smith/web/test/', '', $s_path);

И используйте realpath() для разрешения любых '../../' путей.

И помните, dirname(__FILE__) получает CWD, а rtrim() чрезвычайно полезен для удаления конечных слешей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...