繁体   English   中英

PHP:包含在包含文件中

[英]PHP: include inside included file

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

我目前正在从事一个 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上给了我一个错误,因为它在root文件夹所在的目录中寻找config.php

是的,我确实知道我们应该define('ROOT_DIR', path)使用一些常量,例如define('ROOT_DIR', path)或 use dirname(__DIR__) 我的问题是,这段代码可以在附近的一些机器上完美运行(包括生产服务器,它也运行 Ubuntu LTS),所以相信这个错误是由于 Apache 或 PHP 配置造成的 我必须在本地运行此代码进行开发,但是includerequire太多了,他们不会让我更改所有原始项目的require因此它包含dirname(__DIR__)或任何 bu****it它,因为它被认为是不必要的。

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

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

请帮忙。 提前致谢。

也许有人对生产机器上的 include_path 进行了调整。 你可以在你的开发机器上做同样的事情:

设置包含路径

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

我在嵌套了 require-statements 的 require-statements 上发现了另一个有趣的事情: php-documentation 中的注释,从顶部第二个

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM