Путь доступа к сети 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.