PHP Note
category: Start PHP! PHP4環境の起動と終了 MySQL3のインストール

PHP4環境の初期設定

created: 2002-12-15 | modified: 2008-03-16

今のところ各プログラムが動くようになっただけでけして使い勝手のよい開発環境とはいえません。いくらか設定に手を加えて使い勝手の良い勉強用開発環境にしたいと思います。(PHP5の初期設定は、Apache2 + PHP5 の初期設定 をどうぞ)

必須の設定ばかりではありません。必要に応じて変更したりしなかったりしてください。コードに付けている行番号は、編集を繰り返すうちに多少ずれますのであくまでも目安としてください。さあ、もう一息です。

もし、すでに借りているレンタルサーバがあるならその値にあわせておけば、レンタルサーバとの違いを意識せずに済みます。


Apache - httpd.conf の編集

Apache の初期設定ファイル 「httpd.conf」は、Apache をインストールしたフォルダの「conf」フォルダ下にあります。これをエディタで編集します。

httpd.conf では「#」以降行末までがコメントです。設定値を変える際元の値を上書きしてもかまいませんが、元の値は行ごとコメントアウトしておいて、新らしい行を書き加えておけば、不都合があった時すぐ元の状態に戻せます。

httpd.conf は Apacheの起動時に読み込まれます。編集した内容を反映させるには再起動が必要です。


DocumentRoot

ブラウザからアクセスできるベースフォルダ(ディレクトリ)を設定します。

ここで設定したフォルダ以下がブラウザでアクセス出来るようになります。例えば、D:/home/mysite/htdocs/index.php は http://localhost/index.php でアクセスできます。

デフォルトでは、C:/usr/local/Apache/htdocs のように Apacheをインストールしたフォルダ以下になっていますので、これを都合の良いフォルダ名に書き換えます。

300 | # symbolic links and aliases may be used to point to other locations.
301 | #
302 | #DocumentRoot "C:/usr/local/Apache/htdocs"
302 | DocumentRoot "D:/home/mysite/htdocs"
303 | 
304 | #
305 | # Each directory to which Apache has access, can be configured with respect

次の行以下には、DocumentRoot フォルダに対して様々な設定がすでにされてます。DocumentRoot を変更した場合は必ず以下の行も DocumentRoot と同じフォルダ名に書き換えます。

325 | # This should be changed to whatever you set DocumentRoot to.
326 | #
327 | #<Directory "C:/usr/local/Apache/htdocs">
328 | <Directory "D:/home/mysite/htdocs">
329 | 
330 | #
331 | # This may also be "None", "All", or any combination of "Indexes",


PHP - php.ini の編集

php.ini は PHP の初期設定ファイルで、PHP をインストールした際 C:\WINDOWS\php.ini に作りました。これをエディタで編集します。

php.ini では「;(セミコロン)」以降行末までがコメントです。設定値を変える際元の値を上書きしてもかまいませんが、元の値は行ごとコメントアウトしておいて、新らしい行を書き加えておけば、不都合があった時すぐ元の状態に戻せます。

php.ini も Apacheの起動時に読み込まれます。編集した内容を反映させるには再起動が必要です。


include_path

include() や require() で外部のファイルを読み込む際、ファイルを探す対象のパスです。指定したいパスを「;」で区切って指定します。書いてある順番にファイルを探します。

リクエストされたファイルのフォルダを示す「.」は書いておいたほうが良いでしょう。また、PEARライブラリを使う場合はPEARライブラリのフォルダ(ここでは c:\usr\local\php\PEAR )を書き加えます。この他は必要に応じてフォルダ名を書き足します。

410 | ; UNIX: "/path1:/path2"
411 | ;include_path = ".:/php/includes"
412 | ;
413 | ; Windows: "\path1;\path2"
414 | ;include_path = ".;c:\php\includes"
415 | include_path = ".;d:\home\lib;c:\usr\local\php\PEAR"

私の場合は、「 . 」リクエストされたファイルのフォルダ、「 d:\home\lib 」自作ライブラリのフォルダ、「 c:\usr\local\php\PEAR 」PEARライブラリのフォルダの順番でファイルを探すよう指定しています。


extension_dir - 必須設定

PHP に機能を追加する拡張モジュールのフォルダを指定します。Windows版PHPはDLLで提供されており、PHP をインストールしたフォルダ下の「extensions」にありますので、このフォルダ名を extension_dir に指定します。

427 | ; Directory in which the loadable extensions (modules) reside.
428 | ;extension_dir = "./"
429 | extension_dir = "c:\usr\local\php\extensions"
430 |


必要な拡張モジュールを有効にする

文字エンコーディングライブラリなど、PHPの機能の一部は拡張モジュールとして提供されています。php.ini には「 extension=php_xxxx.dll 」で指定してありますが、通常「;(セミコロン)」でコメントアウトしていますのでこのコメントアウトを削除して、必要な拡張モジュールを有効にします。

ただしここでは拡張モジュールを読む込むよう指定しているだけで、拡張モジュールによっては別途ライブラリを入手する必要があったり、依存関係のある拡張モジュールも一緒に読み込む必要がある場合があります。こうした情報は拡張モジュール毎にマニュアルで確認して下さい。

554 | ;extension=php_java.dll
555 | ;extension=php_ldap.dll
556 | extension=php_mbstring.dll
557 | ;extension=php_mcrypt.dll
558 | ;extension=php_mhash.dll

ここでは日本語の文字を扱えるよう、マルチバイト拡張モジュール( mbstring )を有効にしています。mbstring は、文字エンコーディングを検出したり、Shift-JIS のテキストを を EUC-JP に変換したり、半角カナを全角カナに変換したりといった機能を提供する拡張モジュールで、まあ使わない事は無いと思いますので必須の設定と思って頂いてかまいません。

mbstring 拡張モジュールは、PHP4 に標準で含まれていますのでコメントアウトを削除するだけで使えるようになります。


session.save_path

セッションはアクセスをまたいで値を保持する仕組みで、クライアント毎にカスタマイズしたサービスを提供するのに用います。セッションの値はサーバーのディレクトリにファイルとして保存しますので、この場所を session.save_path で指定します。

session.save_path はスクリプトでも指定できますが、デフォルトの保存場所は指定しておきましょう。任意のディレクトリを作ってパス指定すればよいわけですが、Windowsではきちんとドライブレータから指定しないと実行時にエラーになります。

824 | ; NOTE 2: See the section on garbage collection below if you choose to
825 | ;         use subdirectories for session storage
826 | ;session.save_path = /tmp
827 | session.save_path = "C:\tmp"
828 |


mbstring - 日本語の環境設定

PHP 内部の文字エンコーディング、ブラウザに向け出力する文字エンコーディング、フォームなど外部から来るテキストの文字エンコーディング、また OS や連携するアプリケーションの文字文字エンコーディングなどを考慮して以下の値を設定します。

mbstring.http_input 以外の設定は PHP スクリプトからも設定できます。PHP スクリプトの値で php.ini の値が上書きされますので、PHPスクリプト毎に出力エンコーディングを変えるといったことも出来ます。
php.ini での mbstring の設定は 「標準設定」程度に考えてよいと思います。

俗に「文字化け」と呼んでいる現象は、間違った文字エンコーディングの検出や変換によるものがほとんどです。全てをひとつの文字エンコーディングに統一できればこれが原因の文字化けはおこりませんが、OSやブラウザ・アプリケーションソフト・データフォーマット毎に用いられている文字エンコーディングは様々でとても無理な話です。

でも、プログラミングによって文字化けの可能性を減らすことは可能です。それは文字エンコーディング変換を1回でも減らすことです。PHPプログラミングでは、送信フォームなど外部から来る値は実行時でなければわからないのでしかたありませんが、これ以外の文字エンコーディングはあらかじめわかりますし設定出来るものがほとんどです。

「外部から来た値を内部エンコーディングに変換する」これで1回。あとの、PHPスクリプトファイルやデータベースなどを全て内部エンコーディングに統一すれば、文字化けの可能性をぐっと減らせます。

もしデータベースの文字エンコーディングが EUC-JP に決まっているなら全てを EUC-JP に統一する。XMLをデータとして用いるなら UTF-8 に統一する。このように「データの文字エンコーディング」を基準に考えると PHP で設定する文字エンコーディングはおのずと決まってきます。

また、マニュアルの PHP の文字エンコーディングに関する要件 には、Windows でなじみの深い Shift_JIS は PHP で動作しないと思われる文字エンコーディングの例に含まれており、実際 Shift_JIS で特定の文字が化けたり誤検出したりといった現象が多いと感じます。やってやれないことはありませんが PHPスクリプトで Shift_JIS 固有の対策を施すのは結構な手間です。

文字化けを減らすには、PHPやデータベースの文字エンコーディングを EUC-JPUTF-8 に統一するのが得策だと思います。


以下は「 UTF-8 」で統一を図ってみた設定の一例です。これによって、PHPスクリプトファイルやブラウザとの入出力は全て UTF-8 で扱うことになります。


mbstring.language は mbstringライブラリが基準とする言語を指定するものです。はじめから Japanese になってますのでここはコメントアウトの「;」を削除するだけです。

1026 | [mbstring]
1027 | ; language for internal character representation.
1028 | mbstring.language = Japanese
1029 | 

この後がよくよく考える必要がある、内部エンコーディング・入力エンコーディング・出力エンコーディングの設定です。

mbstring.internal_encoding は PHP内部とPHPスクリプトファイルの文字エンコーディングを指定します。

1030 | ; internal/script encoding.
1031 | ; Some encoding cannot work as internal encoding.
1032 | ; (e.g. SJIS, BIG5, ISO-2022-*)
1033 | ;mbstring.internal_encoding = EUC-JP
1034 | mbstring.internal_encoding = UTF-8
1035 | 

mbstring.http_input はフォームのテキストなど PHP の外部から来る文字エンコーディングを指定します。

たいていのブラウザ(クライアント)は、Shift_JIS のフォームからは Shift_JIS で、EUC-JP のフォームなら EUC-JP で文字をサーバに送信してくれます。でも決まり事ではないので全てのクライアントが必ずそうだとは限りません。また意地悪でこちらが想定外の文字エンコーディングで送信してくるかもしれません。クライアント依存だけに実際テキストが来てみないとわからないのが現状です。

なので mbstring.http_input には、「 auto(自動検出)」か「pass(何もしない)」を設定し、以降の設定か PHP スクリプトで適切に文字エンコーディング変換してあげるのが得策です。

1036 | ; http input encoding.
1037 | mbstring.http_input = auto
1038 | ;mbstring.http_input = pass
1039 | 

mbstring.http_output は PHP がブラウザに向けて出力する文字エンコーディングを指定します。

この値が出力するHTMLの文字エンコーディングとなるので、METAタグのでキャラクターセット指定もこれにあわせて content="text/html;charset=utf-8" となります。

この値が mbstring.internal_encoding と異なる場合は出力時に変換が必要となるので、output_handleroutput_handler を設定する必要があります。

1040 | ; http output encoding. mb_output_handler must be
1041 | ; registered as output buffer to function
1042 | ;mbstring.http_output = SJIS
1043 | mbstring.http_output = UTF-8
1044 | 

mbstring.encoding_translation は 入力エンコーディングを内部エンコーディングに自動変換すかどうかを設定します。mbstring.http_input = auto を設定した場合は On に設定します。

1045 | ; enable automatic encoding translation accoding to 
1046 | ; mbstring.internal_encoding setting. Input chars are
1047 | ; converted to internal encoding by setting this to On.
1048 | ; Note: Do _not_ use automatic encoding translation for
1049 | ; portable libs/applications.
1050 | ;mbstring.encoding_translation = Off
1051 | mbstring.encoding_translation = On
1052 | 

mbstring.detect_order は 自動検出(auto)を指定した時の検出順を指定します。
検出させたい順番に「,」で区切って文字エンコーディングの値を指定します。

1053 | ; automatic encoding detection order.
1054 | ; auto means 
1055 | ;mbstring.detect_order = auto
1055 | mbstring.detect_order = ASCII, UTF-8,EUC-JP, eucJP-win, SJIS, sjis-win
1056 | 

mbstring.substitute_character は、文字エンコーディング変換の際、無効な文字を置き換える文字を指定します。代替文字や none を指定すると元のデータが変わることになりますのでここはコメントアウトのままにして、必要な時に PHP スクリプト側で対処する方が得策です。

1053 | ; substitute_character used when character cannot be converted
1054 | ; one from another
1055 | ;mbstring.substitute_character = none;
1056 | 

mbstring.func_overload は、mail関数、文字列関数、正規表現関数が呼ばれた時に、暗黙のうちにマルチバイト対応関数で処理するかを指定します。

実際のところ、マルチバイト処理を必要とするところは設計時にわかります。頻繁に使う文字列関数や正規表現関数全てに対して余分な負荷をかけることになりますし、混乱を招く可能性も高くなるので、ここは 「 0 (一切置き換えない)」 として、スクリプト側で使い分けることをオススメします。

1057 | ; overload(replace) single byte functions by mbstring functions.
1058 | ; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
1059 | ; etc. Possible values are 0,1,2,4 or combination of them.
1060 | ; For example, 7 for overload everything.
1061 | ; 0: No overload
1062 | ; 1: Overload mail() function
1063 | ; 2: Overload str*() functions
1064 | ; 4: Overload ereg*() functions
1065 | ;mbstring.func_overload = 0
1066 | mbstring.func_overload = 0

output_handler は、PHPの出力に対して後処理を行う出力ハンドラを指定します。mbstring.http_outputmbstring.internal_encoding とは異なる文字エンコーディングを指定した場合は内部エンコーディングから出力エンコーディングに変換が必要になりますので、ここに mb_output_handler を指定します。

スクリプトでも ob_start と mb_covert_encoding を使って出力エンコーディング変換はできますので、必要なければコメントアウトのままかまいません。

 96 | ; You can redirect all of the output of your scripts to a function.  For
 97 | ; example, if you set output_handler to "mb_output_handler", character
 98 | ; encoding will be transparently converted to the specified encoding.
 99 | ; Setting any output handler automatically turns on output buffering.
100 | ; Note: People who wrote portable scripts should not depend on this ini
101 | ;       directive. Instead, explicitly set the output handler using ob_start().
102 | ;       Using this ini directive may cause problems unless you know what script 
103 | ;       is doing.
104 | ; Note: You cannot use both "mb_output_handler" with "ob_iconv_handler"
105 | ;       and you cannot use both "ob_gzhandler" and "zlib.output_compression". 
106 | ;output_handler =
107 | ;output_handler = mb_output_handler


short_open_tag - 推薦設定

PHP のショートタグ( <? )を有効にするかどうかを指定します。

値を表示する時 <?=$string ?> のようにシンプルに書けて良いのですが、XMLと混在させると <?xml version="1.0" encoding="utf-8"?> とかぶるので、この値は「 Off 」を推薦します。

70 | ; Allow the <? tag.  Otherwise, only <?php and <script> tags are recognized.  
71 | ; NOTE: Using short tags should be avoided when developing applications or
72 | ; libraries that are meant for redistribution, or deployment on PHP
73 | ; servers which are not under your control, because short tags may not
74 | ; be supported on the target server. For portable, redistributable code,
75 | ; be sure not to use short tags.
76 | ;short_open_tag = On
77 | short_open_tag = Off
78 |


output_buffering

output_buffering は echo などの出力を即座に出力するか一旦バッファに貯めてから出力するかを指定します。この値には On と Off の他バッファリングするバイト数を指定することが出来ます。

一旦出力した物は後から取り消せませんが、バッファに貯めておけば後から加工や削除が可能になります。また COOKIE や SESSION を含め header はあらゆる出力の前に送信する必要があるため、何か出力した後で header を出力したい場合はこのバッファリングが有効です。

スクリプトでも ob_start を使ってバッファリング出来ますし、スクリプトの実行順や HTTP の仕組みを意識できるので、良くわからなければ Off のままが良いと思います。

87 | ; Output buffering allows you to send header lines (including cookies) even
88 | ; after you send body content, at the price of slowing PHP's output layer a
89 | ; bit.  You can enable output buffering during runtime by calling the output
90 | ; buffering functions.  You can also enable output buffering for all files by
91 | ; setting this directive to On.  If you wish to limit the size of the buffer
92 | ; to a certain size - you can use a maximum number of bytes instead of 'On', as
93 | ; a value for this directive (e.g., output_buffering=4096).
94 | ;output_buffering = Off
95 |


magic_quotes_gpc - 推薦設定

クライアントから得られる値(GET・POST・COOKIE)に含まれる PHP で特殊な意味を持つ文字を、自動的にエスケープするかどうかを指定します。

入力値が Shift_JIS の場合は 「表」や「ソ」に余分な「\」が付くので取り除く処理があらためて必要になります。またユーザからの入力値は可能な限りそのまま受け入れ必要な時に最小限のエスケープをおこなう方が混乱を招かずに済みますので、この値は「 Off 」を推薦します。

381 | ; Magic quotes for incoming GET/POST/Cookie data.
382 | ;magic_quotes_gpc = On
383 | magic_quotes_gpc = Off
384 |


ここに挙げたのは代表的なものだけです。全ては PHPマニュアルの php.ini ディレクティブ にありますので、一度目を通しておくと良いと思います。



さて最後は、各プログラムの起動と終了を一括しておこなえるようバッチファイルを作ります。



category: Start PHP! PHP4環境の起動と終了 MySQL3のインストール
PHP Note
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新したNote
よく読まれている記事
Yahoo Search

最近更新された掲示板トピックス
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑