【问题标题】:Require path is not being accepted [closed]要求路径未被接受[关闭]
【发布时间】:2012-09-21 18:38:40
【问题描述】:

警告: 需要一次(/var/www/html/test_lms/include/mysql.processing.php): 无法打开流:中没有这样的文件或目录 /var/www/html/test_lms/include/IMEXporter.class.php上线 513

致命错误:require_once():需要打开失败 '/var/www/html/test_lms/include/mysql.processing.php' (include_path='.:/usr/local/lib/php') 在 /var/www/html/test_lms/include/IMEXporter.class.php上线 513

来自IMEXporter.class.php LINE 513 的 PHP 引发错误

require_once dirname(__FILE__) . "/mysql.processing.php";

文件在那里。
该文件是 chmod 777。
这两个文件都属于同一个用户和组。
php为什么要这样对我?


问题可能是 mysql.processing.php 本身已损坏,即使 php 找到了文件,它也拒绝检索它,而是抛出 Derp! cant find file. Derp.。像那样误导我有点愚蠢,但这是有可能的。我现在正在检查我的代码。

不,我尝试擦除mysql.processing.php 的整个脚本并写了

echo "Hello you impudent php";

它仍然找不到文件。所以它不是文件损坏的问题。我还修复了文件案例问题。从大写 P 到小写,它仍然不会去。我试图包含一个名为 test.php 的文件,但它也找不到那个文件..

【问题讨论】:

  • 如果文件与您正在执行此操作的脚本位于同一目录中,为什么要包含路径? . 已经在您的包含路径中。
  • 那么文件和IMEXporter.class.php脚本在同一个目录下吗?
  • 是的,在同一个目录下。
  • 在您发布的错误信息之前,通常会有另一条错误信息显示失败无法打开的原因。
  • 我进行了编辑以包含该错误。是一样的。

标签: include require require-once php


【解决方案1】:

您遇到区分大小写的问题。您很可能已将 windows environment 移至 Linux

如果您的文件是 mysql.processing.PHP require_once dirname(__FILE__) . "/mysql.processing.php 可以在 windows + apache 服务器上运行,但在 Linux + apace 上会失败

使用以下获取实际文件名

var_dump(scandir(__DIR__));

请运行这个简单的测试

error_reporting(E_ALL);

$name = "mysql.processing.php";
$file = __DIR__ . "/mysql.processing.php";
$dir = scandir(__DIR__);
$func = array("file_exists","is_file","is_readable");

echo "<pre>";
foreach ( $func as $fun ) {
    if (! $fun($file)) {
        echo $fun, " - Failed ", PHP_EOL;
    } else {
        echo $fun, " - Failed ", PHP_EOL;
    }
}

if (! in_array(basename($file), $dir)) {
    echo basename($file), " in_array Error", PHP_EOL;
} else {
    echo basename($file), " in_array OK", PHP_EOL;
}

if (! in_array($name, $dir)) {
    echo $name, " in_array Failed", PHP_EOL;
} else {
    echo $name, " in_array Ok", PHP_EOL;
}

if ($name !== basename($file)) {
    echo $name, " basename Failed", PHP_EOL;
} else {
    echo $name, " basename OK", PHP_EOL;
}

【讨论】:

  • 我试过了,它给出了完全相同的错误。
  • 请运行上面的简单测试...
  • 它返回in_array Error。但没有别的。所以该文件肯定存在。又是奇怪的 php。加一个努力。
  • 你能把var_dump($dir)加到pastebin吗让我看看……你的情况很有趣
  • 请运行var_dump(in_array("mysql.processing.php", $dir));var_dump(in_array("IMEXporter.class.php", $dir)); 告诉我你得到了什么???
【解决方案2】:

嗯,在错误消息中,文件名的大小写与您发布的要求行中的不同...您确定这不是错字吗?

【讨论】:

  • 修正了错字,但问题仍然存在。
  • 将错误信息中的文件路径复制到剪贴板。然后在粘贴的文件路径上运行 ls -l。
  • 是的,我实际上已经尝试过了。在 shell 上打印出文件元信息。仍然不会在 php 脚本上找到它。两者都在同一个目录中。
  • 你是从命令行获取这个正在运行的 PHP,还是通过网络服务器获取?
  • 原来的错误?来自服务器上的 php 脚本。
【解决方案3】:

好的,问题就在这里。还记得我提到我的mysql.processing.php 文件可能会损坏吗?那是问题的一半。显然 php require 返回错误 failed to open stream: No such file or directory.. etc 如果它:

1) 找不到文件。

2) 找到文件,但无法打开。

错误消息具有误导性,使您认为这是路径问题。有时是这样,但像我这样的情况,它只是返回文件的语法问题。现在是下半场。我对mysql.processing.php 上的所有语法错误进行了更正,但它仍然无法正常工作。所以我只是重新启动了我的服务器,现在它可以工作了。

问题的后半部分是php有缓存php文件的讨厌倾向。通常,您可以开始编辑 php 脚本、修复解决方案等,但没有任何进展,因为 php 不会立即使您的更改生效。这可能会导致您从一个解决方案到下一个解决方案跌跌撞撞,不断更改您的脚本,感觉就像您在迷宫中一样。

有一些方法可以阻止 php 缓存特定文件。但问题在于 php 本身,它的错误报告具有误导性,另外两个问题在于它的问题缓存和排除解决方案。

【讨论】:

  • 你用的是什么版本的PHP???
【解决方案4】:

也许问题是您的 php 不在同一个文件夹中,您不能包含来自 URL 或其他文件夹的 .php。如果 php 位于同一路径或路径上的子文件夹中,则可以包含它。对不起我的英语,但我想你会明白我在说什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2017-12-16
    • 1970-01-01
    • 2012-04-30
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多