Доступ к сетевому ресурсу с помощью PHP5.2 + IIS7.5 - PullRequest
1 голос
/ 26 марта 2012

Я использую php 5.2 с IIS7.5.

У меня есть сетевой ресурс на NAS, который защищен именем пользователя и паролем. Я не могу отключить или изменить информацию для аутентификации на NAS. Мне нужно иметь доступ к этой сетевой папке через php.

Я сделал следующее:

Создан новый пользователь в окнах, имя пользователя и пароль которого совпадают с именами на NAS. Создан пул приложений IIS, который использует ту же информацию аутентификации. Создал файл web.config внутри каталога приложения php с включенным олицетворением, используя ту же информацию аутентификации.

identity impersonate = "true" пароль = "ThePass" userName = "TheUser" />

Включено олицетворение ASP.NET при проверке подлинности приложения в IIS.

Казалось, ничего из этого не работает с этой простой строкой кода в php:

$ dir = opendir ("\\ someservername \ somesharename"); Предупреждение: opendir (\ someservername \ somesharename) [function.opendir]: не удалось открыть dir: нет ошибки в C: \ sites \ site \ forum \ testing.php в строке 7

Итак, я решил проверить конфигурацию с ASP.NET.

string [] diretories = System.IO.Directory.GetDirectories ("\\ someservername \ somesharename"); Тест asp.net работал отлично.

Идя дальше по кроличьей норе, я запустил phpinfo () и проверил в нем информацию об имени пользователя. В разделе «Окружение» phpinfo я нашел пункт «ИМЯ ПОЛЬЗОВАТЕЛЯ». Его значение было «TheUser», как я и ожидал.

Все указывает на то, что система настроена правильно, пока я не попробовал:

echo get_current_user (); Который вернул "IUSR". Это, конечно, не то, что я ожидал.

Итак, как же я могу получить php + IIS7.5 для чтения из общего сетевого ресурса?

Обновление:

Благодаря нескольким ответам я добавил

$result = shell_exec("net use o: \\\\pathToServer\\27301  /persistent:yes 2>&1");

Что возвращает успех. Я все еще получаю ошибку на opendir. Я попробовал другой тест и использовал is_dir. Это вернул false на моем недавно созданном подключенном диске.

var_dump(is_dir("o:\\"));

// Prints: bool(false) 

UPDATE

Я запустил скрипт из командной строки, когда вошел в систему как пользователь, который создал. Сценарии выполняются правильно. Может ли это вернуть нас к get_current_user (), который возвращает IUSR? Я попытался getmypid (), который возвратил идентификатор процесса. Я связал этот идентификатор процесса с диспетчером задач и обнаружил, что это для php-cgi.exe, запущенного под пользовательской учетной записью, которую я создал.

Ответы [ 3 ]

4 голосов
/ 02 апреля 2012

Рекомендуемый способ доступа к общему сетевому ресурсу в PHP - это «смонтировать» его.Попробуйте подключить свой общий ресурс как сетевой диск.

Кстати.ваша команда неверна $ dir = opendir ("\\ someservername \ somesharename");Вы должны использовать 4 "\", потому что это управляющий символ $ dir = opendir ("\\\\ someservername \ somesharename");

ПРИМЕЧАНИЕ: get_current_user () возвращает владельцапроцесс на IIS

2 голосов
/ 02 апреля 2012

Вы можете попробовать выполнить тестирование, сопоставив его как

$command = "net use $drive \"\\\\$ip\\$share\" $smb_password /user:$domain\\$smb_username";
$result = shell_exec($command);

на opendir, вам нужно \\\\ $ server_name \\ $ share попробовать с 4 '\', и если такое отображение работает и4 '\' не работает на opendir.У вас могут быть не совпадающие учетные данные.

Если вы отобразите его таким образом, новый пользователь, которого вы создали в Windows, чье имя пользователя и пароль совпадают с именами на NAS, будет иметь права на подключенный диск, так что вам не нужно беспокоиться оОбъем.

1 голос
/ 08 июня 2012

Была такая же проблема в аналогичной системе.Чтобы решить эту проблему, перейдите на веб-сайт> Аутентификация> Анонимная аутентификация> Измените IUSR на любое имя пользователя или используйте пользователя пула приложений, если он правильно настроен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...