Я пытаюсь использовать (preg_replace), чтобы удалить значение каталога из $outputpid и сохранить его в $nofolder. По какой-то причине $nofolder возвращает NULL. Я забыл выйти из чего-то или это что-то еще?
$pidnum = '710';
foreach (glob("/var/www/secure/catalog/current/programs/transfer/*.pdf") as $filename) {
if (strpos($filename, $pidnum) !== false) {
$outputpid = $filename;
}
}
echo "$outputpid" . "<br />";
$nofolder = preg_replace('/var/www/secure/catalog/current/programs/transfer/', '', $outputpid);
echo "$nofolder" . "<br />";
И, возможно, glob("…/*$pidnum*.pdf")
чтобы избежать петли.
В этом случае вы должны использовать str_replace
вместо preg_replace
, так как здесь вам не нужны регулярные выражения.
Причина, по которой ваше регулярное выражение терпит неудачу, заключается в том, что вы «выбираете» косую черту в качестве начального/конечного разделителя регулярного выражения, но, поскольку в вашей строке несколько косых черт, регулярное выражение завершится после var. Это делает ваше регулярное выражение недействительным.
Либо используйте вместо этого str_replace
(лучшее решение imo), либо добавьте другие разделители вокруг вашего шаблона.
Таким образом, ваш код станет:
$pidnum = '710';
foreach (glob("/var/www/secure/catalog/current/programs/transfer/*.pdf") as $filename) {
if (strpos($filename, $pidnum) !== false) {
$outputpid = $filename;
}
}
echo "$outputpid" . "<br />";
$nofolder = str_replace('/var/www/secure/catalog/current/programs/transfer/', '', $outputpid);
echo "$nofolder" . "<br />";
Не имеет отношения к вашему вопросу, но вам не нужно помещать свои переменные в кавычки, чтобы что-то с ними делать (в данном случае повторять их). Вы должны пойти с
echo $outputpid . "<br />";
вместо
echo "$outputpid" . "<br />";
Спасибо, это поможет мне довольно легко заставить что-то довольно сумасшедшее работать в CMS нашего колледжа.
Что вам действительно нужно, так это
basename()
.