PHPに関する質問です。

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だとエラーがでるかわかりません。
どなたかアドバイスいただけないでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/06/25 17:32:59
  • 終了:--

回答(5件)

id:gae No.1

gaeeyo回答回数14ベストアンサー獲得回数22005/06/25 20:43:14

ポイント30pt

http://jp.php.net/phpinfo

PHP: phpinfo - Manual

phpinfo() 関数を使って、mbstring が使用可能になっているかや、そもそも php.ini の設定が動作中のphpに正しく適用されているか確認してください。

id:masashi0316

Multibyte Support enabled

Japanese support enabled

Multibyte (japanese) regex support enabled

を確認しました。

また、.htaccessで設定を変更するとともに、

mb_internal_encodingなどで取得し、反映されてることを確認しました。

2005/06/25 21:15:48
id:okegawa No.2

okegawa回答回数9ベストアンサー獲得回数02005/06/25 20:51:24

ポイント30pt

URLはダミーです!!


変数をキャストしてみては?

(string)$foo

(int)$bar

のように明示的に、文字列と数値を指定すれば回避できるかなぁ...と...

id:masashi0316

なるほど・・・試してみます。

というか、なぜこれでNGなのか知りたいです。。

関係ないですけど、文字数オーバーでかけなかったのですが、うまく動くケース:エラーになるケースでいくと、7:3くらいです。引き続き援助希望です。

2005/06/25 21:18:16
id:english No.3

english回答回数304ベストアンサー獲得回数02005/06/25 23:28:13

ポイント30pt

ご提示いただいたコードは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エラーが出てしまいます。

id:masashi0316

ん〜、そうなんですよ、私も別のサーバ2箇所に設置したんですが、ぜんぜん問題なし。不具合が出るサーバのmb関連の設定を.htaccessで問題ないサーバと同じにしたりもしてるんですが、解消できないといった感じです。でも、URLは参考になりました。さらにいろいろ試してみます。(不具合発生してるサーバが自社のものでないので、直接調査できないってとこもあるんですよ。。困った)

2005/06/26 00:03:35
id:ymlab No.4

ymlab回答回数508ベストアンサー獲得回数342005/06/25 23:34:49

ポイント30pt

引用符をバックスラッシュとみなしてエスケープするのでは?

¥で、逃げてみてください。気になる文字の後に¥をはさんでください。


もしくは、全角空白が入っていませんか?

[でもこの場合だと、100%エラーになります。]


ただ、echo ”です

¥n”;

のところで、エラーになりませんか?

id:masashi0316

引用符がバックスラッシュ?というところがよくわからないですが、前コメントにあるように(この投稿の後に書いたものです、すみません)ほかのサーバでは動いてるんですよ。

echo ”です

¥n”;

この変は、はてなのシステムで勝手に改行入ったり全角にされたりです、重ねてすみません。

引き続き回答募集です。

類似体験もお願いしたいと思います。ぜひ投稿ください。

2005/06/26 00:11:06
id:izayoimizuki No.5

izayoimizuki回答回数302ベストアンサー獲得回数02005/06/26 21:41:26

ポイント30pt

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 . ”は”;とすべきです。


英数のみでも問題がおきる事のあるやり方ですので日本語が入っているともっとややこしい事になります。

おそらく後に続く文字列を変数の一部なのかそうでないのかをうまく判別できていないのだと思います。

id:masashi0316

ほかのサーバで動くことを差し引いても、説得力ありのアドバイスです。ありがとうございます。

しかし、「echo $i . ”は”;」にしてもNGでした。

2005/07/01 22:56:50

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません