【问题标题】:include() fails silently when called from an included file从包含的文件中调用 include() 时会静默失败
【发布时间】:2011-01-26 04:11:08
【问题描述】:

我在远程服务器上包含文件时遇到问题(但在我的本地 Windows PHP+Apache 配置上它工作正常...)。

当我尝试从包含的文件中包含文件时出现问题:

index.php 的内容:

<?php

include("Dir1/File1.php");

?>

Dir1/File1.php 的内容:

<?php

include("File2.php");
include("File3.php");

echo("<p>File1 include done.</p>");

?>

Dir1/File2.php 的内容

<?php
echo("<p>File2 include done.</p>");
?>

Dir1/File3.php 的内容

<?php
echo("<p>File3 include done.</p>");
?>

File2.php 和 File3.php 不会被评估,但是当我将例如 File2.php 更改为 File99.php(一些不存在的文件)时,我会收到文件不存在的标准警告。

但是当我将 Dir1/File1.php 的内容更改为包含这样的文件时:

<?php

include("Dir1/File2.php");
include("Dir1/File3.php");

echo("<p>File1 include done.</p>");

?>

然后对文件进行评估...

【问题讨论】:

  • 您可以访问远程服务器上的 php.ini 文件吗? include_path 设置为什么?

标签: php include include-path


【解决方案1】:

尝试使用完整路径包含:

include(dirname(__FILE__) . "/Dir1/File3.php");

【讨论】:

  • 当我使用完整路径时它工作正常,但是我有很多文件要更改......这工作太多了。另一方面,为什么它在我的本地配置和我迄今为止使用的所有其他远程服务器上都可以正常工作。问题显然出在那个特定的远程服务器上。
【解决方案2】:

这对我来说每次都有效:

<?php require_once($_SERVER['DOCUMENT_ROOT'] . '/path/to/File3.php'); ?>

【讨论】:

    【解决方案3】:

    听起来你没有“。” (当前文件夹)在您的包含路径中。您应该修改 php.ini 文件以添加它。您可以通过

    找出您的实时和测试服务器上的值
    <?php
    phpinfo();
    ?>
    

    【讨论】:

    • 远程 include_path 的值是:.:/usr/lib/php:/usr/local/lib/php 本地版本是:.;C:\php5\pear 我不认为问题是路径,因为 PHP 知道包含文件在哪里(因为如果我将包含文件更改为某个不存在的文件,它会引发警告)。我不知道 PHP 是否可以找到它不评估它的文件...
    • @Stazh,也许您在与 File1.php 相同的目录中有名为 File2.php 和 File3.php 的空白文件。从 Linux 命令行“定位 File2.php”,看看服务器上是否有这个文件的多个副本。
    猜你喜欢
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 2013-10-04
    • 2014-06-05
    • 2016-11-29
    • 2013-04-26
    • 2016-04-22
    相关资源
    最近更新 更多