Question

Dans PHP (XAMPP) installé sur un ordinateur Windows XP, j'essaie de lire un DIR qui existe sur un serveur réseau local. J'utilise is_dir() Pour vérifier s'il s'agit d'un DIR que je peux lire.

Dans Windows Explorer, je tape \\\server\dir Et ce dir est montré. Lorsque je mappe un lecteur réseau, A peut y accéder avec z:\dir aussi bien.

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 n'ai jamais de succès? Une idée? THX

Était-ce utile?

La solution

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 gens formidables qui vous aident si incroyablement rapidement !!

Edit (tiré de php.net):

Le service a un accès limité aux ressources du réseau, telles que les partages et les tuyaux, car il n'a pas d'identification et doit se connecter à l'aide d'une session nul. La clé de registre suivante contient les valeurs NullSessionPipes et NullSessionShares, qui sont utilisées pour spécifier les tuyaux et les partages auxquels les sessions Null peuvent se connecter: HKEY_LOCAL_MACHINE System CurrentControlset Services LanManserver Paramètres alternativement, vous pouvez ajouter la valeur Reg_dword restreinte NULSECTACTION à la clé et le définir sur 0 pour permettre à toutes les sessions nulles d'accéder à tous les tuyaux et partages créés sur cette machine.

Ajoutez restrectNullSessAccess = 0 à votre registre.

Autres conseils

Vous laissez probablement XAMPP installer Apache en tant que service et exécuter les scripts PHP réduisent cet apache. Et le service Apache (en cours d'exécution LocalSystème) n'est pas autorisé à accéder au réseau comme votre compte d'utilisateur.

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

Vous pouvez tester cela en démarrant l'application Apache en tant qu'application Console (apache_start.bat dans le répertoire XAMPP devrait le faire) et exécuter le script à nouveau. Vous pouvez utiliser des barres obliques vers l'avant et vers l'arrière dans le chemin UNC. Je suggérerais d'utiliser // serveur / partager car PHP ne se soucie pas / 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>";

Essaie le file: Schéma URI:

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 également Déposer les uris dans Windows.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top