php доступ к сетевому пути под окнами

в PHP (XAMPP), установленном на компьютере с Windows XP. Я пытаюсь прочитать каталог, который существует на локальном сетевом сервере. Я использую is_dir(), чтобы проверить, могу ли я прочитать этот каталог.

В проводнике Windows я набираю \\\server\dir, и этот каталог отображается. Когда я подключаю сетевой диск, я также могу получить к нему доступ с помощью z:\dir.

В PHP у меня есть этот скрипт:

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

Для $dir я пробовал:

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

и

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

Но я никогда не добиться успеха? Есть идеи? спасибо


person Max    schedule 20.07.2009    source источник


Ответы (4)


Я решил это, изменив некоторые вещи в реестре сервера, как описано в последнем ответе этого обсуждения:

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

В любом случае спасибо VolkerK и Gumbo! Я люблю stackoverflow и их замечательных людей, которые так невероятно быстро помогают вам!

РЕДАКТИРОВАТЬ (взято с php.net):

Служба имеет ограниченный доступ к сетевым ресурсам, таким как общие ресурсы и каналы, поскольку у нее нет учетных данных, и она должна подключаться с использованием нулевого сеанса. Следующий раздел реестра содержит значения NullSessionPipes и NullSessionShares, которые используются для указания каналов и общих ресурсов, к которым могут подключаться нулевые сеансы: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters В качестве альтернативы вы можете добавить в ключ значение REG_DWORD RestrictNullSessAccess. и установите для него значение 0, чтобы разрешить всем нулевым сеансам доступ ко всем каналам и общим ресурсам, созданным на этом компьютере.`

добавьте RestrictNullSessAccess=0 в свой реестр.

person Max    schedule 20.07.2009
comment
Это справедливо для Windows Server 2003. Для Windows XP убедитесь, что для параметра «Локальная политика безопасности» «Доступ к сети: разрешить всем применять разрешения для анонимных пользователей» установлено значение «Включено». - person Max; 27.05.2011
comment
Что бы это могло быть? Ссылка на php.net не очень помогла. Можете ли вы консолидировать свое решение здесь? - person Wes; 07.11.2012
comment
Что, если мы не сможем прикоснуться к серверу. Есть ли решение? - person Scott Chu; 11.10.2016

Вероятно, вы позволили xampp установить apache в качестве службы и запустить php-скрипты через этот apache. И служба apache (работающая как localsystem) не разрешен доступ к сети так, как ваша учетная запись пользователя.

A service that runs in the context of the LocalSystem account inherits the security context of the SCM. The user SID is created from the SECURITY_LOCAL_SYSTEM_RID value. The account is not associated with any logged-on user account.
This has several implications:
...
   * The service presents the computer's credentials to remote servers.
...

Вы можете проверить это, запустив apache как консольное приложение (это должен сделать apache_start.bat в каталоге xampp) и снова запустив скрипт. Вы можете использовать как прямую, так и обратную косую черту в пути unc. Я бы предложил использовать //server/share, так как php не заботится о / в строковых литералах.

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


Да, я знаю, что это старый пост, но я все еще нашел его, и если кто-то еще найдет... В Windows, с более новыми серверами, убедитесь, что SMB установлен и включен на целевой машине.

person Jams    schedule 17.01.2020