2

我正在尝试做的(并且实际上可以但仅在我的本地测试服务器上)是输出带有 php.ini 的 php 文件。
问题似乎是 php.ini 的开始和结束标签。
我在 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 的位置。我的问题似乎是我需要转义这个标签(我想我应该对结束标签做同样的事情)

我怎么能这样做?这实际上在我的测试服务器上有效,但一旦我将它上传到另一台服务器上的最终位置,它就不会了。

任何帮助都将不胜感激。谢谢你的时间!

4

2 回答 2

4

如果您有意使用 NOWDOC 语法,请确保您的 PHP 服务器正在运行 5.3 或更高版本,因为那是它被引入的时候。(您可以使用 进行检查phpinfo();)。这可以解释为什么它可以在您的开发服务器上运行,但不能在生产环境中运行。

于 2011-01-26T06:01:13.687 回答
1

好的,所以这是一个已经回答的老问题,但是这可能对任何想要在早期版本的 php 中实现与 NOWDOC 类似的概念的人有用。它使用输出缓冲从源文件中逐字捕获文本,没有任何变量解析等。也就是说,如果您想插入变量,则没有太多用处,但是您可以在其中放入任何内容,只要它不包含字符“?>”,它终止它。

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

<?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."]";

?>
于 2012-09-19T06:10:27.157 回答