Я использую 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, запущенного под пользовательской учетной записью, которую я создал.