如何更改PHP的行为以回显每个include()和require()上的HTML注释

时间:2014-07-31 15:01:06

标签: php

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

我的想法是实现这一目标:

每个include(),include_once(),require(),require_once()都将回显正在包含的PHP文件的HTML注释,文件结束后,它将执行另一个"关闭&#34 ; HTML评论。

实施例

another_file.php

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

的index.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扩展,或设置?这将是实时和神经保护。谢谢。

3 个答案:

答案 0 :(得分:5)

你不希望这样。

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

正如吕克所说,你可以编写自己的功能来做到这一点。它可以很简单:

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

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

答案 1 :(得分:1)

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

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

但是你必须重新编写所有脚本来调用这些新的包装器。

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

答案 2 :(得分:0)

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

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()