2

私がやろうとしていたこと(そして実際には、ローカルのテストサーバーでのみ可能でした)は、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タグが見つかった場所です。私の問題は、このタグをエスケープする必要があることのようです(終了タグでも同じことを行う必要があると思います)

どうすればこれを行うことができますか?これは実際には私のテストサーバーで機能しましたが、別のサーバーの最終的な場所にアップロードすると機能しませんでした。

どんな助けでもありがたいです。お時間をいただきありがとうございます!

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 に答える