php 访问窗口下的网络路径

2022-08-31 01:00:33

在安装在Windows XP计算机上的PHP(XAMPP)中,我正在尝试读取本地网络服务器上存在的dir。我用来检查它是否是我可以阅读的dir。is_dir()

在 Windows 资源管理器中,我键入并显示该目录。当我映射网络驱动器时,也可以访问它。\\\server\dirz:\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

但我从未获得成功?有什么想法吗?感谢


答案 1

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

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

无论如何,感谢VolkerK和Gumbo!我喜欢stackoverflow和他们伟大的人,他们以令人难以置信的速度帮助你!

编辑(摘自 php.net):

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

将 RestrictNullSessAccess=0 添加到您的寄存器中。


答案 2

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

在本地系统帐户的上下文中运行的服务将继承 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>";

推荐