【问题标题】:PHP readdir() Error 500 Endless LoopPHP readdir() 错误 500 无限循环
【发布时间】:2013-01-09 14:10:29
【问题描述】:

我有一个可以在我付费的服务器上运行的脚本。但是,当我尝试在 localhost 下安装相同的代码时,我会在无限循环中收到此错误。

PHP 警告:readdir() 期望参数 1 是资源。

我环顾四周,有人说这是文件夹访问,但它在远程服务器上工作,而不是在读写访问为 100% 的本地主机上。

这可能是由 php.ini 中的设置触发的吗?

我的意思是除此之外,我看不到任何其他会触发此事件的东西。

这是错误指向的代码。但我不认为是代码,因为它可以在一台服务器上运行,但不能在另一台服务器上运行。更正我现在已经在 hostgator 上加载了这段代码,它在我的安全注册服务器上也可以正常工作。两者都工作正常。只有 localhost 收到此错误。

 $upgraded_folder_path = $CFG['site']['project_path'] . "languages/" . $CFG['lang']['default'] . "/" . strtolower($value) . "/" . $upgraded_folder_name;
            if (!is_dir($upgraded_folder_path) && !($handle = opendir($upgraded_folder_path)))
                {
                while (false !== ($file = readdir($handle)))
                    {
                    if ($file == "." || $file == "..")
                        {
                        continue;
                        }
                    $file_name = $upgraded_folder_path . "/" . $file;
                    if (is_file($file_name))
                        {
                        require_once($file_name);
                        }
                    }
                closedir($handle);
                }

【问题讨论】:

    标签: php phpmyadmin php-ini


    【解决方案1】:

    您仅在readdir() 是一个无效资源时调用它,即 - 当它无法打开目录时:

     if (!is_dir($upgraded_folder_path) && !($handle = opendir($upgraded_folder_path)))
    

    您只能读取现有目录您可以打开的目录。如果您从 if 语句中的两个条件中删除 !,它应该可以正常工作。尽管如此,您还需要确保该目录存在并且您的用户有权读取它。

    【讨论】:

    • 可能是因为该文件夹存在于一台服务器上,但不存在于另一台服务器上。
    • @user1170117 如果目录存在,则不会进入if语句——因此不会出错。
    • 奇怪的是,我在两台服务器上解压缩了相同的代码。没有什么区别。
    • @user1170117 您的 localhost 安装和 hostgator 安装之间的配置差异可能具有不同的显示错误设置。尝试使用 error_reporting(E_ALL); 在 hostgator 页面上打开错误,如果文件结构确实相同,您应该会看到错误。
    • 删除 !解决了这个问题。太感谢了。我还回应了升级文件夹,看看它是什么。文件夹在那里,不确定代码没有看到它。
    猜你喜欢
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多