接入网与PHP5.2+IIS7.5共享

接入网与PHP5.2+IIS7.5共享,php,iis-7.5,Php,Iis 7.5,我在IIS7.5中使用PHP5.2 我在NAS上有一个受用户名和密码保护的网络共享。我无法禁用或更改NAS上的身份验证信息。我需要能够通过php访问该网络共享 我已经做了以下工作: 在windows中创建了新用户,其用户名和密码与NAS上的用户名和密码匹配。 已创建使用此相同身份验证信息的IIS应用程序池。 使用相同的身份验证信息在php应用程序目录中创建了一个web.config文件,并启用了模拟 身份模拟=真实密码=密码用户名=用户/> 在IIS中的应用程序身份验证中启用ASP.NET模拟

我在IIS7.5中使用PHP5.2

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

我已经做了以下工作:

在windows中创建了新用户,其用户名和密码与NAS上的用户名和密码匹配。 已创建使用此相同身份验证信息的IIS应用程序池。 使用相同的身份验证信息在php应用程序目录中创建了一个web.config文件,并启用了模拟

身份模拟=真实密码=密码用户名=用户/>

在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的环境部分,我找到了用户名项。它的价值在于用户,这正是我所期望的

在我尝试之前,所有内容都指向系统配置正确:

echo获取当前用户; 它回来了,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) 
更新


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

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

顺便说一句,你的命令是错误的 $dir=opendir\\someservername\somesharename; 您必须使用4\因为它是转义字符 $dir=opendir\\\\someservername\somesharename


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

在PHP中访问网络共享的建议方法是挂载它。尝试将共享连接为网络驱动器

顺便说一句,你的命令是错误的 $dir=opendir\\someservername\somesharename; 您必须使用4\因为它是转义字符 $dir=opendir\\\\someservername\somesharename


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

您可以通过如下映射来尝试测试

$command = "net use $drive \"\\\\$ip\\$share\" $smb_password /user:$domain\\$smb_username";
$result = shell_exec($command);
在opendir上,您需要使用\\\\$server\\$name\\$share尝试使用4'\',如果这样的映射有效,并且在opendir上4'\'失败。您可能有不匹配的凭据


如果您以这种方式映射,您在windows中创建的用户名和密码与NAS上的用户名和密码匹配的新用户将拥有映射驱动器的权限,这样您就不必担心范围。

您可以通过如下方式映射来尝试测试:

$command = "net use $drive \"\\\\$ip\\$share\" $smb_password /user:$domain\\$smb_username";
$result = shell_exec($command);
在opendir上,您需要使用\\\\$server\\$name\\$share尝试使用4'\',如果这样的映射有效,并且在opendir上4'\'失败。您可能有不匹配的凭据


如果您以这种方式映射它,您在windows中创建的用户名和密码与NAS上的用户名和密码匹配的新用户将拥有映射驱动器的权限,这样您就不必担心范围。

在类似的系统上也有同样的问题。通过转到网站>身份验证>匿名身份验证>将IUSR更改为您的用户名,或者在正确配置的情况下使用应用程序池用户来解决此问题。

在类似的系统上也有相同的问题。通过转到网站>身份验证>匿名身份验证>将IUSR更改为您的用户名,或者在正确配置的情况下使用应用程序池用户来解决此问题。

您是否看到与装载/访问相关的内容以及与脚本进程所有者相关的内容而不是脚本所有者?第一个不适用于此处,他们使用的是Apache,而不是IIS。映射网络驱动器时,它的作用域是映射它的用户。您仍然只是通过UNC路径访问它。您是否看到了与装载/访问相关的内容,以及与脚本进程所有者相关的内容,而不是脚本所有者?第一个不适用于此处,他们使用的是Apache,而不是IIS。当您映射网络驱动器时,它的作用域是映射它的用户。您仍然只是通过UNC路径访问它。映射驱动器工作正常。但open_dir仍然失败。请参阅ori中的更新
ginal问题。您的OpenBaseDir限制是什么?您可能需要检查这些限制,因为映射驱动器上的is\u dir返回false。来自phpinfo:OpenBaseDir无值无值我已更新帖子。我以特殊用户的身份从命令行运行脚本,它工作正常。映射驱动器工作正常。但open_dir仍然失败。请参阅原始问题中的更新。由于映射驱动器上的is_dir返回false,您可能需要检查哪些open_basedir限制。来自phpinfo:open_basedir无值无值我已更新帖子。我以特殊用户的身份从命令行运行脚本,并且它工作正常。