PHP / Windows Server / IIS通过PHP通过符号链接访问另一台服务器上的文件夹

时间:2017-10-06 09:12:26

标签: php iis-8 windows-server-2012-r2

美好的一天!我撞墙了。

我正在尝试让PHP从另一台服务器上的文件夹加载文件并尝试了很多方法和权限变体(IIS / PHP使用Windows身份验证)但尚未找到解决方案。我很亲密,我可以品尝它。

文件位于另一台服务器上的文件夹中,例如\\otherServer\my_photos

为了访问它们,我在托管PHP站点的服务器上创建了一个符号链接,例如

C:\my_photos > \\otherServer\my_photos

然后,我正在进行各种测试以确定页面是否具有访问权限,例如:

$path = 'C:\\my_photos'; 
$isReadable = is_readable($path);
var_dump($isReadable);

上述内容会返回TRUE

但是,如果我这样做:

$path = 'C:\\my_photos\photo_1.jpg'; 
$isReadable = is_readable($path);
var_dump($isReadable);

返回FALSE

文件photo_1.jpg上的权限与文件夹my_photos相同,所以我怀疑原因是其他原因,例如某些安全限制会影响对其他服务器上文件的访问,但我是出于想法。我会以虚拟的感激回报任何帮助,甚至愿意用个人信息给你画一张照片。

更新 如果我们关闭Windows身份验证和匿名身份验证(在ApplicationPoolIdentity下运行)它可以工作,这似乎表明a)它不是一些令人困惑的跨服务器安全问题和b)问题可能更多地与PHP / fastCGI模仿的方式有关Windows用户。将切换回Windows身份验证并继续测试!

1 个答案:

答案 0 :(得分:0)

您忘记了转义目录名称前面的斜杠。它应该看起来像这样。

$path = 'C:\\my_photos\\photo_1.jpg'; 
$isReadable = is_readable($path);
var_dump($isReadable);

每个斜杠都被转义,因此\ otherServer \ my_photos将变为:

$path = '\\\\otherServer\\my_photos';

请注意,服务器名称前用四个斜杠,目录名称前用两个斜杠。