In un computer Windows, il seguente script:PHP glob() in directory tra parentesi
<?php
mkdir("c:\\[test]");
file_put_contents("c:\\[test]\\test.txt", "some content");
chdir("c:\\[test]");
echo getcwd()."\n";
var_dump(glob('*'));
?>
visualizza questa:
C:\[test]
array(0) {
}
Quando questo si prevede:
C:\[test]
array(1) {
[0]=>
string(8) "test.txt"
}
ho capito che glob
considera le parentesi come caratteri speciali, quando trovato nello pattern
parametro.
Il modello *
corrisponde a qualsiasi file nella directory di lavoro corrente. Tuttavia, glob() si comporta come se fosse stato eseguito con il modello c:\\[test]\\*
Le staffe sono poi interpretati come parte del modello, quando in realtà sono parte della directory.
Is glob
supposto per trattare la percorso come parte del modello? Preferirei pensare che dovrebbe utilizzare la directory corrente come punto di partenza e quindi elaborare il modello solo.
(tentativo di riassumere): La funzione glob
agisce come si sta facendo c:\\[test]\\*
come un pattern match, e sta cercando di abbinare sia c:\t\*
, c:\e\*
o c:\s\*
. Ma il pattern è in realtà *
e non dovrebbe cercare di abbinarlo.
Non riesco a replicarlo su Mac, puoi controllare se la directory e il file sono veramente creati correttamente nella tua finestra? – ajreal
potrei suggerire l'ovvio, non usare [] nei nomi di dir? –
@Dagon Perché [] non può essere utilizzato nei nomi delle directory? – xdazz