【问题标题】:including files without having to specify $_SERVER['DOCUMENT_ROOT']包括文件而不必指定 $_SERVER['DOCUMENT_ROOT']
【发布时间】:2010-10-21 15:42:52
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 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 中

标签: settings php


【解决方案1】:

你需要 php.ini 指令include_path

见:http://us.php.net/manual/en/ini.core.php#ini.include-path

【讨论】:

  • 这是我的设置:include_path =.:/usr/share/pear:/usr/lib/php:/tmp
【解决方案2】:

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

【讨论】:

  • 如您所料,我认为当我的托管服务提供商升级 plesk /var/www/vhosts/DOMAIN/httpdocs 部分从 include_path 中丢失了。将其附加到 include_path 后,一切都恢复正常。谢谢!
【解决方案3】:

我总是使用类似的东西:

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

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

【讨论】:

    猜你喜欢
    • 2013-08-12
    • 1970-01-01
    • 2011-12-13
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多