в PHP (XAMPP), установленном на компьютере под управлением Windows XP. Я пытаюсь прочитать каталог, который существует на локальном сетевом сервере. Я использую is_dir()
чтобы проверить, является ли это 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
Но я никогда не получаю успеха? Есть идеи? спасибо
Я решил это, изменив некоторые вещи в реестре сервера, как объяснено в последнем ответе этой дискуссии:
http://bugs.php.net/bug.php?id=25805
Спасибо VolkerK и Gumbo в любом случае! Я люблю stackoverflow и их великих людей, которые помогают вам так невероятно быстро!
EDIT (взято с php.net):
Служба имеет ограниченный доступ к сетевым ресурсам, таким как общие ресурсы и каналы, поскольку у нее нет учетных данных и она должна подключаться с использованием нулевого сеанса. Следующий раздел реестра содержит значения NullSessionPipes и NullSessionShares, которые используются для указания каналов и общих долей, к которым могут подключаться пустые сеансы: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters. Кроме того, вы можете добавить значение REG_DWORD RestrictNullSessAccess к ключу и установите его равным 0, чтобы разрешить всем пустым сеансам доступ ко всем каналам и общим ресурсам, созданным на этом компьютере.
добавьте RestrictNullSessAccess = 0 в вашу реестр.
Вы, вероятно, позволили xampp установить apache в качестве сервиса и запустить php-скрипты через этот apache. А служба apache (работающая как локальная система ) не имеет доступа к сети, как это делает ваша учетная запись пользователя.
Служба, выполняемая в контексте учетной записи LocalSystem, наследует контекст безопасности SCM. SID пользователя создается из значения SECURITY_LOCAL_SYSTEM_RID. Учетная запись не связана с какой-либо зарегистрированной учетной записью пользователя .
Это имеет несколько последствий:
…
* Служба предоставляет учетные данные компьютера удаленным серверам .
…
Вы можете проверить это, запустив apache в качестве консольного приложения (apache_start.bat в каталоге xampp должен это сделать) и снова запустите сценарий. Вы можете использовать как прямую, так и обратную косую черту в пути. Я бы предложил использовать // server / share, поскольку php не заботится о / в строковых литералах.
<?php $uncpath = '//server/dir'; $dh = opendir($uncpath); echo "<pre>\n"; var_dump($dh, error_get_last()); echo "\n</pre>";
Попробуйте file:
схема URI:
file://server/dir file:///Z:/dir
Начало всегда является file://
. Следующий сегмент пути – это сервер. Если он находится на вашей локальной машине, оставьте поле пустым (см. Второй пример). См. Также URI файлов в Windows .