環境の構築:PHP のセットアップ
PHP とは
PHP (PHP:Hypertext Preprocessor) は、 主に、WEB アプリを作成するのに用いられるスクリプト言語です。 ・コンパイルが必要なく、そのまま動作させられる ・C 言語に似ていて馴染みやすい ・オブジェクト指向のプログラミングも可能 といった特徴を持っていて、 WEB アプリの初心者に向いていると思います。 本稿の主役の一つです。前準備
PHP を動かすには、 「Microsoft Visual C++ 再頒布可能パッケージ Visual Studio 2015-2022」が必要です。 Apahe をインストールする際に導入しているので、ここでの操作は不要です。PHP のインストール
PHP 自体は、ココで入手できます。 本稿では、8.4 系の最新版を使用します。 # このドキュメントを書いている時点では、8.4.14 です。 画面上部の選択肢は、 I want to use PHP for Web Development I work with Windows ZIP Downloads, and use OS default version にします。 PHP のモジュールが何種類も用意されていますが、 本稿で使用するのは、 「VS17 x86 Thread Safe」版です。 その中の Zip を選びます。 # 種類は Apache に合わせています。 # Apache Win64 を選択されている場合は、本稿では触れませんので、別途ご対応ください。 落とした zip を c:\php84 に解凍します。 # c:\php84\php.exe になるようにします。 # フォルダ名を php(バージョン) にするのは私の習慣で、 # この後もその前提で説明するのでご了承ください。 c:\php84 に PATH を通しておきます。 # Windows11 の場合は、 # 「設定」「システム」「バージョン情報」「システムの詳細設定」「環境変数」 # 「システム環境変数」の一覧から「Path」を選んで「新規」 # 「c:\php84」を追記します。 # 「OK」、「OK」、「OK」で閉じます。 # # ただし、 # 他バージョンの PHP と複数で共存させる場合は、 # 環境変数には入れずに、各PHPを起動するためのバッチファイルを用意するなど、 # 各位にてご対応ください。設定方法
本稿用に、PHP の設定を変更します。 c:\php84\php.ini-development をファイル・エクスプローラ上でコピーし c:\php84\php.ini として貼り付けます。 c:\php84\php.ini を編集します。 ・以下にある = の左側の文字を見つけ、 設定を = の右側の文字列に置き換えます。 # 記載個所はバージョンによって異なり、 # 以下の順番だとは限りません。 ・元々、コメントアウトされている場合は、 そのコメントを外し、設定が有効になるようにします。 右側の値を変えているものもあるので、間違わないように変更してください。 error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING default_charset = "UTF-8" include_path = ".;c:\php84\includes" extension_dir = "ext" extension=php_mbstring extension=pdo_pgsql date.timezone = Asia/Tokyo mbstring.language = Japanese 以上です。 コメントアウトを外すのを忘れていませんか? php.ini を保存します。 次に、 c:\Apache24\conf\httpd.conf をエディタで開き、 ファイルの末尾にLoadModule php_module "c:/php84/php8apache2_4.dll" <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> # configure the path to php.ini PHPIniDir "C:/php84"を追加します。 設定は、以上です。動作確認
では、動作を試しましょう。 エディタで新規ファイルを開き、 <?php phpinfo(); ?> とだけ書いたファイル phpinfo.php を作って、 c:\Apache24\htdocs にセーブします。 Apache アイコンで Start します。 # 既にスタートしている場合は、Restart です。 http://localhost:8080/phpinfo.phpをブラウザで開いてみます。 PHP の各種設定が表で表示されます。 表示されない場合は、下記の
を参照してください。 mbstring と pdo_pgsql の項目があれば、とりあえず OK です。 詳細な動作確認は、ずっと後になります。
インターネットの設定によっては、 phpinfo.php の内容が表示されない (= ずーっと接続中のままだったり、エラーで止まったりする) 場合は、下記の操作をしてください。 「設定」「ネットワークとインターネット」「ネットワークの詳細設定」「インターネットオプション」 「セキュリティ」タブ、「信頼済みサイト」「サイト」 「この Web サイトをゾーンに追加する」欄に、 127.0.0.1 と入力し、[追加] ボタンを押します。 [閉じる] [OK] でオプションを閉じます。 また、 表示できた phpinfo.php の一覧の中に、 mbstring と pdo_pgsql の項目が見当たらなかったら、 php.ini の extension=php_mbstring extension=pdo_pgsql の行を一旦コメントアウトして、Apache を Restart し、 再度コメントアウトを外して、再度、Apache を Restart してみます。
php.ini の各設定の意味を説明しておきます。 本番のサーバーで環境が異なる場合の参考にしてください。 基本的に、開発・デバッグに向いた設定にしてあります。 error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING PHP の実行時に不具合が発生した時に、 どの種類のメッセージを画面に表示するか、です。 E_ALL は、全てのメッセージを表示。 &~ で、その指定したメッセージだけを非表示に変えます。 それぞれの意味は、php.ini ファイル中のコメントにあるとおりです。 E_NOTICE や E_WARNING を外すのは、 そのほうが fatal なエラーを判別しやすいからで、 慣れないうちは、このほうがラクです。 より厳密なコードを書くためには、 E_ALL のみになります。 default_charset = "UTF-8" 文字のエンコーディングが問題になる際、 ここでの指定が、デフォルトで選ばれます。 本稿では全部 UTF-8 なので、ここもそうなります。 include_path = ".;c:\php84\includes インクルードファイルを探すディレクトリを指定します。 . は、PHP のルート (c:\php84) です。 extension_dir = "ext" extension= を有効にする際に必要な設定です。 PHP 標準の extention (dll) は、 c:\php84\ext 以下に配置されているので、 上記のような設定になります。 extension=php_mbstring 素の PHP は、日本語 Shift-JIS のような マルチバイト文字列に対応していません。 コード内は、UTF-8 で通しているので問題ないですが、 Shift-JIS で書かれたテキストファイルを データとして読み込んで処理するような場合に、 この mbstring の登場となります。 extension=pdo_pgsql データベース PostgreSQL を使用する際に必要です。 date.timezone = Asia/Tokyo 日付関連の関数で デフォルトのタイムゾーンを設定します。 これを設定しないと、warning メッセージが大量に出てしまいます。 mbstring.language = Japanese この設定は、全体のデフォルト値を決めます。 その他、今回は設定を変えないものの、 気にすべきものも挙げておきます。 display_errors = On 上記のメッセージを出力する、設定です。 Off にすると、上記エラーが表示されません。 php.ini 内の説明にもあるとおり、 本番で不用意にエラーメッセージを出すと、 悪意のある第三者に、攻撃のヒントを与えることになります。 本番では、Off にしておく事をお勧めします。 html_errors = On 上記のメッセージを HTML で出力する、設定です。 ブラウザの画面に出すのなら、On がお勧めです。 ;mbstring.encoding_translation = Off internal_encoding と http_output が異なる場合、 これを On にすることで、 PHP が自動的にエンコーディング変換を行ってくれます。 今回は、UTF-8 で通しているので問題ないですが、 この設定は、php.ini でしか変更できないので、 場合によっては、非常に困る場合もあります。 # この設定は、デフォルト、コメントアウトなので、 # 必要なら、プログラムでエンコーディング変換する前提です。 # 面倒だからといって、この設定を勝手に On してしまうと、 # 他のプログラムに迷惑が掛かる可能性が高いです。 なお、 変換を行うためには、 output_handler = mb_output_handler を指定する必要があります。 # handler は独自に作る事も可能なようです。 # 編者は作った事はありませんが... short_open_tag = Off PHP のコードを HTML コード内に埋め込む時、 "<?php" で始まって、"?>" で終わります。 # <?php echo "test"; ?> とった感じです。 ここの設定を On にすると、 "<? ?>" 形式も使えるようになります。 # <? echo "test"; ?> とった感じです。 これは、PHP の古いバージョンでは一般的だったので、 未だにこの形式のコードを見る事があります。 しかし、On だと、 XML 宣言 (<?xml ?>) が解釈できないので、 XML が一般化した現在では、とても不便です。 そこで、 現在は、デフォルト Off になっています。 expose_php = On On にすると、 HTTP レスポンスヘッダーに、 X-Powered-By: PHP/8.4.14 といった情報が付加されます。 max_execution_time = 30 スクリプトを継続して実行できる上限を秒で指定します。 この設定なら、30秒を超えると、スクリプトが強制終了します。 バグったコードが無限ループしたりして、 サーバーに負担を掛けたりしないように配慮しているわけですが、 この設定は、PHP 実行時に変更できます。 初めから重たい処理をする事が分かっている場合は、 値を大きくすることもできます。 # どの状況で設定変更できるかは、設定項目毎に決まっているので、 # PHP のマニュアルを参照してください。 memory_limit = 128M スクリプトが使用できるメモリーの上限を設定します。 この設定も、PHP 実行時に変更できます。 doc_root = 本稿では、PHP を WEB モジュールとして使用するので関係ないです。 PHP を、Apache の CGI で使用する際には、 スクリプトを置くディレクトリの記載が必要です。 ただ、IIS で使用する際には、記載してはいけません。 どちらも、設定を間違えると、スクリプトが動作しません。 # Apache と IIS で設定が真逆なので、注意。 SMTP = localhost smtp_port = 25 スクリプトから、電子メールを発信する場合に、設定が必要です。 それぞれ、サーバーの IPアドレスと、SMTP のポートを記載します。 localhost だと、メールが送信されません。
を参照してください。
mbstring と pdo_pgsql の項目があれば、とりあえず OK です。
詳細な動作確認は、ずっと後になります。
php.ini の各設定の意味を説明しておきます。
本番のサーバーで環境が異なる場合の参考にしてください。
基本的に、開発・デバッグに向いた設定にしてあります。
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING
PHP の実行時に不具合が発生した時に、
どの種類のメッセージを画面に表示するか、です。
E_ALL は、全てのメッセージを表示。
&~ で、その指定したメッセージだけを非表示に変えます。
それぞれの意味は、php.ini ファイル中のコメントにあるとおりです。
E_NOTICE や E_WARNING を外すのは、
そのほうが fatal なエラーを判別しやすいからで、
慣れないうちは、このほうがラクです。
より厳密なコードを書くためには、
E_ALL
のみになります。
default_charset = "UTF-8"
文字のエンコーディングが問題になる際、
ここでの指定が、デフォルトで選ばれます。
本稿では全部 UTF-8 なので、ここもそうなります。
include_path = ".;c:\php84\includes
インクルードファイルを探すディレクトリを指定します。
. は、PHP のルート (c:\php84) です。
extension_dir = "ext"
extension= を有効にする際に必要な設定です。
PHP 標準の extention (dll) は、
c:\php84\ext 以下に配置されているので、
上記のような設定になります。
extension=php_mbstring
素の PHP は、日本語 Shift-JIS のような
マルチバイト文字列に対応していません。
コード内は、UTF-8 で通しているので問題ないですが、
Shift-JIS で書かれたテキストファイルを
データとして読み込んで処理するような場合に、
この mbstring の登場となります。
extension=pdo_pgsql
データベース PostgreSQL を使用する際に必要です。
date.timezone = Asia/Tokyo
日付関連の関数で デフォルトのタイムゾーンを設定します。
これを設定しないと、warning メッセージが大量に出てしまいます。
mbstring.language = Japanese
この設定は、全体のデフォルト値を決めます。
その他、今回は設定を変えないものの、
気にすべきものも挙げておきます。
display_errors = On
上記のメッセージを出力する、設定です。
Off にすると、上記エラーが表示されません。
php.ini 内の説明にもあるとおり、
本番で不用意にエラーメッセージを出すと、
悪意のある第三者に、攻撃のヒントを与えることになります。
本番では、Off にしておく事をお勧めします。
html_errors = On
上記のメッセージを HTML で出力する、設定です。
ブラウザの画面に出すのなら、On がお勧めです。
;mbstring.encoding_translation = Off
internal_encoding と http_output が異なる場合、
これを On にすることで、
PHP が自動的にエンコーディング変換を行ってくれます。
今回は、UTF-8 で通しているので問題ないですが、
この設定は、php.ini でしか変更できないので、
場合によっては、非常に困る場合もあります。
# この設定は、デフォルト、コメントアウトなので、
# 必要なら、プログラムでエンコーディング変換する前提です。
# 面倒だからといって、この設定を勝手に On してしまうと、
# 他のプログラムに迷惑が掛かる可能性が高いです。
なお、
変換を行うためには、
output_handler = mb_output_handler
を指定する必要があります。
# handler は独自に作る事も可能なようです。
# 編者は作った事はありませんが...
short_open_tag = Off
PHP のコードを HTML コード内に埋め込む時、
"<?php" で始まって、"?>" で終わります。
# <?php echo "test"; ?> とった感じです。
ここの設定を On にすると、
"<? ?>" 形式も使えるようになります。
# <? echo "test"; ?> とった感じです。
これは、PHP の古いバージョンでは一般的だったので、
未だにこの形式のコードを見る事があります。
しかし、On だと、
XML 宣言 (<?xml ?>) が解釈できないので、
XML が一般化した現在では、とても不便です。
そこで、
現在は、デフォルト Off になっています。
expose_php = On
On にすると、
HTTP レスポンスヘッダーに、
X-Powered-By: PHP/8.4.14
といった情報が付加されます。
max_execution_time = 30
スクリプトを継続して実行できる上限を秒で指定します。
この設定なら、30秒を超えると、スクリプトが強制終了します。
バグったコードが無限ループしたりして、
サーバーに負担を掛けたりしないように配慮しているわけですが、
この設定は、PHP 実行時に変更できます。
初めから重たい処理をする事が分かっている場合は、
値を大きくすることもできます。
# どの状況で設定変更できるかは、設定項目毎に決まっているので、
# PHP のマニュアルを参照してください。
memory_limit = 128M
スクリプトが使用できるメモリーの上限を設定します。
この設定も、PHP 実行時に変更できます。
doc_root =
本稿では、PHP を WEB モジュールとして使用するので関係ないです。
PHP を、Apache の CGI で使用する際には、
スクリプトを置くディレクトリの記載が必要です。
ただ、IIS で使用する際には、記載してはいけません。
どちらも、設定を間違えると、スクリプトが動作しません。
# Apache と IIS で設定が真逆なので、注意。
SMTP = localhost
smtp_port = 25
スクリプトから、電子メールを発信する場合に、設定が必要です。
それぞれ、サーバーの IPアドレスと、SMTP のポートを記載します。
localhost だと、メールが送信されません。