Я запускаю Xampp на Windows Server; Apache работает как служба с локальной учетной записью. На этом сервере сетевой ресурс монтируется как X: с определенными учетными данными.
Я хочу получить доступ к файлам, расположенным на X: и запустить следующий код
<?php echo shell_exec("whoami"); fopen('X:\\text.txt',"r"); ?>
и получить
theservername\thelocaluser Warning: fopen(X:\text.txt) [function.fopen]: failed to open stream: No such file or directory
Я пытался запустить Apache, а не как сервис, но напрямую, запустив httpd.exe … и код работал.
Я не вижу, что вызывает разницу между сервисом и приложением и как заставить его работать.
Вы не можете сделать это, используя букву диска, поскольку сетевые диски с подключением к сети предназначены только для одного пользователя и поэтому не могут использоваться службами (даже если вы должны установить его для этого пользователя).
Вместо этого вы можете использовать UNC-путь, например:
fopen('\\\\server\\share\\text.txt', 'r');
Обратите внимание, однако, что есть несколько проблем с доступом к файловой системе PHP для UNC-путей. Одним из примеров является ошибка, которую я подал для imagettftext , но есть также проблемы с file_exists
и is_writeable
. Я не сообщил об этом последнему, потому что, как вы можете видеть из моей давно выдающейся ошибки с imagettftext
, в чем смысл.
Для общих сетевых ресурсов следует использовать имена UNC: "//server/share/dir/file.ext"
Если вы используете IP-адрес или имя хоста, он должен работать нормально:
$isFolder = is_dir("\\\\NAS\\Main Disk"); var_dump($isFolder); //TRUE $isFolder = is_dir("//NAS/Main Disk"); var_dump($isFolder); //TRUE $isFolder = is_dir("N:/Main Disk"); var_dump($isFolder); //FALSE