OS:Linux
Webサーバ:Apache
PHP:Version 4.3.8
以下のスクリプトを実行すると、parse error, unexpected T_STRINGのエラーが出ます。
(エラーの該当行は「$uneven = ”奇数”;」の行です)
$even = ”偶数”;
$uneven = ”奇数”;
for($i = 1; $i < 100; $i++){
echo ”$i は”;
if($i % 2){
echo $uneven;
}
else{
echo $even;
}
echo ”です
¥n”;
}
exit;
状況は以下の通りです。
100%エラーにならない。(正常に終了する場合がある)
日本語を排除するとエラーが発生しない。
スクリプト記述の文字コードはEUCですが、SJISにするとエラーがでない。
mbstring.internal_encodingなど
mbに絡む設定の変更を試したのですが、状況は変わりませんでした。
(日本語排除でエラーがでないといっても、うまく動くときもあるので、
一概に設定の問題とはいいきれないとも考えています)
なぜEUCだとエラーがでるかわかりません。
どなたかアドバイスいただけないでしょうか?
PHP: phpinfo - Manual
phpinfo() 関数を使って、mbstring が使用可能になっているかや、そもそも php.ini の設定が動作中のphpに正しく適用されているか確認してください。
Yahoo! JAPAN
URLはダミーです!!
変数をキャストしてみては?
(string)$foo
(int)$bar
のように明示的に、文字列と数値を指定すれば回避できるかなぁ...と...
なるほど・・・試してみます。
というか、なぜこれでNGなのか知りたいです。。
関係ないですけど、文字数オーバーでかけなかったのですが、うまく動くケース:エラーになるケースでいくと、7:3くらいです。引き続き援助希望です。
http://ns1.php.gr.jp/pipermail/php-users/2005-January/024608.htm...
[PHP-users 24088] Parse errorについて
ご提示いただいたコードはhatenaのシステムによりエスケープ処理されていて、あれですが、こちらで適宜置換などして動かしてみたところ問題なく動きますね。WindowsXP+PHP4.3.10で確認。
ただ、このエラーになったりならなかったりする現象はPHPのメーリングリストでここ最近何度か登場してきている話題だったと思います。これらの中に解決策はありませんか?
http://ns1.php.gr.jp/pipermail/php-users/2005-March/025317.html
[PHP-users 24797] リロードすると直るParse errorについて
http://ns1.php.gr.jp/pipermail/php-users/2004-August/023557.html
[PHP-users 23035]何も無い行でUnexpected characterエラーが出てしまいます。
ん〜、そうなんですよ、私も別のサーバ2箇所に設置したんですが、ぜんぜん問題なし。不具合が出るサーバのmb関連の設定を.htaccessで問題ないサーバと同じにしたりもしてるんですが、解消できないといった感じです。でも、URLは参考になりました。さらにいろいろ試してみます。(不具合発生してるサーバが自社のものでないので、直接調査できないってとこもあるんですよ。。困った)
引用符をバックスラッシュとみなしてエスケープするのでは?
¥で、逃げてみてください。気になる文字の後に¥をはさんでください。
もしくは、全角空白が入っていませんか?
[でもこの場合だと、100%エラーになります。]
ただ、echo ”です
¥n”;
のところで、エラーになりませんか?
引用符がバックスラッシュ?というところがよくわからないですが、前コメントにあるように(この投稿の後に書いたものです、すみません)ほかのサーバでは動いてるんですよ。
echo ”です
¥n”;
この変は、はてなのシステムで勝手に改行入ったり全角にされたりです、重ねてすみません。
引き続き回答募集です。
類似体験もお願いしたいと思います。ぜひ投稿ください。
http://www.hatena.ne.jp/1119688379#
人力検索はてな - PHPに関する質問です。 OS:Linux Webサーバ:Apache PHP:Version 4.3.8 以下のスクリプトを実行すると、parse error, unexpected T_STRINGのエラーが出ます。 (エラーの..
echo ”$i は”;はちょっとまずいです。
PHPはとても寛容な仕様なので問題はおきない事が多いですが基本的には”と”の中には変数は入れてはいけません。
echo $i . ”は”;とすべきです。
英数のみでも問題がおきる事のあるやり方ですので日本語が入っているともっとややこしい事になります。
おそらく後に続く文字列を変数の一部なのかそうでないのかをうまく判別できていないのだと思います。
ほかのサーバで動くことを差し引いても、説得力ありのアドバイスです。ありがとうございます。
しかし、「echo $i . ”は”;」にしてもNGでした。
Multibyte Support enabled
Japanese support enabled
Multibyte (japanese) regex support enabled
を確認しました。
また、.htaccessで設定を変更するとともに、
mb_internal_encodingなどで取得し、反映されてることを確認しました。