PHP:包含内含的文件

我必须彻底解决这个问题。

我目前正在开发一个4年的项目,用PHP编写,并在Apache服务器上运行。
我们是一个约40人的团队,我们每个人都使用首选的操作系统,所以我们有Windows,Mac和Linuxes运行这个代码。 我是那些喜欢Ubuntu的人。

无论如何,每次我克隆这个项目,我必须修改代码的一部分,所以它可以在我的机器上工作,因为以下旧的include / require问题:
所以假设我有以下文件和目录:

 root/ | index.php | framework/ | index.php | framework.php | config.php 

总结:

  • root/index.php确实require('framework/index.php')
  • root/framework/index.php确实require('../config.php')require('framework.php')
  • 很显然,上面的代码在第一个require给了我一个错误,因为它在root文件夹所在的目录中查找config.php

是的,我知道我们应该使用像define('ROOT_DIR', path)一些常量或使用dirname(__DIR__)里面的要求。 我的问题是, 这个代码在这里的某些机器 (包括运行Ubuntu LTS的生产服务器) 上完美运行,所以相信这个错误是由于Apache或PHP的configuration 。 我必须在本地运行这个代码来进行开发,但是includerequire太多了,他们不会让我改变所有的原始项目的require所以它包含dirname(__DIR__)或者其他的任何东西它,因为它被认为是不必要的。

所以,请不要build议我对预先require呼叫做任何事情。 我需要知道如何更改PHP(或者另一个服务的)configuration,所以当它需要文件时,它会检查它们是否与需要这些文件的脚本有关,而不是关于启动这个require链的第一个脚本。

也许这是不相关的,但是每次我在我的Ubuntu LTS 14.04上重新安装Apache2和PHP5时,它的默认configuration是这样的,这个代码不会运行。 我的一个同事使用Windows(以前运行8.1,现在运行10),从来没有这个问题,就像在Windows中显然是XAMP或WAMP,或者他使用的默认configuration都允许这个代码工作一样。

请帮忙。 提前致谢。

也许有人在生产机器上加入include_path。 你可以在你的开发机器上做同样的事情:

设置包括路径

或者在你的php.ini中设置include_path: include_path

我发现另一个有趣的事情要求,声明嵌套require-statements: 在php文档注释,从顶部第二 :

在PHP中使用符号链接时,指定一个点号“./page.php”路径来确保PHP在正确的目录中查找嵌套的需求:

例如,当所需的实际page1.php包含其他require语句(比如page2.php)时,PHP将搜索符号链接指向的路径,而不是符号链接所在的路径。 为了让PHP在符号链接的路径中找到另一个page2.php,require('./ page2.php'); 声明将解决这个难题。

也许其中一个可能会有所帮助。

第一个要求失败的唯一原因是要么你的包含路径没有“。” 或者文件本身不可读(例如由于权限)。