php доступ к сетевому пути под windows - PullRequest
14 голосов
/ 20 июля 2009

в 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

Но я никогда не добивался успеха? Любая идея? ТНХ

Ответы [ 3 ]

9 голосов
/ 21 июля 2009

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

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

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

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

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

добавить RestrictNullSessAccess = 0 в ваш регистр.

7 голосов
/ 20 июля 2009

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

Служба, которая работает в контексте учетной записи LocalSystem, наследует контекст безопасности SCM. SID пользователя создается из значения SECURITY_LOCAL_SYSTEM_RID. Учетная запись не связана ни с одной из зарегистрированных учетных записей пользователя .
Это имеет несколько последствий:
...
* Служба предоставляет учетные данные компьютера удаленным серверам .
...

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

<code><?php
$uncpath = '//server/dir';
$dh = opendir($uncpath);
echo "<pre>\n";
var_dump($dh, error_get_last());
echo  "\n
";
3 голосов
/ 20 июля 2009

Попробуйте схему file: URI:

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

Начало всегда file://. Следующий сегмент пути - сервер. Если это на вашем локальном компьютере, оставьте это поле пустым (см. Второй пример). См. Также URI файлов в Windows .

...