2009-07-20 7 views
14

dans PHP (XAMPP) installé sur un ordinateur Windows XP Im essayant de lire un répertoire qui existe sur un serveur de réseau local. Im en utilisant is_dir() pour vérifier si c'est un dir que je peux lire.chemin d'accès php réseau sous windows

Dans l'Explorateur Windows, tapez \\\server\dir et ce répertoire est affiché. Lorsque je mappe un lecteur réseau, vous pouvez également y accéder avec z:\dir.

En PHP J'ai ce script:

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

Pour $dir J'ai essayé:

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

et

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

Mais je ne me succès? Une idée? thx

Répondre

9

Je l'ai résolu en changeant des choses dans le registre du serveur comme expliqué dans la dernière réponse de cette discussion:

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

Merci à VolkerK et Gumbo de toute façon! J'adore stackoverflow et leurs super personnes qui vous aident si incroyablement vite !!

EDIT (extrait de php.net):

Le service a un accès limité aux ressources du réseau, telles que les actions et tuyaux, car il n'a pas les informations d'identification et doit se connecter en utilisant une valeur nulle session. La clé de Registre suivante contient les NullSessionPipes et valeurs NullSessionShares, qui sont utilisés pour spécifier les tuyaux et actions auxquelles sessions null peuvent se connecter: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters Sinon, vous pouvez ajouter la valeur REG_DWORD RestrictNullSessAccess à la clé et le mettre à 0 pour permettre à toutes les sessions nulles pour accéder à tous les tuyaux et actions créées sur ce machine.`

ajouter RestrictNullSessAccess = 0 à votre registery.

+1

Cela est vrai pour Windows Server 2003. Pour Windows XP, assurez-vous que les paramètres de la stratégie de sécurité locale «Accès réseau: Autoriser tout le monde à des utilisateurs anonymes» sont définis sur Activé. – Max

+3

Que seraient ces choses? Le lien vers php.net n'était pas très utile. Pouvez-vous consolider votre solution ici? – Wes

+1

@Wes j'ai édité ma réponse. J'espère que cela pourra aider. – Max

3

Essayez le schéma d'URI file::

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

Le début est toujours file://. Le segment de chemin suivant est le serveur. Si c'est sur votre machine locale, laissez-la vide (voir le deuxième exemple). Voir aussi File URIs in Windows.

+0

merci pour votre réponse, gumbo! Malheureusement, les deux solutions n'ont pas fonctionné. is_dir() retourne toujours false. PS: sur un répertoire local (dans l'exemple c:/dir) il retourne true! – Max

+0

Avez-vous essayé ce chemin dans votre Windows Explorer? Ça devrait marcher là aussi. – Gumbo

7

Vous avez probablement laissé xampp installer Apache en tant que service et exécuter les scripts PHP à travers cet apache. Et le service Apache (fonctionnant sous localsystem) n'est pas autorisé à accéder au réseau comme votre compte d'utilisateur.

Un service exécuté dans le contexte du compte LocalSystem hérite du contexte de sécurité du SCM. Le SID de l'utilisateur est créé à partir de la valeur SECURITY_LOCAL_SYSTEM_RID. Le compte n'est associé à aucun compte d'utilisateur connecté.
Cela a plusieurs implications:
...
      * Le service présente les informations d'identification de l'ordinateur à des serveurs distants.
...

Vous pouvez tester cela en lançant le apache comme application console (apache_start.bat dans le répertoire XAMPP devrait le faire) et exécuter à nouveau le script. Vous pouvez utiliser les barres obliques avant et arrière dans le chemin unc. Je suggère d'utiliser // serveur/share puisque php ne se soucie pas de/dans les littéraux de chaîne.

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