9

我在 Windows Server 上运行 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 ... 并且代码有效。

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

4

2 回答 2

16

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

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

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

但是请注意,PHP 对 UNC 路径的文件系统访问存在一些问题。一个例子是我为 imagettftext 提交的一个错误,但也存在与file_existsand相关的问题is_writeable。我没有报告后者,因为正如您从我长期存在的错误中看到的那样imagettftext,这有什么意义。

于 2013-01-16T20:58:23.637 回答
7

对于网络共享,您应该使用 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
于 2013-01-16T20:58:38.070 回答