PHP:包含内部包含的文件

时间:2015-09-18 20:53:54

标签: php ubuntu configuration apache2 require

我必须一劳永逸地解决这个问题。

我目前正在开发一个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造成的构造即可。 我必须在本地运行此代码以进行开发,但是includerequire太多了,他们不会让我更改所有原始项目的require,因此它包含{ {1}}或其中的任何内容,因为它被认为是不必要的。

所以,请不要建议我对预先存在的dirname(__DIR__)电话做任何事情。我需要知道如何更改PHP(或者可能是其他服务)的配置,所以当它需要文件时,它会根据需要文件的脚本检查它们,而不是与启动此文件的第一个脚本相关{{ 1}}链。

也许这不相关,但每次我在我的Ubuntu LTS 14.04上重新安装Apache2和PHP5时,其默认配置都是这样的代码无法运行。我的一个同事,使用Windows(曾经运行8.1,现在他运行10),从来没有遇到过这个问题,因为在Windows中,显然XAMP或WAMP或者他使用的任何东西都有默认配置,允许这些代码工作。

请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:2)

也许有人在生产机器上使用include_path进行了调整。您可以在开发机器上执行相同的操作:

set-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)

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