我试图从浏览器连接到网络共享(通过它的UNC),但无法连接。无法连接到网络共享
如果我从命令行运行我的脚本,一切都很好,我可以访问共享。我也可以通过Windows的文件浏览器导航到它,所以我不认为我的代码或我的Windows帐户的权限有任何问题。
我的剧本是这样的:
$dir = '\\\\some\path';
if (is_dir($dir))
{
echo 'dir exists';
}
else
{
echo 'dir does not exist';
}
我使用DirectoryIterator($dir)
也试过,但引发此异常错误: PHP Warning: opendir(...): Access is denied. (code: 5)
这里是我的设置:
- 在Windows Server 2008 R2
- IIS 7.5
- PHP 5.3.13
- 禁用匿名身份验证
- Windows身份验证启用
而且我在我的php.ini这些配置设置:
cgi.force_redirect=0
cgi.fix_pathinfo=1
fastcgi.impersonate=1
为了增加混乱,我能这些情况下,通过浏览器连接:
1 - 使用system("net use \"".$dir."\" ".$pass." /user:".$user." /persistent:no>nul 2>&1");
但是这需要硬编码用户的Windows认证密码,我不能这样做。
2 - 设置fastcgi.impersonate=0
但是这意味着用户每次碰到脚本时都必须进行身份验证,这是不可接受的。
3 - 启用匿名身份验证,禁用Windows身份验证,但我需要启用Windows身份验证,以便知道谁正在访问该站点。
我不知道这是否与我的问题有关,但在从浏览器和命令行运行我的脚本时,我获得了$_SERVER['USERNAME']
的不同值。
这是权限问题吗?有没有传递的验证令牌?
编辑
映射的共享网络驱动器是不是在这种情况下的一个选项,很遗憾。
我将如何找到运行php进程的用户?那会是'get_current_user()'? –
最简单的方法:创建一个新的并确保它运行应用程序。如果需要,我可以编辑答案并添加打印屏幕。 – cheesemacfly
是的,这将是非常有帮助的。谢谢。 –