读取网络驱动器上的文件

use*_*014 8 php networking

我在Windows Server上运行Xampp; Apache作为具有本地帐户的服务运行.在此服务器上,网络共享作为X:安装,具有特定凭据.

我想访问位于X上的文件:并运行以下代码

<?php
echo shell_exec("whoami");
fopen('X:\\text.txt',"r");
?>
Run Code Online (Sandbox Code Playgroud)

得到

theservername\thelocaluser
Warning: fopen(X:\text.txt) [function.fopen]: failed to open stream: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我试图运行Apache,而不是作为服务,但直接通过启动httpd.exe ...并且代码工作.

我无法看到导致服务和应用程序之间的差异以及如何使其工作的原因.

Rud*_*ser 13

您无法使用驱动器号执行此操作,因为网络映射驱动器仅供单个用户使用,因此服务无法使用(即使您要为该用户安装它).

你可以做的是直接使用UNC路径,例如:

fopen('\\\\server\\share\\text.txt', 'r');
Run Code Online (Sandbox Code Playgroud)

但请注意,对于UNC路径的PHP文件系统访问存在一些问题.一个例子是我申请imagettftext错误,但也有与问题file_existsis_writeable.我没有报道后者,因为你可以从我的长期突出的错误中看到imagettftext,有什么意义.


Law*_*one 5

对于网络共享,应使用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
Run Code Online (Sandbox Code Playgroud)