En una máquina Windows, la secuencia de comandos siguiente:glob() de PHP en directorios entre corchetes
<?php
mkdir("c:\\[test]");
file_put_contents("c:\\[test]\\test.txt", "some content");
chdir("c:\\[test]");
echo getcwd()."\n";
var_dump(glob('*'));
?>
muestra este:
C:\[test]
array(0) {
}
Cuando esto se espera:
C:\[test]
array(1) {
[0]=>
string(8) "test.txt"
}
entiendo que glob
trata los corchetes como caracteres especiales, cuando se encuentra en pattern
parámetro.
El patrón *
coincide con cualquier archivo en el directorio de trabajo actual. Sin embargo, glob() se comporta como si se ha ejecutado con el patrón c:\\[test]\\*
Los soportes son entonces se interpretan como parte del modelo, cuando en realidad son parte del directorio.
Está glob
supone para el tratamiento de la trayectoriacomo parte del patrón? Preferiría pensar que debería usar el directorio actual como punto de partida, y luego procesar el patrón solo.
(intento de resumir): La función glob
actúa como se está haciendo c:\\[test]\\*
como un patrón partido, y está tratando de igualar o bien c:\t\*
, c:\e\*
, o c:\s\*
. Pero el patrón es en realidad *
y no debería tratar de hacer coincidir nada de eso.
No puedo replicar esto en Mac, ¿puede verificar que el directorio y el archivo realmente se haya creado correctamente en su ventana? – ajreal
¿podría sugerir lo obvio, no use [] en nombres de directorios? –
@Dagon ¿Por qué [] no se puede usar en nombres de directorios? – xdazz