【问题标题】:Strange php opendir/glob issue奇怪的 php opendir/glob 问题
【发布时间】:2011-12-09 09:34:44
【问题描述】:

opendir 有一个奇怪的问题(glob 也有同样的问题):

$dir = "Y:\\\\foldername\\";
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            echo "filename: $file\n";
        }
        closedir($dh);
    }
}

Y:\ 是具有身份验证的网络文件夹。 我的网络服务器名称是 testweb,这个脚本叫做 tree.php。 不幸的是,我的环境是基于 Windows 的(php 5.2.5 ISAPI,Windows 2003 服务器)。

当我从运行 IIS 的同一台机器(http://testweb/tree.php)打开脚本时,一切正常,但如果我从另一台机器(例如我的笔记本电脑)连接到相同的地址,我会得到以下信息错误:

警告:opendir().. 未能打开目录。 D:\web\tree.php 中没有错误

这似乎是一个权限问题,但为什么它是从“本地机器”而不是从外部工作?我该如何解决这个问题?

感谢您的帮助!!

【问题讨论】:

  • 不要在 PHP 中对路径使用反斜杠 - 它会在 Windows 上为您自动翻译。改用//server01/foldername,免得患上倾斜牙签综合症

标签: php glob opendir


【解决方案1】:

检查您对该目录的权限..您可以使用名为is_readable的函数来完成此操作

【讨论】:

  • 同样的问题...如果我从 IIS 机器打开浏览器,var_dump(is_readable($path)) 会返回 true.. 但从外部返回 false..!!
  • 您说“Y:\ 是具有身份验证的网络文件夹”.. 那么远程计算机是否应该进行身份验证才能读取?
  • No.. 它是在 Windows 中映射到特定域帐户的共享。这很奇怪,因为从客户端的角度来看它应该是透明的。. 浏览器联系网络服务器,php 读取一个文件夹(并且 windows 应该使用适当的身份验证打开它)。如果我在与网络服务器相同的机器上打开浏览器应该是相同的..应该..但似乎不是!
【解决方案2】:

即使在我更改权限并以管理员身份登录之前,我也遇到过此错误,但错误仍然存​​在。

我通过给出函数 opendir() 的绝对路径来解决这个问题,而不是写“子文件夹”我写了“C:\wamp\www\myproject\subfolder”,这解决了我的问题!

谢谢

【讨论】:

    猜你喜欢
    • 2012-05-09
    • 1970-01-01
    • 2020-07-28
    • 2015-12-20
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多