包括文件而无需指定$ _SERVER ['DOCUMENT_ROOT']

时间:2009-04-24 16:11:02

标签: settings php

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

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

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

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

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

3 个答案:

答案 0 :(得分:5)

您需要php.ini指令include_path

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

答案 1 :(得分:3)

包含绝对路径应该以相同的方式直接通过PHP 5.2.9(没有尝试过5.3,但这不应该改变)。由于您指定了绝对路径,因此include_path指令没有方位。

您能提供更多信息吗? PHP版本,平台以及您从中获得的错误将是一个很好的开始。

  

Linux:RHEL 5 PHP:版本PHP 5.2.9错误消息我得到:PHP警告:require(/conf/common.php):无法打开流:/ var / www / vhosts中没有这样的文件或目录第63行/DOMAIN/httpdocs/tell-a-friend-fns.php PHP致命错误:require():无法打开所需的'/conf/common.php'(include_path ='。:/ usr / share / pear:/第63行/var/www/vhosts/DOMAIN/httpdocs/tell-a-friend-fns.php中的usr / lib / php:/ tmp')

好的,看起来您的应用程序存在于/ var / www / vhosts / DOMAIN中,而您正在寻找/conf/common.php,对吧?我不知道你的文件是否实际上在/ conf /或者它是在/ var / www / vhosts / DOMAIN / conf /(我假设后者,并给出了相关信息)。如果它位于/ conf /中,请确保您的Web服务器用户可以读取该目录。如果没有,请将您的include更改为/var/www/vhosts/DOMAIN/httpdocs/conf/common.php。

更好的是,您可以执行include '../conf/common.php,具体取决于common.php与所请求页面的主脚本相关的位置。

请记住,使用前导“/”给出的任何路径都是与文件系统相关的绝对路径,而不是Web服务器文档根目录。假设没有“/”的任何路径都是相对于执行脚本(不是当前文件)的相对路径。我的猜测是将$ _SERVER ['DOCUMENT_ROOT']添加到路径中是将绝对路径更改为相对路径。我不知道为什么绝对路径会作为升级前的相对路径,除非您在升级过程中被删除的被监禁环境(与虚拟主机相同)中运行。

答案 2 :(得分:3)

我总是使用类似的东西:

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

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