读取网络驱动器上的文件

时间:2013-01-16 20:56:28

标签: php networking

我正在Windows服务器上运行Xampp; 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直接运行... 并且代码有效。

我看不出是什么导致了服务和应用程序之间的区别以及如何使它工作。

2 个答案:

答案 0 :(得分:13)

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

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

fopen('\\\\server\\share\\text.txt', 'r');

但请注意,对于UNC路径的PHP文件系统访问存在一些问题。一个示例是bug I filed for imagettftext,但file_existsis_writeable也存在问题。我没有报告后者,因为你可以从imagettftext的长期未知错误中看到,有什么意义。

答案 1 :(得分: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