V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kmvan
V2EX  ›  程序员

PHP 滥用 ob_get_contents() 来输出内容,会导致什么结果?

  •  
  •   kmvan · 2014-08-28 14:20:55 +08:00 · 9166 次点击
    这是一个创建于 3528 天前的主题,其中的信息可能已经有所发展或是发生改变。
    遇到个同事,在输出内容的函数他都会使用获取 ob_get_contents 后再 echo 内容。即使:
    ```
    echo 'abc';
    // 他也要
    ?>
    abc
    <?php
    $str = ob_get_contents();
    ob_end_clean();
    echo $str;
    ```
    这样,十分不解。
    5 条回复    2018-05-03 18:01:02 +08:00
    barbery
        1
    barbery  
       2014-08-28 14:32:13 +08:00   ❤️ 1
    kmvan
        2
    kmvan  
    OP
       2014-08-28 15:38:25 +08:00
    @barbery 原来如此,难怪echo内容越多,处理的时间就越长。这样说来,直接在php页面里面写 <div....> 比 echo '<div...>'; 要好哦
    anjianshi
        3
    anjianshi  
       2014-08-28 16:01:18 +08:00
    @kmvan 只针对上面给出的代码来看,这种做法完全是多次一举

    他绕了那么大一圈,最后还不是用 echo 把这个字符串给打印出来了?
    这就已经跟一楼给出的链接没有关系了

    打个比方就是:
    静脉注射比直接吃药吸收的快
    于是他把药静脉注射了之后立刻拦截并抽了出来,然后又用嘴喝了下去
    Sunyanzi
        4
    Sunyanzi  
       2014-08-28 18:14:48 +08:00
    首先说 @kmvan 你的想法是错的 ...

    直接在标签外面写 html 的确比 echo html 效率更高 ... 但这并不是 echo 的错 ...

    这个高效率来源于不经 php 引擎的直接输出 ... 只会快几十微秒而已 ...

    如果要输出很长的内容 ... 不管把内容写在标签外还是用 php echo ... 效果几乎是一样的 ...

    鸟哥那篇文章的意思是通过开启缓存来减少 php 向 webserver 发送内容的次数 ...

    其次说我大概是两个小时前看到这个帖子的 ... 琢磨来琢磨去 ... 也没想出这么做的理由 ...

    所以我个人觉得你应该去问问你那个同事这么写是为什么 ... 而不是在论坛发问 ...

    如果非要猜 ... 我能想到的唯一的可能性是你的同事需要实时的 raw output ...

    从你贴的这段代码里可以看到两个事情 ...

    第一 ... 你的同事没有显式的写 ob_start() 就直接用了 ob_get_contents() ...

    第二 ... 你的同事没有直接用 ob_end_flush() 而是取得内容之后自行 echo ...

    根据这两点我猜测 ... 一种可能是 php 开启了 output_buffering ...

    而你的同事等不及在 php 执行完毕时统一输出才选择这种降低承载的方式 ...

    另一种可能性是在你的同事碰触不到的代码里会自动执行挂着回调的 ob_start() ...

    具体可以参考某些奇葩框架启动内置模板引擎的方式 ...

    你的同事并不想自己 echo 的内容被那个回调所处理 ... 所以选择了这种方式 ...

    除了这两种之外我想不到其他了 ... 「写习惯了」什么的理论都完全站不住脚 ...

    如果你去问了 ... 欢迎回复一下我是否有猜对 ...
    dying318
        5
    dying318  
       2018-05-03 18:01:02 +08:00
    @Sunyanzi 可惜作者没有回复了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5374 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:41 · PVG 16:41 · LAX 01:41 · JFK 04:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.