PHPのSQLite3で”database is locked”エラーが頻繁にでる

この記事は次のブログに引っ越しました。

PHPのSQLite3で同時アクセスが多いとDBがロックされワーニングが出る Warning: SQLite3::exec() [sqlite3.exec]: database is locked in /home/users/hogehoge.php on line xxx 自前のDB管理用のクラスを作ってSQLite3を使っている際に、スクレイピングのような反応が重い処理をしていると、たった2件の同時アクセスでも上記ワーニング(エラー)が出ることがあります。 SQLiteは単一ファイルを使ってのDBなので、何かの処理でファイルがオープンされていると、当然他の処理は受け付けられなくなります。 この際のよくやるミスは、クラスのオブジェクトを作成する際にDBをオープンして、デストラクターでクローズさせる方法を取ることです。 この方法であればリソースを使いまわせるのでメソッドで利用するなど便利ではあるのですが、意図しないロックが発生します。 面倒ではありますが、やはり必要な時に都度都度オープンして、処理が終わったら即クローズする急がば回れの方法が一番なようです。