Windows版PHPのインストール、php.ini、mbstringなどの設定
PHPはウェブサイトの制作に使用するのが一般的だが、PC上でテキストを処理するなどツールとして非常に有用な言語。 私は様々なプログラムを自作して活用している。
ここではWindows版PHPのインストールや設定についてまとめた。 対象の環境はWindows 11、PHP 8。
まずPHPの公式サイト https://windows.php.net/download/ から必要なものをダウンロードする。
ここでは PHP 8.2 / VS16 x64 Non Thread Safe / Zip 版をダウンロードして話を進める。 ダウンロード後、適当なフォルダにてZIPファイルを展開する。
デフォルトでは C:\php や C:\Windows にインストールすることを想定しているようだが、ここでは以下の場所にインストールして話を進める。
D:\test\php-8.2.14-nts-Win32-vs16-x64
環境変数、PATHの設定
- スタートメニューを右クリックして[システム]、または[⚙設定]→[システム]→[詳細情報]と進み、その画面上にある[システムの詳細設定]をクリックする。
- 表示されたウィンドウの[環境変数]ボタンをクリックする。
- 環境変数は「ユーザー環境変数」と「システム環境変数」があるが、ここでは「ユーザー環境変数」に設定する。
- 「ユーザー環境変数」の一覧に「Path」がある場合は「Path」を選択した後[編集]ボタンをクリックし、次のウィンドウで[新規]ボタンをクリックし、パスを入力する。
「Path」がない場合は[新規]ボタンをクリックして、変数名に「Path」、変数値にパスを入力する。
ここでは上述のフォルダにパスを通したいので以下の値(パス)を入力した。
D:\test\php-8.2.14-nts-Win32-vs16-x64
- 環境変数設定後、コマンドプロンプトで以下のコマンドを実行してPHPのバージョンが表示されればパスは通っている。
C:\Users\ユーザー名>php -v
以上で一応PHPのコードが実行できる状態になる。
php.ini の設定
デフォルトではマルチバイト文字列(mbstring)が使えない状態になっている。 つまり、mb_ereg_replace()、mb_internal_encoding()、mb_regex_encoding() といった mb で始まる関数を実行してもエラーになる。 このままだと日本語を扱うのに不便なので、以下の手順で mbstring を有効にする。
- 展開したフォルダの中に php.ini-development と php.ini-production があるが、公式では php.ini-production をオススメしているので、ここではこれを使う。
- php.ini-production をコピーして php.ini にリネームし、同じフォルダに置く。
- php.ini をテキストエディタで開き、「Dynamic Extensions」のセクションに記されている以下の箇所のコメント(; セミコロン)を外して有効にする。
また2021年現在、https(SSL)を使用したサイトが一般的で、そういったサイトから file_get_contents() 関数などを使用してデータを取得する際、opensslも有効にしておかないとエラーが発生する。
extension_dir = "ext" extension=mbstring extension=openssl
- その他、使用可能なメモリー、タイムゾーンなども設定しておくとよい。
これらのせいで警告やエラーが出る場合がある。
memory_limit = 512M date.timezone = Asia/Tokyo
デフォルトのメモリーサイズは128Mになっているので、足りない場合に必要に応じて増やす。 PHPのコード中に以下のように書いてもメモリーサイズを変更できる。ini_set('memory_limit', '512M');
コマンドプロンプトで以下のコマンドを実行して internal_encoding などが表示されていればマルチバイト文字列が使える状態になっている。
C:\Users\ユーザー名>php -r print_r(mb_get_info());
Array
(
[internal_encoding] => UTF-8
[http_output] => UTF-8
[http_output_conv_mimetypes] => ^(text/|application/xhtml\+xml)
[func_overload] => 0
[func_overload_list] => no overload
[mail_charset] => UTF-8
[mail_header_encoding] => BASE64
[mail_body_encoding] => BASE64
[illegal_chars] => 0
[encoding_translation] => Off
[language] => neutral
[detect_order] => Array
(
[0] => ASCII
[1] => UTF-8
)
[substitute_character] => 63
[strict_detection] => Off
)
ロードされている「Dynamic Extensions(拡張モジュール)」関連は以下のコマンドで確認できる。
C:\Users\ユーザー名>php -r print_r(get_loaded_extensions());
Array
(
[0] => Core
[1] => bcmath
[2] => calendar
[3] => ctype
[4] => date
[5] => filter
[6] => hash
[7] => iconv
[8] => json
[9] => SPL
[10] => pcre
[11] => readline
[12] => Reflection
[13] => session
[14] => standard
[15] => mysqlnd
[16] => tokenizer
[17] => zip
[18] => zlib
[19] => libxml
[20] => dom
[21] => PDO
[22] => openssl
[23] => SimpleXML
[24] => xml
[25] => xmlreader
[26] => xmlwriter
[27] => mbstring
[28] => Phar
)
デフォルトのエンコーディングは UTF-8 で、php.ini にて変更できるが、PHPコード内で mb_internal_encoding() 関数などを使って設定もできる。 また、エラー表示も php.ini にて変更できるが、PHPコード内で error_reporting() を使って設定もできる。 この辺りは好みで設定する。
php.ini の読み込み確認
php.ini の設定が反映されていない場合は、php.ini が読み込まれていない可能性がある。 とりあえずコマンドプロンプトで以下のコマンドを入力して確認する。
C:\Users\ユーザー名>php --ini Configuration File (php.ini) Path: Loaded Configuration File: (none) Scan for additional .ini files in: (none) Additional .ini files parsed: (none)
もし、Loaded Configuration File: が (none) だと読み込まれていない。 php.ini を自分で指定して読み込ませるにはコマンドプロンプトで以下のコマンドを入力する。
C:\Users\ユーザー名>php -c D:\test\php-8.2.14-nts-Win32-vs16-x64\php.ini
コマンドが入力できない状態になるが、[Ctrl]+[C]で強制的に終了させる。 その後、再度コマンドプロンプトで上記のコマンドを入力して確認する。
C:\Users\ユーザー名>php --ini Configuration File (php.ini) Path: Loaded Configuration File: D:\test\php-8.2.14-nts-Win32-vs16-x64\php.ini Scan for additional .ini files in: (none) Additional .ini files parsed: (none)
Windows を再起動してもこの設定は有効になっている。 ちなみにコマンドのヘルプ一覧は php -h で確認できる。
C:\Users\ユーザー名>php -h