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

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

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

В PHP у меня есть script:

<?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

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

Ответы

Ответ 1

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

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

Спасибо VolkerK и Gumbo в любом случае! Мне нравится stackoverflow и их великие люди, которые помогают вам так невероятно быстро!

EDIT (взято с php.net):

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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