2005-06-04

マルチバイト対応のPHP5を使う

前章で説明したように「Windows版のインストール」でダウンロードしたWindowsバイナリがマルチバイト対応ではなかったので、PHPの内部コードをShift_JISにする事ができませんでした。内部コードをShift_JISにする為には、--enable-zend-multibyteでコンパイルされたWindowsバイナリを入手する必要があります。

マルチバイト対応のPHP5の入手

執筆の時点(2005/04)で、mbstring組み込み済みのマルチバイト対応版PHP5が以下のサイトで公開されています。

http://www.geocities.jp/rui_hirokawa/php/win/

このサイトから以下のファイルをダウンロードします。

php5.0.4-mb10.lzh

以下ではここから入手したPHP5をインストールします。

マルチバイト対応のPHP5のインストール

php5.0.4-mb10.lzhを解凍し、php5.0.4-mb10.exeをダブルクリックします。

php5m01.gif

以下、インストーラの指示に従います。ここでは、提供される全てのコンポーネントを以下のフォルダにインストールします。

C:\php5mb

インストールの要領は「Windows版のインストール」と同じです。

PHPコアDLL(php5ts.dll)はインストールフォルダに設置し、他のフォルダに移動やコピーはしません。その代わりに環境変数PATHを次のように変更します。環境変数の変更は、マイコンピュータを右クリックして[プロパティ]表示を行い、[詳細表示]タブの[環境変数]ボタンから行う事ができます(WindowsXPの場合)。

Path=C:\WINDOWS\system32;C:\WINDOWS; ・・・・・・;C:\php5mb

php.iniは、php.ini-distをコピーして C:\php5mb に設置します。

インストールの確認

コマンドプロンプトからCLI版のPHP(phpコマンド)を実行してインストールの確認を行います。

C:\>php -r "phpinfo();" | more
phpinfo()
PHP Version => 5.0.4

System => Windows NT ZEUS 5.1 build 2600
Build Date => Apr  2 2005 15:11:39
Configure Command => cscript /nologo configure.js  "--enable-mbstring" "--enable
-mbregex" "--enable-zend-multibyte" "--enable-snapshot-build" "--enable-apache2h
andler" "--with-apache-includes=c:/apache/include" "--with-apache-libs=c:/apache
/lib"
Server API => Command Line Interface
Virtual Directory Support => enabled
Configuration File (php.ini) Path => C:\php5mb\php.ini
PHP API => 20031224
PHP Extension => 20041030
Zend Extension => 220040412
Debug Build => no
Thread Safety => enabled
IPv6 Support => disabled
Registered PHP Streams => php, file, http, ftp, compress.zlib
Registered Stream Socket Transports => tcp, udp

This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.0.4-dev, Copyright (c) 1998-2004 Zend Technologies
-- More  --

上の実行結果の以下の部分に注目して下さい。

Configure Command => cscript /nologo configure.js  "--enable-mbstring" "--enable
-mbregex" "--enable-zend-multibyte" "--enable-snapshot-build" "--enable-apache2h
andler" "--with-apache-includes=c:/apache/include" "--with-apache-libs=c:/apache
/lib"

[Configure Command]にはWindowsバイナリのコンパイルオプションが表示されています。--enable-mbstringはmbstringモジュールが静的に組み込まれている事を示し、--enable-zend-multibyteはPHPがマルチバイト対応である事を示しています。 また、phpコマンドが参照しているphp.iniの場所も確認できます。

Configuration File (php.ini) Path => C:\php5mb\php.ini

Apache2の設定

以下にhttpd.confの変更部分を示します。基本的にはPHP5のApache2拡張モジュール(mod_php5)を使用しますが、特定のURLパス( http://localhost/cgi/ )への要求に対してはCGIとして使かえるようにします。詳細は「Apache2の設定」を参照して下さい。

Apache2拡張モジュールとしてのPHP5の設置

### Section 1: Global Environment
  ・
  ・
LoadModule php5_module "C:/php5mb/php5apache2.dll"
#
# Configuring PHP5/Server-Module
#
<IfModule mod_php5.c>
AddType application/x-httpd-php .php
PHPIniDir "C:/php5mb"
</IfModule>

CGIとしてのPHP5の設置

# PHP5/CGI
<Directory "C:/php5mb">
  AllowOverride None
  Options None
  Order Allow,Deny
  Allow from localhost
  Allow from 192.168.11.0/24
</Directory>
ScriptAlias /php5mb/ "C:/php5mb/"

<Directory "D:/WWWRoot/cgi">
  AddType application/x-httpd-php5mb-cgi .php
  Action  application/x-httpd-php5mb-cgi "/php5mb/php-cgi.exe"
</Directory>

設定の確認

簡単なPHPスクリプトを作成し設定の確認を行います。

info.php:

<?php phpinfo() ?>

上のPHPスクリプトを下記の2箇所に作成します。(本編でのApache2ドキュメントルートはD:\WWWRootです)

D:\WWWRoot   (mod_php5用)
D:\WWWRoot\cgi (PHP/CGI 用)

両方のPHPスクリプトをブラウザから実行して違いを確認します。

http://localhost/info.php   (mod_php5の場合)
http://localhost/cgi/info.php (PHP/CGI の場合)

php.iniの編集

 以下にphp.iniを示します。基本的な部分は「php.iniの編集」と同じですが、以下の点が異なります。

  • PHPのインストールディレクトリ(C:\php5mb)が違います
  • mbstringモジュールを動的に組み込む必要がありません
  • 内部文字セット及びその他の文字セットをShift-JISに統一します

[PHP]言語オプション

output_buffering = Off
;output_handler =

[PHP]エラー処理

display_errors = On
log_errors = On
error_log = "C:/php5mb/log/error.log"

※PHP5のインストールディレクトリ(C:\php5mb)下にlogフォルダを作成する必要があります。

[PHP]データ処理

magic_quotes_gpc = Off
default_mimetype = "text/html"
default_charset = "Shift_JIS"

[PHP]パスとディレクトリ

include_path = ".;C:/php5mb/includes"
extension_dir = "C:/php5mb/ext"

[PHP]動的エクステンション

;extension=php_mbstring.dll

※mbstringモジュールを動的に組み込む必要がありません。指定するとエラーになります。

文字コードの設定

[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = SJIS
mbstring.script_encoding = SJIS
mbstring.http_input  = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none

※mbstring.script_encoding =SJISの指定が必要です。

設定の確認

本章の目的である「内部コードをShift_JISにする事」ができているか否かを「php.iniの編集;文字コードの設定」と同じ要領で確認します。

kanji-sjis.php

<?php
$kanji = "可能";
echo "${kanji}(", bin2hex($kanji), ")";
?>

このスクリプトはShift-JISで保存されています。ブラウザからを実行して以下のような表示になればOKです。

可能(89c2945c)


最終更新のRSS Last-modified: Wed, 29 Jun 2005 13:04:52 JST (4287d)