php / perl尝试语法" 9"?

时间:2016-09-02 22:15:19

标签: php perl str-replace

我目前只是玩弄PHP及其语法。但我得到一个随机的结果。

我的想法是使用perl生成HTML,然后用PHP define替换certian关键字。无论如何玩这个,这是我现在的想法

dino.php

<?php
 $lol = "Seriously, so I can enter text here from DB and stuff...";
function callback($buffer,$lol)

{
  return (str_replace("MSG", "$lol", $buffer));
}

ob_start("callback");

$html = shell_exec("/usr/bin/perl /fox/perl/simple.pl 2>&1");
print ($html);

$css = shell_exec("/usr/bin/perl /fox/perl/css.pl 2>&1");
print ($css);  


ob_end_flush();
?>

simple.pl

#!/usr/local/bin/perl
print <<HTML;
<table width="auto" border="1" class="center" id="container" cellspacing="10">
<td id="main_content" width="auto" ><b>Baa! </b><br />
    Well? what you doing here.. Baaa <br />
     MSG
<br />

</td>

<br />
</table>
HTML

现在,页面呈现完美,但是如果字符串 MSG 存在,我得到 9

的结果
Baa!
Well? what you doing here.. Baaa
9 

对导致九出现的原因感到好奇,我假设我在计算某种价值,但不确定是什么价值,如果我是,为什么 9 ?我应该使用另一种语法吗?

如果我用字符串删除声明(&#34; MSG&#34;,&#34; lol&#34;,$ buffer),它的行为应该如此。用lol替换MSG。

thxs。

1 个答案:

答案 0 :(得分:1)

ob_start并不期待像$foo这样的传入变量。如drew010所示,回调的格式必须是:

string handler ( string $buffer [, int $phase ] )

您可以通过几种方式解决这个问题。例如:

ob_start(function($buffer) use ($lol) {
  return (str_replace("MSG", "$lol", $buffer));
});

或者如果你不介意全局变量:

function callback($buffer)
{
  global $lol;
  return (str_replace("MSG", "$lol", $buffer));
}
ob_start("callback")