PHP include_once不适用于父目录中的文件

时间:2010-01-29 18:10:41

标签: php apache include include-path

我刚刚开始在一个传递给我的网站上工作,但该网站无效。我发现在/admin/index.php中尝试实例化/classes/admin.php的实例时会出现问题。但是,如果我将/admin/index.php复制到/admin-index.php,它可以很好地实例化该类。另外,如果我将/classes/admin.php移动到/admin/classes/admin.php中,我也可以很好地实例化它。至少有一个我注意到的其他课程。

我也注意到这在我的本地开发机器上不是问题。这只是服务器上的一个问题。

您可以在http://charlesekublyfoundation.org/admin/phpinfo.php找到有关服务器的信息。我的开发机器是运行Apache 2.2和PHP 5.2.11(Apache / 2.2.14(Win32)PHP / 5.2.11)的WinXP机器。

有没有人见过这样的东西?这看起来很奇怪。我是PHP开发的新手(主要是.NET开发人员),所以我不确定是什么原因引起的。我不确定它在PHP或Apache或其他方面是否有所不同。

修改 我应该注意到我的服务器运行在某个品牌的Linux上,而dev机器是Windows。在查看include_paths之后,我有一种与此有关的感觉。

2 个答案:

答案 0 :(得分:2)

我可以想到的一些事情可能会解决这个问题。

我认为最有可能的是开发人员依赖于PHP的include_path设置。此设置适用于require()include()命令,以告知在未提供硬路径的情况下在何处查找所请求的文件。如果代码使用相对路径,并且include_path设置不同,则可能是一个问题。通常,include_path将包含“当前目录”(即.)作为路径的一部分,并且包含使用它作为基础完成。

另一种可能性是应用程序正在使用autoloading,并且某种程度上这不能正确地转换为生产。我会快速搜索一下该应用程序,看看是否指定了__autoload()函数,或者使用了spl_autoload_register()。如果是,那么自动加载功能是否只能在开发机器上进行目录假设?

答案 1 :(得分:0)

您应该检查包含路径以查看它无法正常工作的原因。包含路径信息将位于PHP配置文件(通常为php.ini)以及应用程序本身中。在应用程序中,您可以尝试使用函数get_include_path并打印出它返回的内容。