Life with IT

山好きITエンジニア 木檜(こぐれ)和明 による発信の場

PHP

2009/3/4更新

対応バージョン: 5.2.9

既にPHPが導入されている環境に拡張モジュールをインストールする手順を示す。

ここではPHP 5.2.9配布物に含まれるXSLモジュールをインストールするものとする。

make,インストール

% cd php-5.2.9/ext/xsl
% phpize
% ./configure
% make
% sudo make install

Installing shared extensions:  /usr/local/lib/php/extensions/no-debug-non-zts-20060613/

上記ディレクトリにxsl.soがインストールされる。

php.ini編集

拡張モジュールがインストールされたディレクトリと、有効にするモジュールをそれぞれ明記する。

% sudo vi /usr/local/lib/php.ini

extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20060613/"

extension=xsl.so

確認

拡張モジュールが有効になったことを確認する。

% php -i| grep xsl
xsl
libxslt Version => 1.1.24
libxslt compiled against libxml Version => 2.6.32
libexslt Version => 1.1.24

2009/3/3更新

対応バージョン: 5.2.9

PHPでDBにアクセスするにはPDO(PHP Data Objects)を使用する。

以下、簡単なサンプルとともに説明する。

例外処理定義

まずDBアクセス時にエラーが起きた場合の例外処理を定義しておく。

try
{
  <<<DBアクセス処理を記述>>>
}
catch (PDOException $e)
{
  var_dump($e->getMessage());
}

エラーが起きるとPDOExceptionオブジェクトが生成されるのでこれを補足してgetMessageメソッドをコールすることによりエラーメッセージを取得する。

以下、実際のDBアクセスについて説明する。

DB接続

以下の引数をPDOに与えてハンドルを生成する。

DSN(データベースのデータソース名)
データベースにアクセスするユーザ名
上記ユーザのパスワード
PDOのオプション

例) SQLiteの場合

$dsn = "sqlite:/tmp/test.db";
$user = null;
$password = null;
$pdo = new PDO($dsn, $user, $password);

例) MySQLの場合

$dsn = "mysql:host=localhost, dbname=test.db";
$user = "root";
$password = "*******";
$pdo = new PDO($dsn, $user, $password);

テーブル作成

クエリ文字列を生成し、PDO::queryメソッドをコールする。

ここでは以下のようなスキーマ定義を持つテーブルを作成する。

テーブル名
property

持ち物リスト

カラム
name (text)

持ち物名

num (integer)

個数

この場合、コードは以下のようになる。

$query = "CREATE TABLE property(name text primary key, num integer)";
$pdo->query($query);

データ挿入

PDO::prepareメソッドによりPDOStatementオブジェクト(ステートメントハンドル)を生成し、PDOStatement::bindValueメソッドで各カラムにデータを割り付けた後にPDOStatement::executeメソッドを実行する。

ここでは上記で作成した持ち物リストテーブルに以下のデータを挿入する。

iPhone

1台

Wii

1台

LoveLetter

30枚

この場合、コードは以下のようになる。

$name_list = array("iPhone", "Wii", "LoveLetter");
$num_list = array(1, 1, 30);

$query = $pdo->prepare("INSERT INTO property(name, num) VALUES(:name, :num)");

for($i = 0; $i < count($name_list); $i++)
{
  $query->bindValue(':name', $name_list[$i]);
  $query->bindValue(':num', $num_list[$i]);
  $query->execute();
}

PDOStatementオブジェクトを使用し終わったらnullをセットしてオブジェクトを開放する。

$query = null;

データ読み出し

PDO::queryメソッドによりステートメントハンドルを生成し、PDOStatement::fetchメソッドでデータを読み出す。

上記で挿入したデータを取り出してみる。

$select = $pdo->query("SELECT * FROM property");

while($row = $select->fetch(PDO::FETCH_ASSOC))
{
  echo implode("|", $row) . "\n";     // 各カラムを"|"で連結
}

$select = null;

結果は以下のようになる。

iPhone|1
Wii|1
LoveLetter|30

DB切断

PDOオブジェクトにnullをセットしてオブジェクトの開放、つまりDBからの切断を行う。

$pdo = null;

まとめ

上記のコードをまとめると以下のようになる。

try
{
  //
  // DBハンドル生成
  //
  $dsn = "sqlite:/tmp/test.db";
  $user = null;
  $password = null;
  $pdo = new PDO($dsn, $user, $password);

  //
  // テーブル作成
  //   < テーブル定義 >
  //   - テーブル名:property ........ 持ち物リスト
  //   - カラム    :name (text) ..... 持ち物名
  //               :num (integer) ... 個数
  //
  $query = "CREATE TABLE property(name text primary key, num integer)";
  $pdo->query($query);

  //
  // データ挿入
  //
  $name_list = array("iPhone", "Wii", "LoveLetter");
  $num_list = array(1, 1, 30);

  $query = $pdo->prepare("INSERT INTO property(name, num) VALUES(:name, :num)");

  for($i = 0; $i < count($name_list); $i++)
  {
    $query->bindValue(':name', $name_list[$i]);
    $query->bindValue(':num', $num_list[$i]);
    $query->execute();
  }

  $query = null;

  //
  // データ読み出し
  //
  $select = $pdo->query("SELECT * FROM property");

  while($row = $select->fetch(PDO::FETCH_ASSOC))
  {
    echo implode("|", $row) . "\n";    // 各カラムを"|"で連結
  }

  $select = null;

  //
  // DB切断
  //
  $pdo = null;
}
catch (PDOException $e)
{
  var_dump($e->getMessage());
}

2013/05/05更新

対応バージョン: 5.4.14

公式サイト

参考サイト

準備

あらかじめインストールしておくもの

Apache

関連資料・記事

以降はApache 2が/usr/local/apache2にインストールされているものとして説明する。

導入OS

Ubuntu 13.04

インストール

配布ファイル展開

% tar jxvf php-5.4.14.tar.bz2
% cd php-5.4.14

make,インストール

% ./configure <オプション>

オプションには様々なものがあるが、ここでは以下のものを指定する。

Apache2のapxs使用
--with-apxs2=/usr/local/apache2/bin/apxs
マルチバイト文字列サポート
--enable-mbstring
mcryptサポート
--with-mcrypt
GDサポート
--with-gd
% make
% sudo make install

インストール物 (man,infoは除く)

/usr/local/bin/pear
/usr/local/bin/peardev
/usr/local/bin/pecl
/usr/local/bin/phar -> /usr/local/bin/phar.phar
/usr/local/bin/phar.phar
/usr/local/bin/php
/usr/local/bin/php-config
/usr/local/bin/phpize

/usr/local/lib/php/*

/usr/local/include/php/*

/usr/local/etc/pear.conf

/usr/local/apache2/modules/libphp5.so

上記の他、Apacheの設定ファイル/usr/local/apache2/conf/httpd.confに以下の行が追加される。

LoadModule php5_module        modules/libphp5.so

(*) httpd.confにLoadModule行が一行もないと以下のエラーになるので「LoadModule dummy dummy.so」などとダミー行を作っておく。インストールが終わったらダミー行は削除してよい。

apxs:Error: At least one `LoadModule' directive already has to exist..

各種設定

PHPの設定

/usr/local/lib/php.iniにて設定を行う。

用途に応じて2種類の雛形が用意されているので適切なファイルをコピーして使用する。

php.ini-development

開発用(デバッグモードON、統計情報収集モードON等)

php.ini-production

本稼働用

% sudo cp php.ini-development /usr/local/lib/php.ini

ここでは各設定は割愛する。詳しくは以下を参照のこと。

php.iniディレクティブ - 日本PHPユーザ会

Apacheの設定

/usr/local/apache2/conf/httpd.confに以下の設定を追加する。

PHPコードをパースする拡張子の指定

例) 拡張子が.phpと.phtmlのファイルをPHPとしてパースする

<FilesMatch "\.ph(p|tml)$">
  SetHandler application/x-httpd-php
</FilesMatch>

設定を追加したらApacheを再起動する。

% sudo /etc/init.d/apache stop
% sudo /etc/init.d/apache start

動作確認

以下のようなHTMLを作成してブラウザで参照し、PHPのインストール状況が表示されれればOKである。ファイルの拡張子は上記で設定したいずれかにする。

<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="UTF-8">
  <title>TEST</title>
</head>

<body>
  <?php
    phpinfo();
  ?>
</body>

</html>