php访问Windows下的网络路径

时间:2009-07-20 14:11:18

标签: php networking path dir

安装在Windows XP计算机上的PHP(XAMPP)中的

我试图读取本地网络服务器上存在的目录。我正在使用is_dir()来检查它是否是我能阅读的目录。

在Windows资源管理器中,我输入\\\server\dir并显示该目录。 当我映射网络驱动器时,也可以使用z:\dir访问它。

在PHP中我有那个脚本:

<?php if( is_dir($dir){ echo 'success' } ) ?>

对于$dir,我尝试过:

  • /server/dir
  • //server/dir
  • \server\dir
  • \\server\dir
  • \\\\server\\dir

  • z:\dir
  • z:\\dir
  • z:/dir
  • z://dir

但我从未获得成功? 任何的想法? THX

3 个答案:

答案 0 :(得分:9)

我通过更改服务器注册表中的一些内容解决了这个问题,如本讨论的最后一个答案所述:

http://bugs.php.net/bug.php?id=25805

感谢VolkerK和Gumbo! 我喜欢stackoverflow和他们伟大的人,他们如此快速地帮助你!

编辑(摘自php.net):

  

该服务对网络资源(例如共享)的访问权限有限   和管道,因为它没有凭据,必须使用null连接   会话。以下注册表项包含NullSessionPipes和   NullSessionShares值,用于指定管道和   空会话可以连接的共享:   HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \服务\ LanmanServer \参数   或者,您可以添加REG_DWORD值   RestrictNullSessAccess to the key并将其设置为0以允许所有null   会话以访问在该计算机上创建的所有管道和共享。

将RestrictNullSessAccess = 0添加到您的注册表中。

答案 1 :(得分:7)

你可能让xampp安装apache作为服务并通过这个apache运行php脚本。并且不允许以用户帐户的方式访问网络的apache服务(以localsystem运行)。

在LocalSystem帐户的上下文中运行的服务继承SCM的安全上下文。用户SID是从SECURITY_LOCAL_SYSTEM_RID值创建的。 该帐户未与任何已登录的用户帐户相关联。 这有几个含义:
...
* 该服务将计算机的凭据提供给远程服务器 ...

您可以通过启动apache作为控制台应用程序(xampp目录中的apache_start.bat应该这样做)来测试这一点并再次运行脚本。您可以在unc路径中使用向前和向后斜杠。我建议使用// server / share,因为php不关心/在字符串文字中。

<?php
$uncpath = '//server/dir';
$dh = opendir($uncpath);
echo "<pre>\n";
var_dump($dh, error_get_last());
echo  "\n</pre>";

答案 2 :(得分:3)

尝试file: URI方案:

file://server/dir
file:///Z:/dir

开头总是file://。下一个路径段是服务器。如果它在您的本地计算机上,请将其留空(请参阅第二个示例)。另请参阅File URIs in Windows