[英]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 配置造成的。 我必须在本地运行此代码进行开发,但是include
和require
太多了,他们不会让我更改所有原始项目的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.