输出到文件时转义“<! - ?php”和“? - >” - nowdoc / heredoc

时间:2011-01-26 05:59:40

标签: php string escaping nowdoc

我试图做什么(实际上只能在我的本地测试服务器上)是用php输出一个php文件。
问题似乎是php的开启和关闭标签 我在php.net中查找了nowdoc,但无法找到解决方案的线索。 如果我这样使用它:

$fh = fopen($filenameandpath, 'w') or die("can't open file");
$stringData = <<<'WWR'
<?php
echo('test');
?>
WWR;
$suc = fwrite($fh, $stringData);
fclose($fh);

我收到解析错误:

  

解析错误:语法错误,第XX行/home/ua000154/public_html/test.php中的意外T_SL

此解析错误的编号始终是找到打开的php-tag的位置。我的问题似乎是我需要转义这个标签(我认为我应该对结束标签做同样的事情)

我怎么能这样做?这实际上在我的测试服务器上工作,但是一旦我将其上传到另一台服务器上的最终位置。

任何帮助都是相关的。谢谢你的时间!

2 个答案:

答案 0 :(得分:4)

如果您有意使用NOWDOC语法,请确保您的PHP服务器is running 5.3 or later,因为它是在引入时。 (您可以使用phpinfo();进行检查)。这可以解释为什么它可以在您的开发服务器上运行,但不能用于生产。

答案 1 :(得分:1)

好的,所以这是一个已经回答的旧问题,但是对于想要在早期版本的php中实现与NOWDOC类似概念的人来说,这可能是有用的。它使用输出缓冲从源文件逐字捕获文本,没有任何变量解析等。如果你想插入变量,但是你可以在字面上放任何东西,只要它不包括字符就没有多大用处“?&gt;”,终止它。

请注意,它与HEREDOC和NOWDOC的不同之处在于使用&gt;&gt;&gt; TERMINATOR和&gt;&gt;&gt;'TERMINATOR',因为变量是在文档之后定义的。

<?PHP

    function NOWDOC_() {
        ob_start();
    }

    function _NOWDOC(&$buf=false) {
        $buf_ = ob_get_contents();
        ob_end_clean();
        if ($buf!==false) $buf .= $buf_;
        return $buf_;
   }



   NOWDOC_(); ?>random garbage, not shown, but captured into $myvar 


   it has all sorts ] [* \%&  of characters in it

   and completely ignores things like {$this} or $_SERVER['REMOTE_ADDR';

   <?PHP _NOWDOC($myvar);





   NOWDOC_(); ?><HTML><HEAD></HEAD>

   <BODY>Here is some <B>nice</B> HTML &amp; .

     <SCRIPT>

      alert("javascript!");

     </SCRIPT>  

           this also demonstrates using $var = _NOWDOC() syntax.


   </BODY>

   </HTML><?PHP $myhtml = _NOWDOC();


   echo "the html will be [".$myhtml."]";

?>