我试图读取本地网络服务器上存在的目录。我正在使用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
答案 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。