2012-11-06 15 views
7

Ho un'unità di rete mappata alla lettera di unità X: \ che va a un disco rigido esterno con il percorso di "\\ X-Drive \ Public \ Data".PHP is_dir() restituisce false sull'unità di rete di Windows

Sto utilizzando Zend Server con Apache.

mio comando PHP è semplice

$isFolder = is_dir("x:/"); 
echo($isFolder); //FALSE 

cose che dovreste sapere:

Il codice:

$isFolder = is_dir("c:/"); 
echo($isFolder); //TRUE 

funziona come previsto.

Sto eseguendo il servizio Zend Apache come utente amministratore. So che questo funziona correttamente perché in Task Manager il processo httpd.exe mostra l'utente corretto.

L'unità è effettivamente mappata. Ho provato a mapparlo con diversi utenti, per includere lo stesso utente che Zend Apache utilizza senza alcun risultato.

Ho letto tutti i post su questo argomento che sono riuscito a trovare. Ogni problema che ho riscontrato esiste a causa delle autorizzazioni dell'utente o di un refuso. Non vedo come il mio problema ricada in nessuna delle due categorie.

Ho anche provato:

system('net use X: "\\x-drive\public" password1 /user:username /persistent:no'); 
$isFolder(is_dir("x:/")); 
echo($isFolder); //FALSE 

Sono in esecuzione Windows Vista x64, e il codice di produzione verrà eseguito in Windows 7 x64.

Quali altri problemi potrei essere in esecuzione?

risposta

8

Per le condivisioni di rete si consiglia di utilizzare i nomi UNC: "//server/share/dir/file.ext"Source

Se si utilizza l'IP o il nome dell'host dovrebbe funzionare bene:

$isFolder = is_dir("\\\\NAS\\Main Disk"); 
var_dump($isFolder); //TRUE 

$isFolder = is_dir("//NAS/Main Disk"); 
var_dump($isFolder); //TRUE 

$isFolder = is_dir("N:/Main Disk"); 
var_dump($isFolder); //FALSE 
+0

Grazie per l'esempio e la spiegazione concisa! $ isFolder = is_dir ("// NAS/Disco principale"); var_dump ($ isFolder); // TRUE era il modo migliore per me. Grazie! – Wes