PHPについて質問です。


購入した本に書かれていたスクリプトをXAMPP、Eclipseという環境下で
実行したところうまく作動したのに、サーバーに転送して実行すると、
「Parse error: syntax error, unexpected 」というエラーが出ます。
しかもエラーとして指定された行はコメントアウト(//)しているところです。
これはどうしたらよいか教えてください。

なお、質問者はまだ勉強を初めて間がないので、
初心者にもわかるようご配慮くださいませ。
以上よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/02/07 17:17:57
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:Numeric No.1

回答回数83ベストアンサー獲得回数18

ポイント35pt

直訳すると「分析エラー:構文エラー,予期せぬ…」となりますが、

重要なのはunexpectedの後なので、その情報があれば解決は早いです。


また、エラー発生行に関してですが、「エラーが発生した行」ではなく、

「エラーを検知した行」なので気をつけてください。

たとえば、

1:<?php

2: $a = "" //2行目でセミコロン抜け

3:?>

この処理を実行した場合、

Parse error: syntax error, unexpected ';' in xxx.php on line 3

と表示されます。


なお、デバッグ方法についてはこのサイトが参考になります。

ホリデープログラミング入門アナログなデバッグ術 その1

id:taroemon

ご回答ありがとうございます。

大変参考になりました。

デバッグの方法についてはこれから勉強します。


エラーを全部書くと下記のようになります。

Parse error: syntax error, unexpected '{' in /var/www/home/ユーザー名/public_html/ドメイン名/test.php on line 15


当該のスクリプトは下記の通りです。

14行目 try{

15行目 //コメントアウト文

16行目 $doc=new domDocument();


繰り返しになりますが、XAMMP、ECLIPSEという環境ではちゃんと表示されます。

また何か提示すべき必要な情報がありましたらお知らせください。

2008/02/07 14:53:45
id:tezcello No.2

回答回数460ベストアンサー獲得回数69

ポイント35pt

何となく文字コードがいたずらしている気がしますが...

  1. 問題のスクリプトに日本語が含まれていませんか?

(特にエラーとして指定された行よりも先頭側に)

  1. そのファイルはどのエンコード(文字コード)で保存されたでしょうか?

Shift-JIS は推奨されていないです。

http://www.php.net/manual/ja/ref.mbstring.php


(以下、今回のご質問が解決されてからのお話ですが...)

また、XAMPP とターゲットのサーバでのマルチバイト文字列の環境は一致していますか?

<?php
phpinfo();
?>

だけ記述したファイル(例えばinfo.php)を用意してブラウザで表示してみるとPHPの環境が表示されます。

この中の、mbstring の項目の中の値がXAMPPとターゲットのサーバとで異なっていると、動作が予想通りにならない可能性が高いです(プログラム的に対処しているか、日本語を使っていなければ無問題です)

mbstring.language

mbstring.internal_encoding

mbstring.http_input

mbstring.http_output

mbstring.encoding_translation

これらが違っていて、なかなか気がつかなかった経験があります。

id:taroemon

親身なご回答ありがとうございます。


>問題のスクリプトに日本語が含まれていませんか?

コメントアウトの文章以外には使ってません。


>どのエンコード(文字コード)で保存されたでしょうか?

UTF-8です。


>XAMPP とサーバでのマルチバイト文字列の環境は一致していますか?

実はそれに関しては下記のような質問をしました。

http://q.hatena.ne.jp/1202326856

php.iniなどいじってみたのですが、

どうにもならなかったので、放っておいたままにしておきました。


現状では下記の通りになっています。

mbstring.language :neutral

mbstring.internal_encoding :no value

mbstring.http_input :pass

mbstring.http_output :pass

mbstring.encoding_translation :Off


もしこれが問題だとしたなら、

具体的にどう対処すればよいのでしょうか?

前回の質問でした私の対応以外に何かすべきことがあるようでしたら、

具体的な手順も教えてもらえるとうれしいです。

2008/02/07 16:49:16
  • id:tezcello
    ひょっとして...
    ターゲットサーバの PHP って、PHP4 ではないですか?
    try, catch は、PHP5 でないと使えません。
    先程の phpinfo() で表示した際に、先頭にPHPのバージョンも表示されるので、ご確認ください。
  • id:taroemon
    tezcelloさん
    コメントありがとうございます。

    XAMPPは最新の物を使用していますが、
    念のため確認しましたところ、PHP Version 5.2.5になってました。
  • id:tezcello
    > XAMPPは最新の物を使用していますが、
    > 念のため確認しましたところ、PHP Version 5.2.5になってました。
    エラーが出るのは、転送先のターゲットサーバですよね?
    ターゲットサーバのPHPのバージョンはどうでしょうか?


    mbstring 関係のセッティングは、スクリプトの最初で、
    mb_language('ja');
    mb_internal_encoding('UTF-8');

    とでも入れておけばいいと思います。(ターゲットの方は php.ini を変更できないのですよね?)
    個人的には、mbstring.encoding_translation は Off の方が使いやすいと思うのですが...
    勝手にエンコードを変更されて訳が分からなくなったりしませんから。
  • id:taroemon
    tezcelloさん
    再度のコメントありがとうございます。

    自分の環境のことだと早合点してしまいました。
    他のサーバーに送って試してみたらうまくいきました。
    やはりサーバー側が対応してなかったみたいです。

    ポイントを送信しておきましたのでお時間のあるときにでもご確認ください。
  • id:tezcello
    わざわざポイント送信して頂きましてありがとうございます。

    たしかXAMPPは、PHP4環境も選べたと思います。そのうまく動作しないサーバ(たぶんPHP4)でのスクリプトをローカルで検証するなら、そういった対応も選択肢のひとつかと。

    もうひとつお礼代わりに、こんなページを見つけました。
    http://tomonori855.sakura.ne.jp/recipe/2007/05/php4try_catch.html
    try, catch に似たような事をPHP4で実現する...って事ですが、熟読していないので理解出来てません。まぁ、ご参考になれば...。

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

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

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

回答リクエストを送信したユーザーはいません