无法连接到网络共享

时间:2012-12-14 19:11:50

标签: php iis network-share

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

这是权限问题吗?是否存在未传递的身份验证令牌?

修改
不幸的是,在这种情况下,不能将共享映射到网络驱动器。

2 个答案:

答案 0 :(得分:1)

它应该可以工作但你需要运行php进程的用户才能访问该路径。

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

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

修改

或者是,正如Neal建议的那样,创建一个映射文件夹。可能会更容易。

编辑2

假设您不在域中,要创建用户并指定它来运行应用程序,请执行以下操作:

  1. 创建用户 Create the user

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

  3. Assign the user to run your application

    最后一步是在共享路径的远程服务器上创建相同的用户(密码),并在安全选项卡中添加此用户以及您需要的权限。

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

答案 1 :(得分:0)

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

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