【问题标题】:str_replace with ob_get_contents buffer is not working on website but works under testing?带有 ob_get_contents 缓冲区的 str_replace 不在网站上工作,但在测试中工作?
【发布时间】:2018-04-18 15:46:05
【问题描述】:

我正在使用动态标题、描述和规范。

我无法解释和弄清楚这里发生了什么。

我正在将与下面完全相同的示例复制到我现有的实时网站中,但由于某种原因,在我的实时网站上它没有像在测试示例中那样替换字符串?

有什么东西会影响脚本的结果吗?

测试

<html lang="da">
    <head>
        <!-- Title -->
        <title>%TITLE%</title>

        <!-- META -->
        <meta name="description" content="%DESCRIPTION%">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">

        <link rel="canonical" href="%CANONICAL%"/>
        <!-- GOOGLE+ -->
        <meta itemprop="name" content="TITLE">
        <meta itemprop="description" content="This is the page description">
        <meta itemprop="image" content="http://www.example.com/image.jpg">

    </head>
    <body id="body">
        <p>Hello</p>

        <?php



        $buffer = ob_get_contents();
        ob_end_clean();

        $canonical = "https://www.shittysite.com";

        $placeholders = array("%CANONICAL%");
        $substitues = array($canonical);

        $buffer = str_replace($placeholders, $substitues, $buffer);
        echo $buffer;
        ?>
    </body>
</html>

【问题讨论】:

  • 你不会在任何地方ob_start()
  • 自动输出缓冲可能在其他服务器的 PHP 配置中被禁用。不过,您应该仍然可以显式启动它。
  • 我尝试添加 ob_start 也没有结果。嗯,我如何在服务器上允许这个?
  • 你把ob_start放在哪里了?它必须是第一件事,在任何 HTML 输出之前。
  • 一开始是的,但我不能让它工作

标签: php dynamic str-replace ob-get-contents


【解决方案1】:

由于没有人回答,我会自己做。

一些托管服务提供商/服务器显然没有默认启用输出缓冲。

我必须在我的 .htaccess 文件中允许输出缓冲,我设法使用下面的代码来做到这一点。

php_value output_buffering On
php_value output_handler mb_output_handler

代码用于 Apache 服务器,我希望这对你们中的一些人有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    相关资源
    最近更新 更多