Подключенные сетевые диски

Я подключил сетевой диск к компьютеру в моей домашней сети. Теперь я пытаюсь получить к нему доступ через PHP - я сделал этот быстрый тест:

echo opendir('Z:\\');

Это дает мне:

Warning: opendir(Z:\) [function.opendir]: failed to open dir: No error in C:\wamp\www\webs\tester-function.php  on line 3

Что я здесь сделал не так?

Я не хочу, чтобы мои пользователи вводили путь UNC, поэтому есть ли способ получить для них путь UNC, и, возможно, это сработает, когда я попытаюсь получить к нему доступ? Это возможно на языках Microsoft, но я не уверен, как заставить PHP сделать это - может быть, с помощью команды cmd.exe?

Обратите внимание: подключенный диск существует, поскольку я его вижу и могу получить к нему доступ. Это также не похоже на проблему с разрешениями, поскольку я предполагаю, что он будет жаловаться на это, ЕСЛИ он может получить доступ к этому диску ... верно?

Спасибо всем за любую помощь


person Abs    schedule 07.04.2010    source источник
comment
(связанные) bugs.php.net/40117   -  person Gordon    schedule 07.04.2010
comment
Этот сценарий выполняется экземпляром php, который был создан веб-сервером? Этот веб-сервер работает как служба? Эта служба работает как localsystem или вы используете другую учетную запись? Для какой учетной записи вы создаете карту дисков (свою или для учетной записи службы)?   -  person VolkerK    schedule 07.04.2010
comment
Да, экземпляр php, созданный веб-сервером. Да, веб-сервер работает как служба. Да как localsystem. Этот подключенный диск создан мной, а не localsystem. Однако у localsystem автоматически установлены разрешения для этого подключенного диска.   -  person Abs    schedule 07.04.2010


Ответы (3)


В заметках, добавленных пользователями для opendir (), есть следующее:

Я пытался получить доступ к сетевым дискам с помощью этой функции opendir. Я прочитал так много сообщений, в которых говорилось, что получить доступ к сетевому диску практически невозможно, и, наконец, я нашел ответ; Чтобы получить доступ к сетевому диску с помощью PHP на том же или другом компьютере, необходимо выполнить 2 шага.

В этом случае, действительно, проблема заключалась в правах пользователя, которые могут отличаться от ваших прав в зависимости от того, на каком пользователе работает PHP / веб-сервер.

person Pekka    schedule 07.04.2010
comment
Это интересно! Apache запускается от имени пользователя «СИСТЕМА» - в настройках разрешений - подключенный диск имеет пользователя «СИСТЕМА», чтобы иметь возможность читать диск. Таким образом, я сделал эти два шага, но это все еще не работает. Может я что-то не понял ?! - person Abs; 07.04.2010
comment
Как вы создали карту проезда? Создание карты дисков для вашей учетной записи не означает, что процесс / учетная запись веб-сервера получает такое же сопоставление. - person VolkerK; 07.04.2010
comment
@ Трудно сказать. Может быть, попробуйте запустить службу под определенной учетной записью пользователя, как указано в связанном комментарии, просто чтобы посмотреть, работает ли она таким образом? - person Pekka; 07.04.2010
comment
Я попробую это. @VolkerK - Я использовал мастер настройки сетевых дисков с обычным картированием, авторизовавшись как я Abs-PC. Как только я это сделал, были другие пользователи и группы пользователей, у которых были установлены разрешения (все, по крайней мере, на чтение), одна из которых - SYSTEM, под которой работает служба httpd. - person Abs; 07.04.2010
comment
@Abs: взгляните на msdn.microsoft .com / en-us / library / aa363908% 28v = VS.85% 29.aspx. Вы создали сетевой диск в пространстве имен устройства local MS-DOS. - person VolkerK; 07.04.2010

Откройте консоль управления службами, выбрав Пуск -> Выполнить (или используя поле поиска, если используется Windows 7), набрав Services.msc и нажав клавишу ВВОД. Найдите службу Apache. Я никогда не использовал WAMP, поэтому понятия не имею, как он был назван. Надеюсь, он начинается со слова «Apache», и поэтому найти его не составит большого труда. Щелкните службу правой кнопкой мыши и выберите «Свойства». Перейдите на вкладку «Вход в систему». Установите переключатель рядом с «Эта учетная запись:» и введите учетные данные для учетной записи пользователя, под которой вы хотите запустить Apache. Если это учетная запись сети / домена, используйте синтаксис «ДОМЕН \ пользователь» (или найдите учетную запись с помощью кнопки «Обзор»). Выберите ОК и перезапустите службу Apache. Убедитесь, что ваши изменения сработали, поискав процесс «httpd.exe» в диспетчере задач и проверив, под каким именем пользователя выполняется этот процесс.

ссылка http://board.phpbuilder.com/board/showthread.php?t=10371870&page=2

person Ali Pourheidar    schedule 25.06.2012
comment
Обязательно осознайте последствия для безопасности того, что вы делаете, изменяя пользователя, под которым запускается Apache. Учетная запись локальной системы дает ей ограниченный доступ к важным областям файловой структуры и НИКАКОЙ доступ к сети. Изменяя это, вы можете предоставить доступ к защищенным областям и любой доступ к сети, который есть у пользователя. Это может означать, что как только кто-то взломает вашу программу, он получит доступ ко всему вашему компьютеру и вашей сети (чтобы иметь возможность размещать файлы). Если возможно, попробуйте найти способ сделать это в рамках безопасности, встроенной в Apache и Windows. - person Robert; 29.06.2015

просто, используйте: "\\\\server\\dir\\subfolder" в качестве пути. убедитесь, что у вас есть доступ к «серверу».

работает на меня.
$arquivo = "\\\\server\\dir\\subfolder\\file.txt"; echo is_file($arquivo); //print 1.

person Guilherme    schedule 10.09.2013
comment
Это отлично сработало для меня, я пробовал много других способов, прежде чем добраться до этого. Нет необходимости менять какие-либо разрешения для этого, по крайней мере, в моем случае. - person user3101337; 03.12.2014