在 PHP 版本更新之前,我曾经能够在不指定文档根目录的情况下包含以下文件:
<?php include '/absolute/path/to/files/file1.php'; ?>
但是我现在必须包含与以下相同的文件:
<?php include $_SERVER['DOCUMENT_ROOT'].'/absolute/path/to/files/file1.php'; ?>
什么 php.ini 设置可以覆盖以前的行为?
你需要 php.ini 指令include_path
请参阅:http ://us.php.net/manual/en/ini.core.php#ini.include-path
包括绝对路径应该直接通过 PHP 5.2.9 以相同的方式工作(没有尝试过 5.3,但这不应该改变)。由于您指定的是绝对路径,因此 include_path 指令没有任何意义。
你能提供更多信息吗?什么 PHP 版本、平台和您从 include 返回的错误将是一个很好的开始。
Linux:RHEL 5 PHP:版本 PHP 5.2.9 我收到的错误消息是:PHP 警告:需要(/conf/common.php):无法打开流:/var/www/vhosts/DOMAIN/ 中没有这样的文件或目录httpdocs/tell-a-friend-fns.php 在第 63 行 PHP 致命错误:require(): Failed opening required '/conf/common.php' (include_path='.:/usr/share/pear:/usr/lib /php:/tmp') 在第 63 行的 /var/www/vhosts/DOMAIN/httpdocs/tell-a-friend-fns.php
好的,看起来您的应用程序位于 /var/www/vhosts/DOMAIN 中,并且您正在寻找 /conf/common.php,对吗?我不知道您的文件实际上是在 /conf/ 中还是在 /var/www/vhosts/DOMAIN/conf/ 中(我假设是后者,并提供了信息)。如果它在 /conf/ 中,请确保您的 Web 服务器用户可以读取该目录。如果没有,请将您的包含更改为 /var/www/vhosts/DOMAIN/httpdocs/conf/common.php。
更好的是,您可能可以这样做include '../conf/common.php
,具体取决于 common.php 与请求页面的主脚本相关的位置。
请记住,任何带有前导“/”的路径都是相对于文件系统的绝对路径,而不是 Web 服务器文档根目录。任何不带“/”的路径都被假定为相对路径,相对于您的执行脚本(不是当前文件)。我的猜测是在您的路径前添加 $_SERVER['DOCUMENT_ROOT'] 会将绝对路径更改为相对路径。我不知道为什么绝对路径会充当升级前的相对路径,除非您在升级期间被删除的监禁环境(常见于虚拟主机)中操作。
我总是使用类似的东西:
require( dirname( __FILE__ ) . '/../../subdir/somefile.php' );
它为您提供当前文件的相对路径,但解析为绝对路径(通过在当前文件上使用 dirname)。