Как настроить IIS, чтобы разрешить доступ к сетевым ресурсам для сценариев PHP?
В настоящее время я работаю над интерфейсом PHP, который объединяет серию приложений, работающих на отдельных серверах; многие из этих приложений генерируют файлы, к которым мне нужен доступ, но эти файлы (по разным причинам) находятся на их родительских серверах.
Если я из командной строки выдаю немного сценария, такого как:
<?php
var_dump(glob("\\\\machine-name\\some\\share\\*"));
Я получу полное содержимое этого каталога, доказав, что с PHP нет проблем с чтением содержимого общего ресурса UNC. Однако, если я пытаюсь выполнить тот же сценарий с веб-сервера, я получаю пустой массив - более конкретно, если я использую более явные функции, предназначенные для "открытия" каталога, как это был файл, я получаю ошибки доступа.
Я считаю, что это проблема с разрешениями, но я не являюсь администратором сервера / сети, поэтому я не уверен, что мне нужно сделать, чтобы исправить это и запустить мой скрипт, а ссылки, которые я проверил, не имеют Это была огромная помощь, возможно, из-за моего прошлого или отсутствия такового, что касается IIS, в сочетании с тем фактом, что мы фактически не используем.NET для этого.
Соответствующая статистика: Windows Server 2008 Standard SP2 IIS 7.0 PHP 5.2.9
Я буду подключаться к двум типам серверов: нескольким другим почти идентичным машинам с Server 2008 и машине со встроенной XP.
Ссылки, которые не были особенно полезны, но, возможно, я просто неправильно читаю:
3 ответа
Как вы уже догадались, это проблема с разрешениями... пользователь, который запускает рабочий процесс IIS, является локальной учетной записью на компьютере (скорее всего, IUSER_<MACHINENAME>
), и этот пользователь не аутентифицирован (и при этом acocunt даже не существует!) на других машинах, которые вы пытаетесь просмотреть через UNC
В качестве теста вы можете зайти в диспетчер IIS и изменить функционирование службы IIS для этого веб-сайта... Я использую терминологию из Server 2003/IIS 6, потому что у меня нет коробки Server 2008 под рукой сейчас. Если вы поэкспериментируете в диспетчере IIS 7, вы сможете найти, где вы можете указать пользователя, от имени которого запускается рабочий процесс.
Ваше PHP-приложение выполняется с использованием учетной записи службы, и это учетная запись пользователя, учетные данные которого используются для доступа к сетевым ресурсам. По умолчанию в IIS для этого используется локальная учетная запись веб-сервера, и эта учетная запись не имеет прав доступа к сетевым ресурсам (поскольку это локальная учетная запись).
Вы должны настроить пул приложений IIS для своего веб-сайта на запуск с использованием учетной записи пользователя домена, а затем дать этой учетной записи соответствующие разрешения для общего сетевого ресурса.
Если у вас нет домена Active Directory или эти два сервера не являются его членами, все становится немного сложнее, но это можно сделать в любом случае, создав две учетные записи с одинаковыми именами и паролями на обоих серверах.
Если вы используете "Windows Server 2008 Standard SP2 IIS 7.0", ПОЧЕМУ вы читаете статьи о Windows/IIS из прошлого тысячелетия?
У вас не может быть ничего, что описывают эти разделы "APLLIES TO:", например IIS3.0-5.0 (в основном IIS 4.0), классический ASP (устарел в 1999 году), устаревшие расширения FrontPage, ASP.NET.0-1.1 (C#.NET/VB.NET 2002) и контекст рабочих станций в рабочей группе!
У вас есть AD/DC?
Пожалуйста, прочитайте мой ответ на Олицетворение не работает - Network Share