我使用php 5.2与IIS7.5。使用PHP5.2 + IIS7.5访问网络共享
我在NAS上有一个用户名和密码保护的网络共享。我无法禁用或更改NAS上的身份验证信息。我需要能够通过php访问该网络共享。
我已经做了以下内容:在Windows
创建新的用户,其用户名和密码相匹配的NAS上。 创建使用此相同的身份验证信息的IIS应用程序池。 使用相同的身份验证信息在打开模拟的情况下在php应用程序目录内创建一个web.config文件。
身份冒充= “真” 密码= “ThePass” 的userName = “TheUser”/>
在IIS在应用鉴定功能打开ASP.NET模拟。
无的,这似乎与代码在PHP这个简单的线路的工作:
$ DIR =执行opendir( “\\ someservername \ somesharename”); 警告:执行opendir(\ someservername \ somesharename)[function.opendir]:未能打开目录:C中没有错误:\网站\在线网站\论坛\ testing.php 7
所以,我决定测试使用ASP.NET进行配置。
string [] diretories = System.IO.Directory.GetDirectories(“\\ someservername \ somesharename”); asp.net测试工作完美。
继续往下走兔子洞,我跑了phpinfo()并检查了用户名信息。在phpinfo的“环境”部分,我找到了“USERNAME”项。它的价值是“TheUser”,正如我所预期的那样。
一切点,该系统被正确配置,直到我试图:
回波get_current_user(); 返回的是“IUSR”。这肯定不是我所期望的。
那么,如何在世界上获得php + IIS7.5从外部网络共享读取?
更新:
由于一些问题的答案,我已经添加
$result = shell_exec("net use o: \\\\pathToServer\\27301 /persistent:yes 2>&1");
它返回一个成功。我仍然在opendir上发生错误。我尝试了另一个测试并使用了is_dir。这在我新创建的映射驱动器上返回false。
var_dump(is_dir("o:\\"));
// Prints: bool(false)
UPDATE
为创建的用户登录,当我跑的命令行脚本。脚本正确执行。这可以把我们带回到返回IUSR的get_current_user()吗?我tryied getmypid()返回一个进程ID。我交叉引用进程ID与任务管理器,发现它是为php-cgi.exe,运行在我所做的自定义用户帐户下。
你见过[本说明](http://us3.php.net/manual/en/function.opendir.php#89091)(与安装/访问有关)和[本说明](http:// us3.php.net/manual/en/function.get-current-user.php#75059)与脚本进程的所有者有关(而不是脚本的所有者)? – chrisn 2012-03-26 03:27:17
第一个不适用于这里,他们使用的是Apache,而不是IIS。 – Darthg8r 2012-03-26 18:19:16
映射网络驱动器? – 2012-03-29 02:36:09