У меня проблема при использовании функции glob, когда каталог путей с квадратными скобками.
// Example 1 - working $path = 'temp'. DIRECTORY_SEPARATOR .'dir - name'; $files = glob($path . DIRECTORY_SEPARATOR . '*.txt'); // List all files echo '<pre>'; print_r($files); echo '</pre>';
Над кодом работает, но когда имя каталога с квадратными скобками, например, dir [name] или dir – [name], то оно не работает.
// Example 2 - not working $path = 'temp'. DIRECTORY_SEPARATOR .'dir - [name]'; $files = glob($path . DIRECTORY_SEPARATOR . '*.txt'); // result got empty if file on that directory echo '<pre>'; print_r($files); echo '</pre>';
Спасибо всем.
Я получил точное решение для моего запроса. ниже код работает для меня
$path = 'temp'. DIRECTORY_SEPARATOR .'dir - [name]'; $path = str_replace('[', '\[', $path); $path = str_replace(']', '\]', $path); $path = str_replace('\[', '[[]', $path); $path = str_replace('\]', '[]]', $path); $files = glob($path . DIRECTORY_SEPARATOR . '*.txt'); // List files echo '<pre>'; print_r($files); echo '</pre>';
[foo]
имеет особое значение, он представляет собой класс символов (синтаксис регулярных выражений).
Таким образом, чтобы [
и ]
означали квадратные скобки в буквальном смысле , вам нужно избегать их – предшествующее им обратную косую черту.
Пытаться
$path = 'temp'. DIRECTORY_SEPARATOR .'dir - [name]'; $from = array('[',']'); $to = array('\[','\]'); $files =glob(str_replace($from,$to,$path . "\\*.txt")); echo '<pre>'; print_r($files); echo '</pre>';
Это то, что я использую:
$path = str_replace(['[',']',"\f[","\f]"], ["\f[","\f]",'[[]','[]]'], $path);
Все в одной строке.