phpでsqlite3を設定しても使えない時に私がやっていたとんでもない凡ミス | 在宅ネットでコツコツお金を稼ぐ

当サイト「在宅ネットでコツコツお金を稼ぐ」を作った時の話ですが、 このサイトは、ロリポップ!で運営しています。 ライトプランなので、mysqlデーターベースの数は1つしか使えません。

まだ、mysqlデーターベースは使っていないので、 それを使っても良かったのですが、ひとつしかないのを使うのももったいないかと思いました。 そこで、前から名前は聞いたことがあったsqliteを使ってみようと考えました。

sqliteは軽快なデーターベースで、mysqlのようにインストールしなくても、 php5以上でしたか、そのバージョン以上なら使えるという手軽さがアピールポイントです。

sqlite3がsqliteよりも新しいバージョンでロリポップでも使えるようです。 そこで、今回、私も使ってみることに。 ロリポップでは、sqliteの設定がされているので、何も設定しなくてよいです。 あとはローカル環境だけ整えたら、開発ができそうです。

まずは、自分のWindowsパソコンのphp.iniを設定。 最近、php7.2をインストールして、ホヤホヤです。

sqlite3を使うためのphp.iniの設定

php.iniの設定は環境によって異なると思いますが、 sqlite、sqlite3と書いてあるもののコメントアウトを外すだけで良いとのこと。

;extension=sqlite3

;extension=pdo_sqlite

など、以上のものを

extension=sqlite3

extension=pdo_sqlite

としました。テキストエディタでsqliteと検索して、自分が外したい該当部分のコメントを外していくという作業になります。これで動くはずですが、 プログラムを実行してみると、

Fatal error: Uncaught Error: Class 'SQLite3' not found in C:\xxx\xxx.php:18 Stack trace: #0 {main} thrown in C:\xxx\xxx.php on line 18

とエラーに。 なんでだろう。sqlite3にしたのがいけなかったんだろうか、と今度は、 古いバージョンの関数を使ってみました。

$db = sqlite_open('test.db');

上のように、sqlite3ではなくて、前のsqliteを使ってデーターベースに接続させてみましたところ、今度は、

Fatal error: Uncaught Error: Call to undefined function sqlite_open() in C:\xxx\xxx.php:5 Stack trace: #0 {main} thrown in C:\xxx\xxx.php on line 5

となってまた、エラーに。

php.iniを何度書き換えてもエラーになってしまい、 必要なライブラリが足りないのだろうか、と調べましたが、 エラーは続きました。

まさかの凡ミス

ふと、思い出して

phpinfo();

を実行してみると、

Loaded Configuration File の部分がちょっと変に感じました。

phpを新しくインストールした時に、php.iniを編集したはずで、 ちゃんと動いていたのですが・・・。

C:\Windowsに置くと、Windows10だと編集がうまくいかないのかわかりませんが、 とにかくphp.iniが反映されていないようでした。 要するに、違う場所にあったphp.iniを設定していた、というものすごい凡ミスです。

php.iniの場所を変更

わかりやすい場所に変えようということで、

Apahceのhttpd.confのPHPIniDirを書き換えました。 デフォルトでは以下のようになっている部分です。

#PHPIniDir "/usr/local/lib/php/php.ini"

それを、別のフォルダにしていたのですが、わかりやすく以下に変えました。

PHPIniDir "C:\php7.2/php.ini"

Apacheを再起動して もう一度、phpinfo();してみたところ、

php.iniの場所を変更した

Loaded Configuration File C:\php7.2\php.in

となっていて、 sqliteの欄も表示されていました。

phpinfoで見たsqlite3の項目

どうしてうまくいかなんだろうと 何日も頭を悩ませていましたが、 php.iniの場所を変えることで、うまくいきました。

最初にphp7をインストールした時に、php.iniを設定しましたが、 その時も違う場所のphp.iniを編集していたようです。 プログラムを実行してもとくにエラーが出なかったので、気が付きませんでした。

ただ凡ミスでしたが、かなり悩んで結構な時間を消費してしまいました。 私の場合、凡ミスで悩むことも意外と多いです。 一度、phpinfo();で見てみるというのが今回の解決策でした。

(2017/11/3)

トップページ

その他のコラム

コンテンツ

トップページ