PHP Access Network Chemin sous Windows
-
18-09-2019 - |
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
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.