2009-07-20 7 views
14

in PHP (XAMPP) installato su un computer Windows XP Sto cercando di leggere una directory che esiste su un server di rete locale. Sto usando is_dir() per verificare se è una directory che posso leggere.percorso di rete di accesso php sotto Windows

In Esplora risorse di Windows digito \\\server\dir e quella dir viene mostrata. Quando eseguo il mapping di un'unità di rete, è possibile accedervi anche con z:\dir.

In PHP che ho che lo script:

<?php if(is_dir($dir){ echo 'success' }) ?> 

Per $dir ho provato:

  • /server/dir
  • //server/dir
  • \server\dir
  • \\server\dir
  • \\\\server\\dir

e

  • z:\dir
  • z:\\dir
  • z:/dir
  • z://dir

Ma non ho mai ottenere il successo? Qualche idea? thx

risposta

9

ho risolto cambiando alcune cose nel Registro di sistema del server come spiegato nel l'ultima risposta di questa discussione:

http://bugs.php.net/bug.php?id=25805

Grazie alla VolkerK e Gumbo comunque! Amo lo stackoverflow e le loro fantastiche persone che ti aiutano in modo incredibilmente veloce !!

EDIT (tratto da php.net):

Il servizio ha limitato l'accesso alle risorse di rete, come le azioni e tubi, perché non ha le credenziali e deve connettersi utilizzando un null sessione. La seguente chiave di registro contiene le NullSessionPipes e valori NullSessionShares, che vengono utilizzati per specificare le tubazioni e azioni alle quali le sessioni Null possono collegare: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters In alternativa, si potrebbe aggiungere il valore REG_DWORD RestrictNullSessAccess alla chiave e impostarlo a 0 per permettere a tutti nulli sessioni di accedere a tutti i tubi e le azioni create in quel machine.`

aggiungere RestrictNullSessAccess = 0 alla registery.

+1

Questo vale per Windows Server 2003. Per Windows XP, verificare le impostazioni della politica di sicurezza locale "Accesso alla rete: lasciare che le autorizzazioni di Tutti si applichino agli utenti anonimi" sia impostato su Abilitato. – Max

+3

Quali sarebbero alcune di quelle cose? Il link a php.net non è stato molto utile. Puoi consolidare la tua soluzione qui? – Wes

+1

@Wes Ho modificato la mia risposta. Spero possa aiutare. – Max

3

provare il sistema di file: URI:

file://server/dir 
file:///Z:/dir 

L'inizio è sempre file://. Il prossimo segmento di percorso è il server. Se è sul tuo computer locale, lascia vuoto (vedi il secondo esempio). Vedi anche File URIs in Windows.

+0

grazie per la tua risposta, gumbo! Purtroppo entrambe le soluzioni non hanno funzionato. is_dir() restituisce sempre false. PS: su una dir locale (nell'esempio c:/dir) restituisce true! – Max

+0

Hai provato quel percorso in Windows Explorer? Dovrebbe funzionare anche lì. – Gumbo

7

Probabilmente si consente a xampp di installare apache come servizio ed eseguire gli script php tramite questo apache. E il servizio Apache (in esecuzione come localsystem) non è autorizzato ad accedere alla rete come avviene nel tuo account utente.

Un servizio eseguito nel contesto dell'account LocalSystem eredita il contesto di sicurezza di SCM. Il SID dell'utente viene creato dal valore SECURITY_LOCAL_SYSTEM_RID. L'account non è associato ad alcun account utente connesso.
Ciò ha varie implicazioni:
...
      * Il servizio presenta le credenziali del computer ai server remoti.
...

È possibile verificare questa avviando l'Apache come applicazione console (apache_start.bat nella directory XAMPP dovrebbe farlo) ed eseguire nuovamente lo script. Puoi usare entrambe le barre in avanti e indietro nel percorso unc. Suggerirei di usare // server/share poiché php non si preoccupa di/in stringhe letterali.

<?php 
$uncpath = '//server/dir'; 
$dh = opendir($uncpath); 
echo "<pre>\n"; 
var_dump($dh, error_get_last()); 
echo "\n</pre>"; 
Problemi correlati