解析エラー: 構文エラー、script.php の xx 行目で予期しない $end
しばらくデバッグした後、エラーの原因となった行はファイルの途中の行であることがわかりました
//$str .= " ?>n";
考えてみましょう。PHP インタープリターで終了マーク行が許可されるようになったので、単一行のコメントも使用できます。つまり、//$str .= "?>n"; はコメントとして解釈されます。終了マークの前、コメントの内容は //$str .= "、?> の後の n"; は PHP ブロックの外側の内容として解釈され、HTML として出力されます。その結果、 $str .= "?>n"; 行に // をコメントとして追加すると、 ?> の終了タグが追加され、元の実際の終了タグが予期せぬものになります。
解決策は、この行を削除するだけです。
PHP 開始タグと終了タグがある行には何も書かないのが良い習慣です。