В настоящее время я работаю над интерфейсом 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.
Ссылки, которые не были особенно полезными, но, возможно, я просто неправильно читаю:
Ваше приложение PHP запускается с использованием учетной записи службы, и это учетная запись пользователя, учетные данные которой используются для доступа к сетевым ресурсам. По умолчанию IIS использует для этого локальную учетную запись веб-сервера, и эта учетная запись не имеет разрешений на доступ к сетевым ресурсам (поскольку это локальная учетная запись).
Вам следует настроить пул приложений IIS для своего веб-сайта для запуска с использованием учетной записи пользователя домена, а затем предоставить этой учетной записи пользователя соответствующие разрешения в общей сетевой папке.
Если у вас нет домена Active Directory или эти два сервера не являются его членами, все становится немного сложнее, но это можно сделать в любом случае, создав две учетные записи пользователей с одинаковыми именами пользователей и паролями на обоих серверах.
Как вы уже догадались, это проблема с разрешениями ... пользователь, работающий под управлением рабочего процесса IIS, является локальной учетной записью на компьютере (скорее всего, IUSER_<MACHINENAME>
), и этот пользователь не аутентифицирован (и документ даже не существует!) на других машинах, которые вы пытаетесь просматривать через UNC
Просто в качестве теста вы можете войти в диспетчер IIS и изменить то, что служба IIS работает на этом веб-сайте ... Я использую терминологию из Server 2003 / IIS 6, хотя, потому что у меня нет удобного окна Server 2008. сейчас. Если вы покопаетесь в диспетчере IIS 7, вы сможете найти, где вы можете установить пользователя, от имени которого запускается рабочий процесс.
Если вы используете «Windows Server 2008 Standard SP2 IIS 7.0», ПОЧЕМУ вы читаете статьи о Windows-es / IIS за предыдущее тысячелетие?
У вас не может быть ничего, что описано в этих разделах статьи «ПРИМЕНЯЕТСЯ:», например IIS3.0-5.0 (в основном IIS 4.0), классический ASP (не рекомендуется в 1999 г.), устаревшие расширения FrontPage, ASP.NET.0-1.1 (C # .NET /VB.NET 2002) и контекст рабочих станций в рабочей группе!
У вас есть AD / DC?
Пожалуйста, прочтите мой ответ на Выдача себя за другое лицо НЕ работает - сетевой ресурс