2009-07-20 3 views
14

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

В проводнике Windows I введите \\\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

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

ответ

9

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

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, чтобы все нулевые сеансов, чтобы получить доступ все трубы и акции, созданные на этой machine.`

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

+1

Это справедливо для Windows Server 2003. Для Windows XP параметры локальной политики безопасности «Разрешения для доступа к сети: разрешить все разрешения для анонимных пользователей» установлены на «Включено». – Max

+3

Что будет с этим? Ссылка на php.net была не очень полезной. Можете ли вы консолидировать свое решение здесь? – Wes

+1

@Wes Я отредактировал свой ответ. Надеюсь, это поможет. – Max

3

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

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

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

+0

спасибо за ур ответ, gumbo! К сожалению, оба решения не работают. is_dir() alsways возвращает false. PS: в локальном каталоге (в примере c:/dir) он возвращает true! – Max

+0

Пробовал ли этот путь в проводнике Windows? Он тоже должен работать. – Gumbo

7

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

Служба, выполняемая в контексте учетной записи 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>";