2011-01-26 26 views
2

什么我(在我的本地TESTSERVER和可能,实际上却只有)试图做的是输出的PHP文件用PHP 。
这个问题似乎是php的开始和结束标签。
我在php.net中查找了nowdoc,但找不到解决方案的线索。 如果我用这样的:逃逸outputing到一个文件时,“<PHP?”和“?>” - nowdoc /定界符

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

我得到一个解析错误:

Parse error: syntax error, unexpected T_SL in /home/ua000154/public_html/test.php on line XX

此分析错误的行号总是在开幕PHP标签中找到。我的问题似乎是,我必须逃离这个标签(我相信我应该做的结束标记相同)

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

任何帮助是apreciated。谢谢你的时间!

+0

它是完整的文件我的意思是你在这个文件的开头添加了<?php? – shankhan 2011-01-26 06:07:11

+0

我会怀疑这是一个不受支持的边缘案例,但您的示例适合我。你确定你的服务器运行PHP> 5.3吗? – mario 2011-01-26 06:07:11

+0

@shankman,是的,它是一个完整的文件,起始和结束标记 @mario,我刚刚注意到我的远程服务器正在运行5.2.17,因此不支持NOWDOC。我使用了nowdoc,因为我需要确切的字符串作为输出。现在我必须弄清楚如何转义字符串中的每个变量。你可以帮帮我吗? – leugim 2011-01-26 06:22:05

回答

4

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

1

好了,这是一个已经回答了一个老问题,但是这可能是使用的人谁愿意来实现在早期版本的PHP类似概念NOWDOC的。它使用输出缓冲来从源文件中逐字地捕获文本,而不用任何变量解析等。即,如果你想插入变量,那么它不是很多用途,但是你可以从字面上放入任何东西,只要它不包含字符“?>”,终止它。

音符,它从HEREDOC和NOWDOC在于,所述变量是该文档之后定义用于>>> 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."]"; 

?>