php.iniファイルの確認と修正
php.iniファイルに記載されているデフォルトの内容を確認し、また修正を一部行います。php.iniファイルをテキストエディタで開いて下さい。ファイルの場所は前のページで記載した通り「(XAMPPインストールディレクトリ)¥php¥php.ini」です。
ファイルの修正も一部行いますので心配であれば修正前のファイルをコピーしてバックアップを取っておけば安心です。ではファイルの内容を確認していきます。
セーフモード
168行目を見てください。
safe_mode = Off
PHPではセーフモードと呼ばれる設定があります。セーフモードは共有サーバなどの環境でPHPを動作させる時にセキュリティを高めるために使用されるものです。セーフモードをオンにすることでいくつかの関数の利用に制限がかかります。デフォルトではOffになっていますが、セーフモードをオンにしなければならない時は「Off」を「On」に変更して下さい。今回はデフォルトのまま「Off」にしておきます。
マジッククオート
414行目を見てください。
; Magic quotes for incoming GET/POST/Cookie data. magic_quotes_gpc = On ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. magic_quotes_runtime = Off ; Use Sybase-style magic quotes (escape ' with '' instead of ¥'). magic_quotes_sybase = Off
マジッククオートとは自動的にエスケープ処理を行うかどうかの設定です。有効にすることでエスケープが必要な時に自動でエスケープ処理を行ってくれますが、機能的に問題がある部分があり自動でエスケープされると問題となることがあります。その為、マジッククオートは無効にしておき、エスケープ処理はプログラムの中で明示的に記述することが推奨されています。
そこで次のように設定を変更して下さい。
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ' with '' instead of ¥').
magic_quotes_sybase = Off
インクルードパス
447行目を見てください。
include_path = ".;D:¥xampp¥php¥pear¥"
インクルードパスとはPHPが記述されたファイルから外部のファイルをインクルードする時に、インクルードするファイルを設置するディレクトリを設定します。ここで設定されたディレクトリを基点として外部のファイルを検索します。
インクルードパスには複数のパスを記述でき、セミコロン(;)で区切って続けて記述できます。現在の設定ではではカレントディレクトリを表す「.」と「D:¥xampp¥php¥pear¥」の2つのパスが設定されています。
拡張モジュール
461行目を見てください。
extension_dir = "D:¥xampp¥php¥ext¥"
拡張モジュールのディレクトリにはPHPの起動時に読み込まれる拡張モジュールを設置するディレクトリを設定します。現在の設定では「D:¥xampp¥php¥ext¥」となっています。実際にこのディレクトリを見てみます。
多くのモジュールが配置されていることが確認できます。
そして実際にどのモジュールを読み込むのかを545行目以降で指定します。
;extension=php_filter.dll ;extension=php_fribidi.dll extension=php_gd2.dll extension=php_gettext.dll
読み込むモジュールを「extension=モジュール名」と記述します。行の先頭に「;」が付いている行はコメントとして扱われますので「;」が付いているものは現在有効になっていないものです。今後必要になったモジュールを読み込むには先頭の「;」を削除することでモジュールが読み込まれます。
mbstring
日本語などのマルチバイト文字を扱うにはmbstringの設定が必要です。まずはmbstring用の拡張モジュールを有効にします。619行目を見てください。
extension=php_mbstring.dll
デフォルトの設定で拡張モジュールを読み込むようになっています。もし先頭に「;」が付いていた場合は削除して下さい。
続いて1170行目を見てください。
[mbstring] ; language for internal character representation. ;mbstring.language = Japanese ; internal/script encoding. ; Some encoding cannot work as internal encoding. ; (e.g. SJIS, BIG5, ISO-2022-*) ;mbstring.internal_encoding = EUC-JP ; http input encoding. ;mbstring.http_input = auto ; http output encoding. mb_output_handler must be ; registered as output buffer to function ;mbstring.http_output = SJIS ; enable automatic encoding translation according to ; mbstring.internal_encoding setting. Input chars are ; converted to internal encoding by setting this to On. ; Note: Do _not_ use automatic encoding translation for ; portable libs/applications. ;mbstring.encoding_translation = Off ; automatic encoding detection order. ; auto means ;mbstring.detect_order = auto ; substitute_character used when character cannot be converted ; one from another ;mbstring.substitute_character = none; ; overload(replace) single byte functions by mbstring functions. ; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), ; etc. Possible values are 0,1,2,4 or combination of them. ; For example, 7 for overload everything. ; 0: No overload ; 1: Overload mail() function ; 2: Overload str*() functions ; 4: Overload ereg*() functions ;mbstring.func_overload = 0
各項目の先頭の「;」を削除した上で順に設定を変更していきます。
「mbstring.internal_encoding」はマルチバイト文字列関数(mbstring)のデフォルトエンコードとなります。変換元の文字コードが指定されなかった場合、ここで指定した文字コードが使用されます。基本的には文字コードを指定しますので設定は不要ですが、ここでは基本の文字コードとして使用予定のUTF-8を指定しておきます。
[mbstring] ; language for internal character representation. mbstring.language = Japanese ; internal/script encoding. ; Some encoding cannot work as internal encoding. ; (e.g. SJIS, BIG5, ISO-2022-*) mbstring.internal_encoding = UTF-8
「mbstring.http_input」と「mbstring.http_output」はHTTP通信の時のインプットとアウトプットの文字コード変換に関するパラメータです。自動で変換されるとトラブルの元のようなので変換しないように「mbstring.encoding_translation」は「Off」を指定しておきます。
; http input encoding. mbstring.http_input = pass ; http output encoding. mb_output_handler must be ; registered as output buffer to function mbstring.http_output = pass ; enable automatic encoding translation according to ; mbstring.internal_encoding setting. Input chars are ; converted to internal encoding by setting this to On. ; Note: Do _not_ use automatic encoding translation for ; portable libs/applications. mbstring.encoding_translation = Off
「mbstring.detect_order」は文字コードの自動判別を行う時にどの文字コードから順に確認していくのかを指定します。「auto」に設定するとどの文字コードから判別するか分かりませんので明示的に指定しておきます。
; automatic encoding detection order.
; auto means
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
「mbstring.substitute_character」は無効な文字があった場合に代わりに表示する文字を指定します。今回はデフォルトの値のまま無効な文字は何も表示しない設定の「none」としておきます。
; substitute_character used when character cannot be converted
; one from another
mbstring.substitute_character = none
「mbstring.func_overload」はシングルバイト対応の関数をマルチバイト対応の関数でオーバーロードするどうかの設定です。自動でオーバーロードされると予期せぬ不具合が発生することもありますのでオーバーロードしない「0」としておきます。
; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
mbstring.func_overload = 0
必要最小限の設定変更は以上となります。PHPからMySQLなどのデータベースを使用する場合はMySQLに関するモジュールの読み込みや設定などが必要となりますが、それは別のページで確認します。
なお変更したphp.iniを有効とするにはApacheを再起動する必要があります。再起動後にphpinfo()の内容を確認すると、mbstringに関する内容が次のように表示されており設定変更が反映されていることが確認できます。
( Written by T.buzz.Ikura+ )