我必须彻底解决这个问题。
我目前正在开发一个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 。 我必须在本地运行这个代码来进行开发,但是include
和require
太多了,他们不会让我改变所有的原始项目的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'); 声明将解决这个难题。
也许其中一个可能会有所帮助。
第一个要求失败的唯一原因是要么你的包含路径没有“。” 或者文件本身不可读(例如由于权限)。