- ベストアンサー
PHP5になったら動かない
サーバレンタル会社の都合でPHP4だったのがPHP5になりました。 特に不都合なく動いてたのですが、今日1個エラーが出ているプログラムを確認しました。 どんどん行を削っていってどうもここがおかしいというところをつきとめたのですが、PHP5についてはまったく知識がない状態だったので何がおかしいのかさっぱりわかりません。 ご教授お願いいたします。 【ソース】 <?php if(!$m){ print $buff3[0]."件中 500位以内にありませんでした。"; } print "<p> </p>"; ?> 【実行結果】 Parse error: syntax error, unexpected '>' in /public_html/hogehoge.php on line 6 if文を削除すると動くので、!$mの記述方法が悪いのかとにらんでいます。 よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
たびたびどうも、非互換例を眺めていてふと気づきました。 if(!$m) ですが、もしかして$mはプロパティを何も持たないオブジェクトで 初期化もしてないのではないでしょうか。PHP4ではヌルでしたが PHP5では中身が無くてもヌルではありません。 この結果if(!$m)がPHP4ではfaleだったものがphp5ではtrueになり print $buff3[0]."件中 500位以内にありませんでした。"; が今までは実行されなかったのに、実行されてしまいます。 この時$buff3[0]の中身が適切でなければエラーとなったのでは..?
その他の回答 (4)
- se-nabe
- ベストアンサー率34% (31/91)
うーん例え$mが定義されていなくて、 ifが通っても、別にエラーは出ないと思うんですよね。。 こうなったら、地味にデバックしか方法はなさそうですね。 2つあるprintを片方ずつコメントアウトして、 エラーが出るか。 それでも出るなら、$mと$buff3をvar_dump して、内容確認。 それでもだめなら、そこのif文だけ取り出して、hoge.php とかにして、表示させましょう。 まさかとは思いますが、$が大文字とかないですよね?
お礼
何か環境とかブラウザのキャッシュとかの問題だったみたいです。 (一応複数のブラウザで動かしてみたんですが。。。) お騒がせしました。
- yyr446
- ベストアンサー率65% (870/1330)
「今日1個エラーが出ているプログラムを確認しました。」 の最初のエラーメッセージは何だったのでしょうか? PHP4=>PHP5で、一番大きな影響は、オブジェクト変数の代入文です。 $a = $b; とした場合PHP5では $a =& $b; の意味になります。つまりPHP4の時は、$aと$bは完全に別物 としてメモリー領域が確保されましたが、PHP5では同じメモリー 領域を参照しています。 従ってPHP5で$b->x = "X"; とすると、$a->xも"X"になります。 その他非互換については参照URLをみて下さい。 (私も意味がよくわからないものもありますが)
補足
最初のエラーもsyntaxerrorで、同じ行でした。 オブジェクト変数の代入文に関しても->clone();で試してみたりしました。 (というかわずか8行の上記ソースでは使う場所ないですけど^^) 関係ないですが、 $buff=$_POST["$buff"]; という文はそのままPHP5になっても使っていいものでしょうか??
- se-nabe
- ベストアンサー率34% (31/91)
そうですね、 syntaxなんで、単純な記述ミスが一般的です。 別に見たところ、php5が対応していない所はないと思いますが・・・ 全角スペースとか入ってますか?
補足
一応全角がくさいと思って、テキストエディタで全角のスペースを記号で表示するようにしてみたのですが、見つかりませんでした。
- yyr446
- ベストアンサー率65% (870/1330)
「どんどん行を削って」の作業中に、どこかで " とか ' とか . とか { とか }を誤まって削除していませんか? エラーメッセージを見るとそんな気がします。
補足
んー上記のソースを動かした結果をそのまま載せているのですが。。。 PHPではなく他の原因ですかね・・・
お礼
どうもありがとうございます。 今、別の環境で自分の書いたソースをコピペして同じ環境に別ファイルでアップしたら問題なく 件中 500位以内にありませんでした。 と表示されました。 何か違う問題のようです。きちんと確認して再度質問させて頂きます。 お騒がせしました。m(_*_)m