CentOS6.6 環境の PHP 5.3.x に SQlite1.0.3 を入れたいときの

3 min read読了の目安(約3300字

経緯

ちょっとしたphpのプログラムを作ることを任されましたw。会員管理とかほんとにもうbasic認証ぐらいな感じの簡単なやつを。まあそんだったら php + SQlite 組み入れてと思ってたら本番先はレンタルサーバー…。まあそんな感じで凹んでいましたが、運よく SQLiteが入っているのでラッキーと思っていたら SQlite1.0.3 。
ちょっとーそんな古い環境、、ローカルに環境作れるの?と、また「はまった」のでそのメモ。

ちなみに散々探して(前にメモしていたのを無くした)下記のサイトとおりに行ったらいまくいったのです(笑)。

PHP5.3にSQlite1.0.3を入れる

手順

php とかも入れますぜw

# yum install httpd-devel php php-mbstring php-pear php-devel php-pdo wget
# wget http://museum.php.net/php5/php-5.3.4.tar.gz
# tar xvfz php-5.3.4.tar.gz
# cd php-5.3.4/ext/sqlite
# phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
config.m4:50: warning: AC_CACHE_VAL(pdo_inc_path, ...): suspicious cache-id, must contain _cv_ to be cached
../../lib/autoconf/general.m4:1974: AC_CACHE_VAL is expanded from...
../../lib/autoconf/general.m4:1994: AC_CACHE_CHECK is expanded from...
aclocal.m4:2743: PHP_CHECK_PDO_INCLUDES is expanded from...
config.m4:50: the top level
config.m4:50: warning: AC_CACHE_VAL(pdo_inc_path, ...): suspicious cache-id, must contain _cv_ to be cached
../../lib/autoconf/general.m4:1974: AC_CACHE_VAL is expanded from...
../../lib/autoconf/general.m4:1994: AC_CACHE_CHECK is expanded from...
aclocal.m4:2743: PHP_CHECK_PDO_INCLUDES is expanded from...
config.m4:50: the top level
# ./configure
# make clean;make
# make install
# sudo echo 'extension=sqlite.so' > /etc/php.d/sqlite.ini
# sudo echo '<?php phpinfo();' > /var/www/html/phpinfo.php

Apache を再起動して、SQLite が実行可能かを確認する。

sqlite3_php.png

よしよし。

SQLite 関数 直接操作

さんのサイトの、コードそのままですが(多少変更)。
適当なディレクトリに設置して。実行します。

<?php    
$sqliteerror = null;
 
/* SQLiteハンドルの取得 */
$dbh = sqlite_open('test.db', '0666', $sqliteerror) 
   or die ("file not create.");
 
/* テーブルの作成 */
/* idをプライマリ宣言し自動シーケンス */
$query = <<<QUERY
DROP TABLE account_tbl;
);
QUERY;
$result = sqlite_query($query, $dbh);

$query = <<<QUERY
CREATE TABLE account_tbl (
    id INTEGER,
    number INTEGER,
    name VARCHAR(64) NOT NULL,
    email VARCHAR(128),
    PRIMARY KEY (id)
);
QUERY;
$result = sqlite_query($query, $dbh)
   or die ("table not create.");
 
/* ステートメントの生成 */
$query = "INSERT INTO account_tbl (number,name,email) VALUES ".
                "('30248','takahasi','takahasi@hoge.com') ";
$result = sqlite_query($query, $dbh);
 
$query = "INSERT INTO account_tbl (number,name,email) VALUES ".
                "('45567','ito','ito@hoge.com') ";
$result = sqlite_query($query, $dbh);
 
 
/* データの取得 */
$result = sqlite_query('SELECT * FROM account_tbl', $dbh);
 
$cols = array();
while ($cols = sqlite_fetch_array($result, SQLITE_ASSOC)) { 
    echo "----------------------<br>";
    echo "id    = {$cols['id']}" . "<br>";
    echo "number= {$cols['number']}" . "<br>";
    echo "name  = {$cols['name']}" . "<br>";
    echo "email = {$cols['email']}" . "<br>";
    echo "----------------------<br>";
} 
 
/* ステートメントの開放 */
$result = null;
?>

結果として

----------------------
id = 1
number= 30248
name = takahasi
email = takahasi@hoge.com
----------------------
----------------------
id = 2
number= 45567
name = ito
email = ito@hoge.com
----------------------

と画面に表示されれば、ok