Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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
Centos中的PHP Codeigniter:include_一旦自定义系统库失败_Php_Codeigniter_Include_Centos - Fatal编程技术网

Centos中的PHP Codeigniter:include_一旦自定义系统库失败

Centos中的PHP Codeigniter:include_一旦自定义系统库失败,php,codeigniter,include,centos,Php,Codeigniter,Include,Centos,我们正在围绕一个Codeigniter安装(v2.0.3)构建多个应用程序。我们开始在Windows环境中进行开发(使用XAMPP),并将alpha安装部署到一台虚拟CentOS 5.6机器上(该机器运行良好)。随着项目的进展,我开始需要访问在Windows上(实际上)不可用的视频工具(ffmpeg/mencoder)。我一直在使用CentOS 5.7(在VirtualBox 3.2.8中运行)的虚拟安装来开发其他应用程序,因此我在该虚拟CentOS上安装了该软件。我们在“Codeigniter

我们正在围绕一个Codeigniter安装(v2.0.3)构建多个应用程序。我们开始在Windows环境中进行开发(使用XAMPP),并将alpha安装部署到一台虚拟CentOS 5.6机器上(该机器运行良好)。随着项目的进展,我开始需要访问在Windows上(实际上)不可用的视频工具(ffmpeg/mencoder)。我一直在使用CentOS 5.7(在VirtualBox 3.2.8中运行)的虚拟安装来开发其他应用程序,因此我在该虚拟CentOS上安装了该软件。我们在“Codeigniter/system/libraries”文件夹中添加了几个库,以便所有不同的应用程序都可以使用它们。在我的本地虚拟CentOS上,我们的核心库不会加载,我们会收到一条错误消息,说这些类不存在。路径存在,我们可以读取其内容,并且include_once不会引发错误。。。它们就是不起作用

我们跟踪了核心库的包含情况,发现我们的库是通过“include_once”加载到第886行的“system/core/Loader.php”中的。经过多次调整后,我们确定如果我们将“include_once”更改为“include”,则该文件将被包括在内,整个软件套件将完全按照预期工作(与其他系统完全相同)

什么。。。这个真见鬼?我们是否需要在PHP的配置中启用“include_once”?这条路径显然是正确的,因为“包含”是有效的。我只是不想去改变CI的系统核心,如果它不是完全必要的话


任何意见(甚至合理的猜测)都将受到欢迎。干杯。

首先检查是否安装了php apc。 如果有,请编辑apc.ini(在CentOS上应为/etc/php.d/apc.ini),并禁用include_once优化:

apc.include_once_override=0 
使用CodeIgniter可能会产生非常奇怪的结果,例如找不到库或帮助程序

重新启动web服务器:

service httpd restart
现在应该没事了。:)

提问者的回答:

我们至少已经确定这似乎与我们的PHP版本有关。我们的旧系统是在PHP5.3.3上运行的。较新的一个(不起作用)在PHP5.3.4上。我们将版本拉回到5.3.3,突然CodeIgniter中的“include_once”神奇地开始工作。苹果怎么样?我们现在称之为PHP错误,我们将尝试复制它,以造福全人类(或至少是任何发现此问题的人)。

临时修复:

使用应用程序文件夹名称添加FCPATH

        define('APPPATH', FCPATH.$application_folder.'/');
将其添加到应用程序路径:

// The path to the "application" folder
    if (is_dir($application_folder))
    {
        define('APPPATH', FCPATH.$application_folder.'/');
    }
    else
    {
        if ( ! is_dir(BASEPATH.$application_folder.'/'))
        {
            exit("Your application folder path does not appear to be set correctly. Please open the following file and correct this: ".SELF);
        }

        define('APPPATH', BASEPATH.$application_folder.'/');
    }
希望这有帮助
谢谢

一般来说,库只能加载一次,因此需要使用include\u一次。这是为了防止类重新声明等意外行为。在通过CI的方法加载库类之前,是否在库类上调用自定义的include_once()?我们正在尝试通过CI加载所有内容,因此我本人从不调用“include”或“include_once”。即使我是,该类至少也会存在(并且可能抛出一个“重新声明”错误,正如@johncartwright所建议的)。在我的例子中,CI生成的错误消息是“不存在类”。出现错误消息“不存在类”是因为“include_once”没有包含任何内容。这意味着CI或您自己已经包含了库。这真的很奇怪。我认为错误是另一种情况。我以前对CI的包含有一些问题,但它们总是与主机系统之间的文件名大小写差异有关。除此之外,我很想把这称为bug。先生或女士,您给了我迄今为止最有用的建议,为此我感谢您。但不幸的是,我没有安装APC:(谢谢你的回答,不管怎样,希望它能帮助别人。