我必须一劳永逸地解决这个问题。
我目前正在开发一个4年的项目,用PHP编写并在Apache服务器上运行 我们是一个由大约40人组成的团队,我们每个人都使用首选的操作系统,因此我们有运行此代码的Windows,Mac和Linux。我喜欢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
上给出了错误,因为它在config.php
文件夹所在的目录中查找root
。是的,我知道我们应该使用define('ROOT_DIR', path)
之类的常量或者在需求中使用dirname(__DIR__)
。我的问题是这个代码在这里的一些机器上运行得很完美(包括生产服务器,它也运行Ubuntu LTS),因此我认为这个错误是由Apache或PHP造成的构造即可。
我必须在本地运行此代码以进行开发,但是include
和require
太多了,他们不会让我更改所有原始项目的require
,因此它包含{ {1}}或其中的任何内容,因为它被认为是不必要的。
所以,请不要建议我对预先存在的dirname(__DIR__)
电话做任何事情。我需要知道如何更改PHP(或者可能是其他服务)的配置,所以当它需要文件时,它会根据需要文件的脚本检查它们,而不是与启动此文件的第一个脚本相关{{ 1}}链。
也许这不相关,但每次我在我的Ubuntu LTS 14.04上重新安装Apache2和PHP5时,其默认配置都是这样的代码无法运行。我的一个同事,使用Windows(曾经运行8.1,现在他运行10),从来没有遇到过这个问题,因为在Windows中,显然XAMP或WAMP或者他使用的任何东西都有默认配置,允许这些代码工作。
请帮忙。提前谢谢。
答案 0 :(得分:2)
也许有人在生产机器上使用include_path进行了调整。您可以在开发机器上执行相同的操作:
或在php.ini中设置include_path: include_path
我发现了有嵌套require语句的require语句的另一个有趣的事情: comment in php-documentation, second from the top:
在PHP中使用符号链接时,请指定一个dotlash'./page.php'路径,以确保PHP使用嵌套的需求查找正确的目录:
E.g。当所需的实际page1.php包含其他require语句时,比如page2.php,PHP将搜索符号链接指向的路径,而不是符号链接所在的路径。让PHP在符号链接的路径中找到另一个page2.php,一个require('./ page2.php');声明将解决难题。
也许其中一个可能会有所帮助。
答案 1 :(得分:0)
第一个要求失败的唯一原因是您的包含路径没有'。'或者文件本身不可读(例如由于权限)。