在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 。