【问题标题】:PHP - Include fails on simple php filePHP - 在简单的 php 文件中包含失败
【发布时间】:2015-09-01 08:45:24
【问题描述】:

我通过这样做在我的其他 php 文件之一中包含一个文件:

include(dirname(__FILE__) . '/send_notification.php');

我包含的文件的代码如下所示:

<?php
echo "Here!";
if(false === function_exists('sendNotification')) {
    function sendNotification() {
        echo "I HATE THIS";
    }
}
echo "There!"
?>

文件包含如下:

include_once(dirname(__FILE__) . '/send_notification.php');
echo "And Here!";

但它唯一的回应是:

Here!There!

发生了什么事?

【问题讨论】:

  • 是否出现错误或警告?
  • 也许你没有看到文本。通过包含您在第一行输出它。您可以在脚本的某个点调用该函数,并且数据会在您看不到它的地方回显(也许在 div 下)。检查源中的文本。
  • 要查看错误,请将其添加到两个文件的最顶部并再次运行:ini_set('display_errors', true); error_reporting(E_ALL);
  • 我不认为这是我的好习惯,你的函数应该返回字符串,然后你应该做一个 echo sendNotification();在包含文件中直接回显文本的唯一原因是显示标题等,但它不在函数中
  • 也许您的服务器根本无法从外部访问?如果你 ping 域或 ip 会发生什么?

标签: php


【解决方案1】:

您应该始终包装您的函数以检查它是否存在,以防止在包含时出现问题。并从包含的文件中删除结束 PHP 标记 ?&gt;,以防止出现行尾 (EOL) lexing 问题。

send_notification.php

<?php
if (false === function_exists('sendNotification')) {
    function sendNotification() {
        echo "I HATE THIS";
    }
}

index.php

<?php
require_once __DIR__ . '/send_notification.php';
sendNotification();
//...

您还应该只在函数/配置页面上使用include_oncerequire_once 表示法,以防止在使用时覆盖/重复变量值/函数。

【讨论】:

  • 我已经添加了 include_once。检查更新的问题。我还没有工作。
  • 你更新的问题没有显示你打电话给sendNotification()
  • 是的,因为这似乎不是问题所在。它甚至没有到达第三个 echo 语句。在此之前一定有问题。
  • 从 send_notification.php 中删除结尾 ?&gt;。我猜是EOL 问题。
  • EOL 是行尾。问题是您在脚本末尾有一个额外的行尾字符导致解析问题。例如,?&gt;\r\n 删除结尾 ?&gt; 会阻止 PHP 将 \r\n 解析为内容并假定它是 PHP 代码。
【解决方案2】:

试试这个

<?php
    function sendNotification() {
        return "I HATE THIS";
    }
?>

echo sendNotification();

【讨论】:

  • 那我怎么从文件外调用函数呢?
  • 退货与否无所谓
  • 我试过这个。它甚至没有接听电话。当我在那里有函数时,包含似乎只是失败了。
猜你喜欢
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多