web-dev-qa-db-ja.com

アップグレード後にSQLiteが機能しなくなった

皆さんの多くがそうであったように、私は今週LucidからPreciseにアップグレードしましたが、ほとんどすべてがうまくいくようです。

sQLiteは以前はうまく機能していましたが、もう機能していませんでした。

Phpinfo()、php.ini、sqlite3.iniのすべてをチェックしました。

sqliteコマンドは正常に機能しますが、PHP ... * PLOP *を使用しようとすると、何も機能しません。

私はメッセージを受け取ります

Fatal error: Class 'SQLiteDatabase' not found in /var/www/test/sqlite/index.php on line 4

行4

$db = new SQLiteDatabase('test.sqlite', 0666);

ヒントはありますか?


編集

ここで私のphpinfo()を見ることができます: http://Pastebin.com/jQ7Bz0GN

Apacheログは

 * Restarting web server Apache2
Apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
... waiting Apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
4
SteeveDroz

拡張機能

PHPサイトの Vendor Specific Database Extensions ページによると、2つのSQLite拡張機能があります。

SQLite3拡張機能はSQLiteの新しい置き換えであり、 まもなく廃止されます

SQLite拡張機能は、PHP 5.0以降、デフォルトで有効になっています。
PHP 5.4以降、SQLite拡張機能はPECLを介してのみ使用できます。

Ubuntu 10.04 vs 12.04

今、いくつかの実用性。以下を使用してインストールされたデフォルトのWebサーバー構成を見てみましょう。

Sudo apt-get install Apache2 php5 php5-sqlite

Ubuntu 10.04:

# php --ri sqlite

SQLite

SQLite support => enabled
PECL Module version => 2.0-dev
SQLite Library => 2.8.17
SQLite Encoding => UTF-8

# php --ri sqlite3

sqlite3

SQLite3 support => enabled
SQLite3 module version => 0.7-dev
SQLite Library => 3.6.22

Ubuntu 12.04:

# php --ri sqlite

Extension 'sqlite' not present.

# php --ri sqlite3

sqlite3

SQLite3 support => enabled
SQLite3 module version => 0.7-dev
SQLite Library => 3.7.9

そのため、Ubuntu 12.04のデフォルトのPHPインストール(これを書いている時点で-バージョン5.3.10)には既にsqlite拡張が組み込まれていません。上記の出力では、sqlite3拡張のみphp5-sqliteパッケージに由来するものが存在します。

ソリューション

あなたの悪を選ぶ:

  1. 長期的な正しいアプローチは、SQLite3の下で動作するようにコードを適合させることです。変更は軽微ですが、これには大量のファイルに対するコピー/ペーストスタイルの不要な作業が含まれる場合があります。これが当てはまり、rightが適切なWordではない場合、ソリューション2が最適です。
  2. InstallPECL の廃止された拡張機能。
6

Andrejs Cainikovs 'の回答に従い、コードをアップグレードすることを強く勧めます。ここでは、SQLiteDatabaseクラス( sqlite ライブラリ)からSQLite3クラス( SQLite ライブラリ)。

例えば:

  • SQLiteDatabase-> SQLite3
  • SQLiteDatabase::unbufferedQuery-> SQLite3::query
  • SQLiteResult::fetchAll(SQLITE_*)-> SQLite3Result::fetchArray(SQLITE3_*)など.

フェッチに関しては、古い SQLite にありました:

$rowsIMEI = $db->unbufferedQuery($imeiSQL)->fetchAll(SQLITE_ASSOC);

foreach($rowsIMEI as $r)
{
    ...
}

一方、新しい SQLite では次のようにする必要があります。

$rowsIMEI = $db->query($imeiSQL);

while($r = $rowsIMEI->fetchArray(SQLITE3_ASSOC))
{
    ...
}

他の変更も同様の作業量を必要とするため、これは生涯にわたるプロセスではありません。

開始する前に、まず SQLite Studio などのツールを使用して、データベースファイルを2.1から3.0に変換する必要があります。サイズを半分にまで下げることができるので、戦う価値があると思います。

1
trejder

ソリューションではなく本番用、プレイ用のみ):
1。 ubuntu11.04またはその他から「php5-sqlite」debファイルを取得します
2。展開して、sqlite.soファイルを見つけます。
-sqlite.soは他の方法で、たとえば古いシステムから取得できます-
3。 sqlite.soを/ usr/lib/php5/20090626 + lfs /に配置します
4。これをphp.ini(/etc/php5/Apache2/php.ini)に追加します。

extension=sqlite.so
0
cb1986ster