Я собирался сказать: «Вы также не можете сделать это из командной строки», и я уверен, что раньше это было правдой, но я только что попробовал на WinXP Pro SP3, и он работает, просто несмотряменя.
Мне нужно было заставить PHP общаться с сетевым диском некоторое время назад (когда я был явно более зеленым в мире PHP), и у меня был кошмар, заставляющий его работать, однако в конце концов мне удалосьзаставить его работать, выполнив следующие действия:
- В оснастке MMC «Службы» измените учетную запись, под которой работает Apache, на локального пользователя.Вероятно, в данный момент будет установлено значение SYSTEM и (AFAIK) эта учетная запись не имеет доступа к сетевым дискам.После этого вам потребуется перезапустить службу.
- Добавьте следующую строку, прежде чем пытаться получить к ней доступ:
system('net use Z: "\\servername\sharename" PASSWORD /user:USERNAME /persistent:no');
, где вы меняете букву диска, UNC-путь, имя пользователя и т. Д. В соответствии с вашими требованиями.Сделайте это, даже если диск уже подключен.Кажется, я помню, что мне пришлось использовать system()
вместо exec()
или shell_exec()
, или это не сработало - в результате вам нужно будет выполнить выход-буфер, чтобы остановить вывод данных в STDOUT.
Понятия не имею, почему это сработало, но это сработало.Обратите внимание, что я пытался использовать диск с собственными функциями PHP, такими как opendir()
и fopen()
, вместо того, чтобы пытаться exec()
использовать внешнюю программу против него.
Если вы хотите просмотретьсообщения об ошибках от вашего звонка до dir
, добавьте 2>&1
в конец команды.Это перенаправит STDERR в STDOUT, поэтому вы должны получить сообщения об ошибках в результате exec()
.
Так ваша строка будет выглядеть так:
exec("dir Z:\\some\\path 2>&1")