php访问Windows下的网络路径

Max*_*Max 15 php networking path dir

安装在Windows XP计算机上的PHP(XAMPP)我试图读取本地网络服务器上存在的目录.我is_dir()用来检查它是否是我能阅读的目录.

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

在PHP中我有那个脚本:

<?php if( is_dir($dir){ echo 'success' } ) ?>
Run Code Online (Sandbox Code Playgroud)

因为$dir我试过:

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

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

但我从来没有成功过?任何的想法?谢谢

Max*_*Max 10

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

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

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

编辑(摘自php.net):

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

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

  • 那些东西会是什么?到php.net的链接不是很有帮助.你能在这里巩固你的解决方案吗? (3认同)

Vol*_*erK 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>";
Run Code Online (Sandbox Code Playgroud)