使用PHP5.2 + IIS7.5访问网络共享

Dar*_*g8r 2 php iis-7.5

我正在使用 php 5.2 和 IIS7.5。

我的 NAS 上有一个受用户名和密码保护的网络共享。我无法禁用或更改 NAS 上的身份验证信息。我需要能够通过 php 访问该网络共享。

我做了以下事情:

在 Windows 中创建新用户,其用户名和密码与 NAS 上的用户名和密码一致。创建使用相同身份验证信息的 IIS 应用程序池。使用相同的身份验证信息在打开模拟的情况下在 php 应用程序目录内创建了一个 web.config 文件。

身份模拟=“true”密码=“ThePass”userName=“TheUser”/>

在 IIS 中的应用程序身份验证中启用了 ASP.NET 模拟。

这一切似乎都不适用于 php 中的这行简单代码:

$dir = opendir("\\someservername\somesharename"); 警告: opendir(\someservername\somesharename) [function.opendir]: 无法打开目录:第 7 行 C:\websites\site\forum\testing.php 中没有错误

因此,我决定使用 ASP.NET 来测试配置。

string[] diretories = System.IO.Directory.GetDirectories("\\someservername\somesharename"); asp.net 测试完美运行。

进一步深入兔子洞,我运行 phpinfo() 并检查其中的用户名信息。在 phpinfo 的“环境”部分中,我找到了“用户名”项。正如我所期望的,它的值是“TheUser”。

一切都表明系统配置正确,直到我尝试:

回显 get_current_user(); 返回的是“IUSR”。这肯定不是我所期望的。

那么,我到底如何让 php + IIS7.5 从国外网络共享中读取数据呢?

更新:

感谢一些答案,我添加了

$result = shell_exec("net use o: \\\\pathToServer\\27301  /persistent:yes 2>&1");
Run Code Online (Sandbox Code Playgroud)

返回成功。我仍然在 opendir 上遇到错误。我尝试了另一个测试并使用 is_dir。这在我新创建的映射驱动器上返回 false。

var_dump(is_dir("o:\\"));

// Prints: bool(false) 
Run Code Online (Sandbox Code Playgroud)

更新

当我以创建的用户身份登录时,我从命令行运行了该脚本。脚本正确执行。这能让我们回到返回 IUSR 的 get_current_user() 吗?我尝试了 getmypid(),它返回了一个进程 ID。我与任务管理器交叉引用该进程 ID,发现它是用于 php-cgi.exe,在我创建的自定义用户帐户下运行。

mab*_*lin 5

在 PHP 中访问网络共享的推荐方法是“挂载”它。尝试将您的共享连接为网络驱动器。

顺便提一句。你的命令是错误的 $dir = opendir("\\someservername\somesharename"); 您必须使用 4 个“\”,因为它是转义字符 $dir = opendir("\\\\someservername\somesharename");

注意:get_current_user()返回 IIS 上进程的所有者