画像掲示板にまた不具合発生

先日、画像掲示板の泉で投稿プログラムを修正しましたが、また画像掲示板が壊れていたので急ぎプログラムを見直しました。

前回はfopen($filename,”w”)が原因でログファイルが消失するといった現象でした。詳細はこちらの記事でご参照下さい。

掲示板に歯抜け現象が発生

前回はfopen($filename,”w”)のwモードが原因でログファイルが全て飛んでしまうという現象でしたが、今回はログファイルの一部が壊れるという現象が発生しているようです。

ログの一部が壊れている影響で、掲示板内のスレッドに歯抜けが生じていました。

imgbbs_thread_hanuke.png
掲示板のスレッドに歯抜けが発生しています

原因はfopen()のr+モードの挙動

掲示板はスレッド更新順に並んでいますが、見ると最後尾に近いスレッドに歯抜けが生じているようです。となると、ログファイル前半の方は問題なく書き込みされているので、fopen()のr+モードが関係していそうな感じです。

調べてみたところ、そふぃのPHP入門にr+モードの挙動で気を付けないといけない点をみつけました。

ファイルを開いた時点では元のデータが残っているので一見こちらの方が良さそうですが、不便なところもあります。書き込みたい内容が、ファイルに既に書き込まれている文字列より短い場合には変なゴミがつきます。変なゴミ、と言いましたが、元々ファイルにあった文字列が残ってしまうって事です。

そふぃのphp入門

ファイル更新時に更新前データが残る

wモードの時には一回ファイルサイズを0にしていたため、更新前データの影響を受けることはありませんでしたが、r+モードの時にはファイルポインタは先頭に置かれるものの、以前のデータは消しているわけではないため、データサイズが減った時には更新前データが残ってしまうということのようです。

分かりやすいようにイメージにしてみました。

fopen_r_error.png
書き込み前より書き込み後のデータサイズが小さいと、こんな状況が発生するようです

ログファイルの更新前後の差分対応

書き込み前、書込み後のファイル容量に注意しないといけないということが分かったので、早速プログラムを修正しました。

更新前ログファイルのファイルポインタ位置をftell()で確認し、ログファイルの更新前後でファイル容量が減少している場合には、更新後にftruncate()でファイルを切り詰めるようにしてみました。

とりあえず、これでr+モードで残ってしまうゴミも削除出来ているようです。

おわりに

度々のプログラム不具合でご迷惑をお掛けしてしまい申し訳ございませんでした!!

さてさて。あっという間に大晦日となってました。2008年はサーバートラブル、プログラムエラーが頻発してしまい、最後の最後までユーザーさんにも大変ご迷惑をお掛けしてしまいました。

2009年は、もうちょっと安定稼動、定期更新を目指しますので、宜しくお願い致します。
よいお年をお迎え下さい。

ABOUT dtn.jp

この運営ブログをみてdtn.jpの運営サイトに興味をお持ちになった方は下記のリンク集からサイトをご参照ください。PHP・SQL・JS・HTML・CSSや様々なAPIでゼロから立ち上げたサイトを複数運営しています。

dtn.jp関連サイト

  • ディレクトリ型検索エンジンdtn大手サイトは全てサービスを終了し、中小でも運営を継続するところがほとんどなくなってしまったディレクトリ型検索エンジンを2002年から細々運営しており、未だに細かい機能改修も行っております。申請されたサイトは実際に訪問して細かく確認をしているので登録までかなりお時間いただきます。
  • 猫ネコサーチエンジン猫・ペットサイト専用のディレクトリ型検索エンジンです。登録サイトはサイトのスクリーンショット付きでカテゴリに掲載しています。
  • 画像掲示板の泉画像やYouTubeやニコニコ動画が貼り付け可能な匿名画像掲示板です。27ジャンルに分かれた掲示板に、それぞれ100スレッドまで立てることが可能です。
  • ツイータンTwitter APIを使って10分おきに収集したTwitter(ツイッター)のトレンドワードや人気ハッシュタグデータを月別に集計してランキング形式で公開しています。
  • Keyword Tool++Yahoo APIや楽天サイトのデータを日次で収集したデータを元に、EC系キーワードをラインキング形式でご紹介しています。各ワードは検索ボリュームや関連語、24か月の検索ボリュームトレンドを確認も可能です。
  • 消費者金融の泉カードローン商品を取り扱う金融業者を一覧で比較可能としたサイトです。カテゴリ別、人気度別、限度額別、金利別に比較可能なサイトにしています。
  • TrendinGファッションモールに出店するブランドをアイテムヒット率でランキングとしたサイトです。まだβ版です。

各サイトの開発方法などについて

各サイトの開発方法や運用トラブルについては、当ブログで不定期にご紹介しています。Twitterで新着記事のお知らせもしています。宜しければフォロー下さい。