2012-12-14 46 views
0

我试图从浏览器连接到网络共享(通过它的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']的不同值。

这是权限问题吗?有没有传递的验证令牌?

编辑
映射的共享网络驱动器是不是在这种情况下的一个选项,很遗憾。

回答

1

它应该工作,但您需要运行php进程的用户有权访问该路径。

对于您的情况,如果不在域中,您可以尝试在服务器上创建用户并将其设置为应用程序池所有者。然后在另一台计算机上创建相同的用户/密码,并访问共享文件夹。

看起来很丑我同意但应该工作。

编辑

还是有的,由尼尔的建议,创建一个映射文件夹。可能会更容易。

EDIT 2

假设你是不是在一个域,创建用户并分配给它来运行应用程序中执行如下:

  1. 创建用户 Create the user

  2. 运行iismanager并设置用户运行应用程序

Assign the user to run your application

的最后一步是要创造一个要共享的路径在远程服务器上完全相同的用户(密码为好),并在安全选项卡中有你需要的权限添加该用户。

您可能需要重新启动iis:iisreset

+0

我将如何找到运行php进程的用户?那会是'get_current_user()'? –

+0

最简单的方法:创建一个新的并确保它运行应用程序。如果需要,我可以编辑答案并添加打印屏幕。 – cheesemacfly

+0

是的,这将是非常有帮助的。谢谢。 –

0

您不能在PHP中使用UNC路径轻松访问文件。

尝试制作映射的网络驱动器。

+0

不幸的是,将其映射为驱动器不适合我。我已经看到许多人使用PHP连接到UNC,并且我的脚本是从命令行运行的,所以它必须是可能的。 –