2011-01-26 18 views
2

私がやろうとしていたことは(実際には私のローカルテストサーバー上でのみ)php 。
問題はphpの開始タグと終了タグのようです。
私はnowdocをphp.netで調べましたが、解決策の手がかりを見つけることができませんでした。 私はこのようにそれを使用する場合:ファイルに出力するときに "<?php"と "?>"をエスケープする - nowdoc/heredoc

$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タグが発見された場合、この解析エラーの行番号が常にあります。私の問題は、私はこのタグをエスケープする必要があるようです(閉じたタグで同じことをしなければならないと思います)

どうすればいいですか?これは実際に私のテストサーバー上で動作しましたが、別のサーバー上の最終的な場所に一度アップロードしてしまうことはありません。

ヘルプは評価されています。あなたのお時間をありがとう!

+0

これは完全なファイルですか?私はこのファイルの先頭に<?phpを追加しましたか? – shankhan

+0

私はそれがサポートされていないエッジケースだと思っていたでしょうが、あなたの例は私のためにうまくいきます。あなたのサーバはPHP> 5.3を実行していますか? – mario

+0

@shankmanはい、開始タグと終了タグを含む完全なファイルです @mario、私はリモートサーバが5.2.17で動作していることに気づき、NOWDOCをサポートしていません。私は出力として正確な文字列が必要だったので、nowdocを使用しました。今私は文字列内のすべての変数をエスケープする方法を理解する必要があります。私たちを手伝ってくれますか? – leugim

答えて

4

NOWDOC構文を意図的に使用している場合は、PHPサーバis running 5.3 or laterが導入された時点であることを確認してください。 (phpinfo();で確認できます)。それはなぜそれがあなたのdevのサーバーではなく、生産にはたらくかを説明します。

+0

@ycこれは、nowdoc(引用符)の有効な構文 – shankhan

+0

です。実際にPHP文字列の一重引用符であるNOWDOCを使用しています。つまり、引用符を置くことによって、nowdocの中の変数は解釈されません。私はそれらを解釈せずに変数を含めるために出力を必要とします。 – leugim

+0

申し訳ありませんが、有効な点です!私の編集を参照してください。 – Yahel

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

?> 
+0

私は正しく既存の文字列に追加することを許可していないことを認識しました(私の元のコードはオプションとして$ buf引数を持っていませんでした。あまりにも急いで。 – unsynchronized

関連する問題