windows下php访问网络路径

发布于 2024-07-27 12:51:56 字数 727 浏览 8 评论 0原文

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

在 Windows 资源管理器中,我输入 \\\server\dir 并显示该目录。 当我映射网络驱动器时,a 也可以使用 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

但我从未成功? 任何想法? 谢谢

within PHP (XAMPP) installed on a Windows XP Computer Im trying to read a dir which exists on a local network server. Im using is_dir() to check whether it is a dir that I can read.

In Windows Explorer I type \\\server\dir and that dir is being shown.
When I map a network drive a can access it with z:\dir as well.

In PHP I have that script:

<?php if( is_dir($dir){ echo 'success' } ) ?>

For $dir I tried:

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

and

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

But I never get success?
Any idea?
thx

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梦回旧景 2024-08-03 12:51:56

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

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

无论如何,感谢 VolkerK 和 Gumbo!
我喜欢 stackoverflow 和他们很棒的人,他们帮助你的速度非常快!

编辑(取自 php.net):

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

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

I solved it by changing some stuff in the registry of the server as explained in the last answer of this discussion:

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

Thanks to VolkerK and Gumbo anyway!
I love stackoverflow and their great people who help you so incredibly fast!!

EDIT (taken from php.net):

The service has limited access to network resources, such as shares
and pipes, because it has no credentials and must connect using a null
session. The following registry key contains the NullSessionPipes and
NullSessionShares values, which are used to specify the pipes and
shares to which null sessions may connect:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
Alternatively, you could add the REG_DWORD value
RestrictNullSessAccess to the key and set it to 0 to allow all null
sessions to access all pipes and shares created on that machine.`

add RestrictNullSessAccess=0 to your registery.

蘸点软妹酱 2024-08-03 12:51:56

您可能让 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>";

You probably let xampp install apache as service and run the php scripts trough this apache. And the apache service (running as localsystem) is not allowed to access the network the way your user account is.

A service that runs in the context of the LocalSystem account inherits the security context of the SCM. The user SID is created from the SECURITY_LOCAL_SYSTEM_RID value. The account is not associated with any logged-on user account.
This has several implications:
...
   * The service presents the computer's credentials to remote servers.
...

You can test this by starting the apache as console application (apache_start.bat in the xampp directory should do that) and run the script again. You can use both forward and backward slashes in the unc path. I'd suggest using //server/share since php doesn't care about / in string literals.

<?php
$uncpath = '//server/dir';
$dh = opendir($uncpath);
echo "<pre>\n";
var_dump($dh, error_get_last());
echo  "\n</pre>";
撩发小公举 2024-08-03 12:51:56

尝试 file: URI 方案:

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

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

Try the file: URI scheme:

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

The begin is always file://. The next path segment is the server. If it’s on your local machine, leave it blank (see second example). See also File URIs in Windows.

安穩 2024-08-03 12:51:56

是的,我知道这是一篇旧帖子,但我仍然找到了它,如果其他人找到了......
在 Windows 上,对于较新的服务器,验证 SMB 是否已在目标计算机上安装并启用。

Yes, I know this is an old post, but I still found it, and if anyone else does...
On Windows, with newer servers, verify the SMB is installed and enabled on the target machine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文