- 締切済み
futaba.phpでレス削除のテストをしていてたら書き込めなくなった
futaba.phpを使用した掲示板を使用して、管理者ページから自分で書き込んだテストレスの削除を繰り返し行っていたところ、 突然レスを書き込んだ後に「error load log」という表示が現れて、書き込みが一切出来なくなってしまいました。 個人的には、書き込みが出来なくなる直前に、全てのレス(すべて自分のIPからの書き込み)を一気に削除してしまった事が何かの原因の様に思うのですが、対処法がわかりません。 初心者染みた質問で申し訳ありませんが、どなたか解決法を教えてください。お願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- BellBell
- ベストアンサー率54% (327/598)
解決した場合、元のスクリプトを公開しているページで、現象を知らせた方がいいですよ。 『一気に削除』が、PHPの操作上での事であれば完全にバグですから。 ログファイルの中身を手で削除したのだとすれば、バグではないのでしょうが間違った操作でエラーを引き起こしてしまったという、操作ミスの報告。 バグ報告を受けることで、スクリプト作者はバグを修正できます。 操作ミス報告を受けることで、スクリプト作者はユーザーが犯す間違いを知り、改善に手を付けることができます。 公開はスクリプト作者が好意で行っていることなので、修正、改善もしなければならない義務はないですが。 そのスクリプト作者の好意に対して、バグ報告、操作ミスの報告、改善や機能追加の提案は、ユーザーからの好意、あるいは礼儀です。 それに返事を出すことを含め、仮に致命的なバグであっても対応するかしないかは、作者の自由ですけどね。 一応念のため。
- nicolish
- ベストアンサー率72% (13/18)
結論:img.logを削除して再度スクリプトを走らせる。恐らくこのファイルは中身が既に空っぽなので、削除しても痛くない。 再発を防ぐためには、最低1件(レス番号1番を残すのが無難)のレスは削除せず残すこと。 せっかくなのでデバッグ。 まず、futaba.phpを「error load log」で検索する。すると以下のコードが見つかる。 //ログ読み込み $fp=fopen(LOGFILE,"r+"); flock($fp, 2); rewind($fp); $buf=fread($fp,1000000); if($buf==''){error("error load log",$dest);} つまり、LOGFILEという名前のファイルの中身が空か、読み込みに失敗している可能性が高い。 LOGFILEっていうのが何かを調べる。検索すると24行目に define("LOGFILE", 'img.log'); がある。これが問題のログファイル名。 このファイルの初期化処理はinitという関数で行なわれているのだが、この処理は ・ファイルが存在しない場合は以下の内容でファイル作成 "1,2002/01/01(月) 00:00,名無し,,無題,本文なし,,,,,,,,\n" という方法で初期化している。 従って、中身が空のファイルが存在する場合は、初期化処理が行なわれず、しかも最初に書いたように読み込みも失敗したと判定されるため、投稿者のようなニッチもサッチもいかない状態に追い込まれるわけだ。
- BellBell
- ベストアンサー率54% (327/598)
想像ですが。 1)レスをすべて削除してしまったことにより、記事(投稿)が存在しなくなった。 2)そのことにより、PHPソース内でログファイル自体を削除した。(そのようなロジックになっていると仮定) 3)表示(読み込み)の際に、ログファイルが存在しないため、「error load log」と表示、処理を中断するため書き込みフォームが表示されなくなった。 もしそうだとすると、空のログファイルを用意して書き込み可能にパーミッションを設定すればOKの気がしますね。 ファイルは存在しても、ファイルにデータが一件もないと、「error load log」となるバグかも知れません。 その場合、そのシステムの最初の状態(ダウンロード(?)した直後)のログファイルを調べてみて、どのようなデータが入っているかがわかればバグを修正できるかも知れません。 どうやってもダメという最悪の状態でも、最初の状態のログファイルをアップロードし直して、パーミッションを設定すれば直ると思いますよ。
- memphis
- ベストアンサー率40% (975/2395)
再度、入れなおせば直りませんか? もしくは、エラーになっているスクリプト部分を探して原因を調べるのもいいです。