Я работал над раскрывающимся списком динамических рассылок php, который сканирует папку на веб-сервере и перечисляет ее содержимое, которое он работает, и слышит соответствующий выбор кода.
<?php
foreach(glob(dirname(rootdir) . '/path/username/*') as $filename){
$filename = basename($filename);
echo "<option value='filepath/username/" . $filename . "'>".$filename."</option>";
}
?>
Однако, если я использую переменную для заполнения части пути к файлу, переменная не добавляется к пути.
<?php
$name = "jsmith";
foreach(glob(dirname(rootdir) . '/path/$name/*') as $filename){
$filename = basename($filename);
echo "<option value='filepath/$name/" . $filename . "'>".$filename."</option>";
}
?>
$ name = "jsmith"
Результат, который я ищу, это /path/$ name/* =/path/jsmith/и filepath/$ name/= filepath/jsmith/
Как получить glob (dirname) и значение параметра = 'распознать переменные?
Вам нужно либо объединить переменную с строкой, либо обернуть строку в двойные кавычки, чтобы переменная была проанализирована.
Двойные кавычки
<?php
$name = "jsmith";
foreach(glob(dirname(rootdir) . "/path/$name/*") as $filename){
$filename = basename($filename);
echo "<option value='filepath/$name/" . $filename . "'>".$filename."</option>";
}
?>
Объединить
<?php
$name = "jsmith";
foreach(glob(dirname(rootdir) . '/path/' . $name . '/*') as $filename){
$filename = basename($filename);
echo "<option value='filepath/$name/" . $filename . "'>".$filename."</option>";
}
?>
Одиночные кавычки не интерполируются. (т.е. переменные в строке не будут заменены их значениями.) Однако двойные кавычки интерполируют.
Вам нужно будет изменить '/path/$name/*'
на "/path/$name/*"
или использовать конкатенацию строк с помощью '/path/'. $name. '/*'
'/path/'. $name. '/*'
'/path/'. $name. '/*'
.
Кроме того, вы должны быть осторожны с принятием управляемых пользователем ввода для $name
поскольку это может привести к атаке обхода каталога.