人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: masashi0316
●カテゴリ:コンピュータ
✍キーワード:Apache echo EUC EXIT Linux
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● gaeeyo
●30ポイント

http://jp.php.net/phpinfo

PHP: phpinfo - Manual

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

◎質問者からの返答

Multibyte Support enabled

Japanese support enabled

Multibyte (japanese) regex support enabled

を確認しました。

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

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


2 ● okegawa
●30ポイント

http://www.yahoo.co.jp/

Yahoo! JAPAN

URLはダミーです!!


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

(string)$foo

(int)$bar

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

◎質問者からの返答

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

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

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


3 ● english
●30ポイント

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は参考になりました。さらにいろいろ試してみます。(不具合発生してるサーバが自社のものでないので、直接調査できないってとこもあるんですよ。。困った)


4 ● ymlab
●30ポイント

http://www2.portland.ne.jp/~sigekazu/css/ascii.htm

使えない文字

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

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


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

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


ただ、echo ”です

¥n”;

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

◎質問者からの返答

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

echo ”です

¥n”;

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

引き続き回答募集です。

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


5 ● izayoimizuki
●30ポイント

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でした。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ