Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-要求或包括不';你不能在循环中工作吗?_Php_Loops_Require - Fatal编程技术网

PHP-要求或包括不';你不能在循环中工作吗?

PHP-要求或包括不';你不能在循环中工作吗?,php,loops,require,Php,Loops,Require,我试图循环遍历路径列表,并要求使用foreach循环的PHP脚本。但是我得到了这个错误: Warning: require_once(/opt/lampp/htdocs/framework): failed to open stream: No such file or directory in /opt/lampp/htdocs/framework/system/classes/config.cls.php on line 47 Fatal error: require_once(): Fa

我试图循环遍历路径列表,并要求使用foreach循环的PHP脚本。但是我得到了这个错误:

Warning: require_once(/opt/lampp/htdocs/framework): failed to open stream: No such file or directory in /opt/lampp/htdocs/framework/system/classes/config.cls.php on line 47

Fatal error: require_once(): Failed opening required '' (include_path='.:/opt/lampp/lib/php') in /opt/lampp/htdocs/framework/system/classes/config.cls.php on line 47
当我使用相同的路径在循环外部执行require函数时,它总是可以正常工作。(我使用的是非相对完整路径)

我已经用100种方法对此进行了100次检查和测试,每当我在循环中需要一个文件时,我都会得到一个错误

我已经在Windows和Linux上进行了测试,在Windows上我得到了“拒绝访问…”之类的结果

我在XAMPP1.8.1 XAMPP1.8.2、LAMPP1.8.1 LAMPP1.8.2、AMPPS2.0等上进行了测试。每次都会出现相同的错误

我已经检查了文件路径和权限100次,我确定路径不是原因

这是PHP限制还是我做错了什么

代码示例:

$paths = array('path1', 'path2', path3);

foreach ($paths => $p) {
    if (file_exists($p) && require_once($p)) {
        break;
    }
}
上面的示例代码也位于静态类中的方法内部

编辑: 我无法添加原始代码,因为它使用了来自多个文件的多个定义,并且我遇到的错误也会发生在我试图在循环中要求文件的任何地方。然而,这里有一些代码说明了我正在尝试做的事情:

abstract class _config
{        
    public static function load($file_name)
    {
        $locations = array(
            '/opt/lampp/htdocs/framework/application/configs/',
            '/opt/lampp/htdocs/framework/system/configs/'
        );

        foreach ($location as $path) {
            $file = $path.$file_name.'.php';

            echo $file.'<br/>';

            if (file_exists($file) && require_once($file)) {
                break;
            }
        }
    }
}
输出为:

/opt/lampp/htdocs/framework/application/configs/test.php
/opt/lampp/htdocs/framework/system/configs/test.php

And the error message....
当我尝试时:

require_once('/opt/lampp/htdocs/framework/application/configs/test.php');
// or
require_once('/opt/lampp/htdocs/framework/system/configs/test.php');
一切正常

  • 正如您所看到的,我甚至不试图要求一个完整的目录 尽管消息上这么说
  • 我不需要类自动加载器,因为我甚至不包括类 虽然我在自动加载器中遇到了相同的错误消息,但当我通过一些 搜索类文件时的路径
  • 函数(此处未显示)中存在另一个 可以将路径指定为参数,以便将所有这些路径添加到 考虑到我所做的修改,PHP包含路径会破坏应用程序 类、配置文件、模型、控制器、, 观点等
  • 这并不完全是我在我的应用程序中使用的代码,但是它说明了我正在尝试做什么
  • 原始代码中的回显路径总是输出到我需要的文件的正确路径,因此我确信路径是正确的
  • 路径在运行时被提取,然后被清除,斜线也被修正以匹配当前平台

您要做的是在多个路径中搜索特定文件。您实现它的方式是有问题的。使用
php
include_path
为特定文件提供额外的搜索路径

$paths = array('path1', 'path2', 'path3');
$paths[] = get_include_path();
set_include_path(implode(PATH_SEPERATOR, $paths));

然后您可以执行
require_once($file)
,它将搜索
$path

中定义的所有路径,尝试PHP的
scandir
功能检查文件是否存在。这样,您就获得了所需的信息,而不必在循环中运行require/require\u一次/include

以下是有关
scandir
功能的一些信息:


希望这会有帮助

require
实际上不是一个函数,而是一个语句,所以我怀疑它是否会像那样工作。你想检查那里有什么?这是你在测试时实际使用的foreach循环吗?(这是错误的)。您确定路径和权限不是问题所在,但错误消息表明不是问题所在。实际上,它看起来像是试图从一个文件
/opt/lamp/htdocs/framework
中包含一个完整的目录:
/opt/lamp/htdocs/framewrok/system/classes/config.cls.php
。显然,路径是个问题,我们需要为您提供一个更好的失败示例,您的代码示例有一个破损的foreach,第三条“路径”甚至没有被引用。在使用您自己的自动加载器之前,请先看看这个,
$paths = array('path1', 'path2', 'path3');
$paths[] = get_include_path();
set_include_path(implode(PATH_SEPERATOR, $paths));