WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:phpのエラーで

0:[投稿] たくちゃん [2006/09/15 17:31 ] [環境:IE6 Apache,php(localhost)]

ある本に載っているプログラムをブラウザで動かすとエラーがでるのです。内容は
Notice: Undefined index: s in C:\Program Files\Apache Group\Apache2\htdocs\simple_bbs\bbs-action.php on line 11

Notice: unserialize() [function.unserialize]: Error at offset 0 of 2 bytes in C:\Program Files\Apache Group\Apache2\htdocs\simple_bbs\bbs-action.php on line 28

Notice: Undefined index: action in C:\Program Files\Apache Group\Apache2\htdocs\simple_bbs\bbs-action.php on line 32

Notice: Undefined index: action in C:\Program Files\Apache Group\Apache2\htdocs\simple_bbs\bbs-action.php on line 75

こんな感じでずらずらとエラーがでるのです。
これだけ一度にエラーが出るからにはプログラム自体に
バグがあるのではなく、apacheかphpの設定に問題が
あるのかなあと思ってはいるのですが、何が問題なのか
わかりません。このエラーを見てアドバイス頂けませんか。


1:[回答] m035 [2006/09/15 19:55 ][URL]

PHPは良く分かりませんが、このエラーの該当箇所に原因がないことは確認済みなのですか?


2:[回答] tk [2006/09/15 21:21 ][URL]

unserialize()ってのはよく分かりませんが、ほかは未定義のindex(てなんだっけ)を使用しているという警告ですね。
>れだけ一度にエラーが出るからにはプログラム自体に
>バグがあるのではなく、apacheかphpの設定に問題が
>あるのかなあと思ってはいるのですが
いや、プログラムの方に問題がある気がします(入力ミスを含み)。
エラーの出力はphp.iniやerror_reporting関数でコントロールできます。


3:[回答] 燕雀 [2006/09/16 00:32 ]

例えば,Undefined index というのは,その連想配列が存在しない,というエラーです.しかし,Notice エラーは実行可能ですので,
>>2 でも述べているように
php.ini で
error_reporting  =  E_ALL & ~E_NOTICE
とすれば,とりあえずは実行できるようにはなるはずです.


4:[質問] たくちゃん [2006/09/16 20:36 ]

返答有難うございます。
プログラムは自分が本に載ってあるものを打ち込んだのではなく、付属CDの中のファイルをコピペして動かしたものなので打ち間違いではありません。それでbbs-auction.phpのエラーが出てる部分を以下にコピペします。
<?
    /* ログファイルの名前と削除用パスワードを設定します */
    $Config["bbslog"] = "bbs-log.txt";
    $Config["password"] = "0123";
    
    /* 各ページで表示されるMAX投稿数も設定しておきましょう */
    $Config["page"] = 10;
    
    /* ページの移動用に変数を作成します */
    $Config["s"] = 0;
    if($_GET["s"])
    {
        $Config["s"] = $_GET["s"];
    }
    
    /* bbs-action.php で配列データを読み込んでおきます */
    if(!file_exists($Config["bbslog"]))
    {
     header("Content-type: text/html; charset=shift_jis");
     print("{$Config["bbslog"]}がみつかりません。");
     exit;
    }
    if(filesize($Config["bbslog"]) > 0)
    {
     $fp = fopen($Config["bbslog"], "r");
     $BBS = fread($fp, filesize($Config["bbslog"]));
     fclose($fp);
     $BBS = unserialize($BBS);
    }
    
    /* 新規投稿があった場合の処理をします */
    if($_POST["action"] == "new")
    {
以上が一部ですが間違いがあるんでしょうか?


5:[回答] 燕雀 [2006/09/17 11:41 ]

Notice: Undefined index: s in C:\Program Files\Apache Group\Apache2\htdocs\simple_bbs\bbs-action.php on line 11
Notice: Undefined index: action in C:\Program Files\Apache Group\Apache2\htdocs\simple_bbs\bbs-action.php on line 32
---------------
この PHP の作成者は Notice エラーをエラーとして捉えていないか,もしくはソースの見やすさを考慮されているのでしょう.
if($_GET["s"]) -----> if(isset($_GET["s"]) && $_GET["s"])
if($_POST["action"] == "new") -----> if(isset($_POST["action"]) && $_POST["action"] == "new")
とすればエラーがとれますが,しかしこのエラーは無理に修正しなくても良いはずです.

Notice: unserialize() [function.unserialize]: Error at offset 0 of 2 bytes in C:\Program Files\Apache
---------------
bbs-log.txt のデータ内容が正しくありません.ここには serialize() された内容が保存されているはずで,それをunserialize() で読み出そうとして失敗しています.これをほっておいても良いかどうかは,掲出のプログラム部分からでは判断できかねます.

全体を見ると,明らかに"間違い"と断定できる箇所はないようです.
どのような本を参考になさっているのか分かりませんが,もしこのサンプルプログラムを解説している部分があるのなら,少々のエラーメッセージは無視されて,一度本の解説どおりにされて見たらいかがですか?


6:[質問] たくちゃん [2006/09/19 13:38 ]

ご返答有難うございます。
燕雀さんのおっしゃるように
Notice: unserialize() [function.unserialize]: Error at offset 0 of 2 bytes in C:\Program Files\Apache Group\Apache2\htdocs\simple_bbs\bbs-action.php on line 28
のエラーは掲示板の内容のデータが入っていない(まだ一度も入れていないため)ためエラーがでていたようです。適当に言葉を打ち込んだらこのエラーだけでなくなりました。

ただ、相変わらず他のエラーはズラズラとでています。

それと、おっしゃるようにすべてのエラーがNoticeエラーです。
このnoticeエラーをなくすには、変数をきちっと定義しないとダメだということなんでしょうか?しかしPHPは変数定義しなくてもOKじゃないんでしょうか?そもそもこのnoticeエラーってphpがだしてるんでしょうか?apacheなんでしょうか?


7:[回答] 燕雀 [2006/09/19 23:03 ]

???.php on line ## の形式で終わっているメッセージはすべてPHPが出力しているメッセージです.そもそも,notice エラーというのは開発者向けのメッセージです.平たく言えば,noticeメッセージというのは"余計なお世話かもしれませんが,s という index が定義されずに使用されているのはタイプミスではないのですか?"という感じの,いわば忠告のメッセージです.普通にインストールしたPHPではnoticeメッセージは出ない設定になっているはずです.
まずはPHPをnoticeメッセージが出ない設定にしていろいろと試してみて,ある程度知識がついてきたらnoticeメッセージを出力させるようにした方が良いと思います.


8:[完了] たくちゃん [2006/09/20 18:08 ]

ありがとうございます。別の参考本で
noticeエラーを出すほうがよく、そのように設定しろと
書いていたのでそのように設定していたようです。

回答(必須): 状態:

お名前(必須):

URL:




[戻る]