【问题标题】:How to change PHPs behavior to echo an HTML comment on every include() and require()如何更改 PHP 行为以在每个 include() 和 require() 上回显 HTML 注释
【发布时间】:2014-07-31 15:01:05
【问题描述】:

在我目前的公司中,我们不使用 MVC,所以它非常混乱,我经常在哪里找到负责我在前端看到的特定内容的 PHP 文件。我正在考虑如何解决这种混乱,当我在浏览器中看到页面时,我想立即有效地知道在哪里可以找到这些文件。 (我们通过FTP直接在生产服务器上编辑代码,没有任何测试或开发环境,所以我们基本上无法搜索代码)

我的想法是实现这一点:

每个 include()、include_once()、require()、require_once() 都会回显正在被包含的 PHP 文件的 HTML 注释,并且在文件结束后,它会执行另一个“关闭”HTML 注释。

示例:

另一个文件.php

<?php echo "<p>Hey everyone!</p>"; ?>

索引.php:

<?php 
echo "<p>Hello World</p>";
include('another_file.php');
?>

浏览器呈现的内容:

<p>Hello World</p>
<!-- 'another_file.php' -->
<p>Hey everyone!</p>
<!-- END 'another_file.php' -->

有什么方法可以实现吗?也许是一些 PHP 扩展或设置?这将是实时和节省神经的。谢谢。

【问题讨论】:

  • 恐怕您必须创建自己的函数才能做到这一点。

标签: php


【解决方案1】:

你不想这样。

我是认真的,假设你有require("setup.php");setup.php 尝试做session_start()...呃-哦,输出已经发送(评论)所以你不能设置标题!

正如 Luc 所说,您可以编写自己的函数来执行此操作。可以很简单:

function marked_require($file) {
    echo "<!-- '".$file."' -->\n";
    require($file);
    echo "<!-- END '".$file."' -->\n";
}

现在,如果您想标记require,请改用marked_require

【讨论】:

    【解决方案2】:

    真的不可能。您不能用新的实现替换/覆盖内部 PHP 函数。您可以创建自己的包装器,例如

    function my_include($file) {
        echo "opening $file";
        include($file);
        echo "$file has been included";
    }
    

    但是您必须重新编写所有脚本才能调用这些新包装器。

    当然,这会引发一大堆其他问题,例如任何定义全局变量的配置文件现在都将在包装函数的范围内定义这些变量。例如一旦你的my_include() 完成,这些配置变量将被垃圾收集并消失。

    【讨论】:

    • 值得注意的是,此答​​案中缺少&lt;!----&gt; 标签。
    • 有可能覆盖 PHP 内部函数吗? stackoverflow.com/questions/2326835/…
    • @AlexanderSkiller:include/require 是语言结构。它们不是函数。
    【解决方案3】:

    您可以考虑使用以下内容:

    function my_include($source)
    {
        ob_start(); //Avoids printing to screen to allow header editing
        echo "<!-- '$source' -->\n";
        include($source);
        echo "<!-- END '$source' -->\n";
        if(strlen(ob_get_content())>0) //If there was some output, outputs everything
            ob_get_clean();
    }
    

    为确保它正常工作,您应该在文件末尾调用ob_get_clean()

    【讨论】:

    • 谢谢,你提供的代码很有趣,但遗憾的是,他们说你不能覆盖 require、include、require_once、include_once 函数:(
    • @AlexanderSkiller 你说得对,看来includerequire 不是常用函数,而是“控制结构”,根据stackoverflow.com/questions/12743159/… ...我修正了我的答案
    猜你喜欢
    • 2011-04-24
    • 1970-01-01
    • 2016-09-18
    • 2018-02-26
    • 1970-01-01
    • 2012-07-08
    • 2022-01-04
    • 1970-01-01
    • 2013-07-25
    相关资源
    最近更新 更多