2

在 PHP 版本更新之前,我曾经能够在不指定文档根目录的情况下包含以下文件:

<?php include '/absolute/path/to/files/file1.php'; ?>

但是我现在必须包含与以下相同的文件:

<?php include $_SERVER['DOCUMENT_ROOT'].'/absolute/path/to/files/file1.php'; ?>

什么 php.ini 设置可以覆盖以前的行为?

4

3 回答 3

5

你需要 php.ini 指令include_path

请参阅:http ://us.php.net/manual/en/ini.core.php#ini.include-path

于 2009-04-24T16:13:38.553 回答
3

包括绝对路径应该直接通过 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'] 会将绝对路径更改为相对路径。我不知道为什么绝对路径会充当升级前的相对路径,除非您在升级期间被删除的监禁环境(常见于虚拟主机)中操作。

于 2009-04-24T16:31:49.443 回答
3

我总是使用类似的东西:

require( dirname( __FILE__ ) . '/../../subdir/somefile.php' );

它为您提供当前文件的相对路径,但解析为绝对路径(通过在当前文件上使用 dirname)。

于 2009-04-24T18:22:48.943 回答