在windows下的php访问networkingpath

在安装在Windows XP计算机上的PHP(XAMPP)中,试图读取本地networking服务器上存在的目录。 我使用is_dir()来检查它是否是我可以读取的目录。

在Windows资源pipe理器中,input\\\server\dir并显示目录。 当我映射networking驱动器时,也可以使用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

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

我通过修改服务器registry中的一些东西来解决这个问题,正如本次讨论的最后一个答案所解释的那样:

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

无论如何感谢VolkerK和Gumbo! 我爱stackoverflow和他们伟大的人谁帮助你如此快速!

编辑(取自php.net):

该服务对networking资源(如共享和pipe道)的访问权限有限,因为它没有凭据,必须使用空会话进行连接。 以下registry项包含NullSessionPipes和NullSessionShares值,这些值用于指定空会话可能连接的pipe道和共享:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters或者,可以将REG_DWORD值RestrictNullSessAccess添加到密钥并将其设置为0以允许所有空会话访问在该机器上创build的所有pipe道和共享

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

你可能会让xampp安装apache作为服务,并通过这个apache运行php脚本。 而apache服务(作为本地系统运行)不允许以你的用户帐户的方式访问networking。

在LocalSystem帐户的上下文中运行的服务会inheritanceSCM的安全上下文。 用户SID是从SECURITY_LOCAL_SYSTEM_RID值创build的。 该帐户不与任何login的用户帐户相关联
这有几个含义:

* 该服务将计算机的凭据提供给远程服务器

您可以通过启动apache作为控制台应用程序(xampp目录中的apache_start.bat应该这样做)并再次运行脚本来testing。 您可以在uncpath中使用正斜杠和反斜杠。 我build议使用/ /服务器/共享,因为PHP不关心/string文字。

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

试试file: URIscheme:

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

开始始终是file:// 。 下一个path段是服务器。 如果它在本地机器上,请将其保留为空(请参阅第二个示例)。 另请参阅Windows中的文件URI 。