Windows11搭載の新しいPCを購入し、MySQL5.7をインストール、Apache2.4をインストールが完了。そしてApacheでバーチャルホストを設定したので、ここでやっとPHPをインストールします。
本ページをご覧いただければ、PHPをApache&CLIで実行できるようになるはずです。
今回の私の環境
今回は、以下を前提として解説します。あなたの環境とパスが異なる場合は、適宜読みかえてください。
- Windows11に直に最新版であるPHP8.2をインストール
(64bit版OSを想定) - PHPインストール先→ C:\php82
- Apacheのインストール先→C:\Apache2457
ダウンロード
まずはPHPをダウンロードします。
ダウンロード
PHPの公式サイトからダウンロードします。ご希望のPHPのバージョンを選ぶのですが、ちょっと迷うかもしれません。
32bit、64bitの違いは分かると思いますが、Thread Safeと、Non Thread Safe版は悩む所です。
- Thread Safe (TS)版:
マルチスレッド環境での実行を意図している。特に、Windows上でのApache mod_phpとともにPHPを実行する場合に向く - Non Thread Safe (NTS)版:
マルチスレッド環境での実行を意図していない場合や、nginx、FastCGI、PHP-FPMなどでの実行に向く
ですので、WindowsのApacheであれば通常はThread Safe版でOKです。
私は最新版のPHP8.2.11の、64bit・Thread Safe版を落としました(以下画像の赤枠)。
ダウンロードしたファイルは、ただのZIPファイルです。
デスクトップなどに解凍しておいてください。
ファイルの配置
フォルダのリネーム
解凍したフォルダを、必要に応じて任意の名称に変更します。
インストール先のフォルダ名称になりますので、よく考えて決めましょう。
私はphp82としました。
インスール先に配置
次に、このphp82フォルダをインストール先に移動します。
Ctrl+X
でカットし、希望のフォルダ内でCtrl+V
で貼り付けます。
私はCドライブ直下にしたので、C:\php82
となりました。
php.iniの作成
PHPには、php.ini
という設定ファイルが存在します。
……と言っても自分で用意する必要があるので、最初に行いましょう。
C:\php82
の中に、php.ini-development
というファイルがあります。これはdevelopment=開発に適したひな形です。
このファイルをCtrl+C
でコピーし、Ctrl+V
で貼り付け(複製)した後、php.ini
という名称に変更します。
Apacheから利用できるようにする
さっそくインストール……と言っても、直接Windowsにインストールするわけではなく、Apacheから利用できるようにするようなイメージです。
Apacheからの読み込み
Apacheの設定ファイルを修正し、PHPと紐付けてやる必要があります。
Apacheの設定ファイルhttpd.conf
をテキストエディタで開いてください。私の場合はApacheをC:\Apache2457
にインストールしたため、以下にありました。
C:\Apache2457\conf\httpd.conf
ファイルの最後などに、以下の様なコードを追記します。私はPHPをC:\php82
をインストールしたので、パスは各自読み変えてくださいね。
LoadModule php_module "C:\php82\php8apache2_4.dll"
PHPIniDir "C:\php82"
AddType application/x-httpd-php .php .htm .html
1~3行目は、それぞれ以下を意味します。
- 1行目(LoadModule~):
PHP8のApache2.4版モジュール読み込み。以前はphp7_module
等と指定していましたが、PHP8はphp8_module
ではないのでご注意ください。 - 2行目(PHPIniDir~):
PHPの設定ファイルphp.ini
のパスを指定しています。 - 3行目(AddType~):
phpを動作させる拡張子を半角スペースで区切って指定しています。私は.php .htm .html
としましたが、自由に好きな拡張子を設定してもOKです。
再起動
これが終わったら、保存してApacheを再読込してください。再起動しないとApacheの設定ファイルは再読込されないからです。
再起動にはApacheMonitorを使うのが最も簡単です。タスクトレーに常駐していれば以下の通りです。
タスクトレーにApacheMonitorのアイコンがない場合、C:\Apache2457\bin\ApacheMonitor.exe
などにプログラムがあります。ダブルクリックでタスクトレーに入るはずです。
問題無く再起動できれば、ここまではOK。
以下のようなエラーが出る場合は、httpd.conf
の設定に間違いがあるので、見直してみましょう。
ブラウザから動作確認
Apacheにエラーがなければ問題無いとは思いますが、きちんと動作確認してみましょう。
以下のPHPコードを、index.php
という名称にし、公開ディレクトリに配置します。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>php test</title>
</head>
<body>
<?php
phpinfo();
?>
</body>
</html>
私は、D:/www
を公開ディレクトリにしているので、D:www/index.php
に配置する形となりました。
そして、以下にアクセスします。
http://localhost/
phpinfo()
関数により、PHPの情報一覧が表示されていればOKです。
CLIからも動作させる
PHPは、Apacheを通じてWebブラウザから実行するだけの利用にとどまりません。
CLI(コマンド・ライン・インターフェース)からも利用するシーンもそこそこあります。Windowsの場合、Windowsターミナル(要はPowerShellやコマンドプロンプト)ですね。
PHP開発者なら、ほぼ必須に近いと思いますのでやっておきましょう。
パスを確認する
CLIで動作させるためには、PHPの実行ファイルにパスを通す必要があります。そのために、まずは対象ファイルの場所を確認します。
今回私の環境では、以下です。
C:\php82\php.exe
上記プログラムを、ターミナルからphp
と打っただけで実行できるようにしたい。
そのために、以下のフォルダをWindowsのパスに通すことにします。
C:\php82
パスを通す
Windowsキーを押した後に、env
と打ち込むと「システム環境変数の編集」が候補に表示されますので、そのままEnter(またはアイコンをクリック)して実行してください。
以下のウィンドウが立ち上がりますので「環境変数」をクリックします。
すると、以下の様になりますので、ユーザー環境変数のPathを選択した状態で、「編集」ボタンをクリックします。
「新規」を押し、先ほどのPHPのフォルダのパスを貼りつけてOKを押してウィンドウを閉じます。
動作確認
PowerShellまたはコマンドプロンプトを開きます。もしすでに起動していた場合、一度終了させてから起動させてください。
以下のコマンドを打ちます。
php -v
これはPHPのバージョンを表示するコマンドで、以下の様な表示になればOKです。
PHPの設定変更方法
これから基本的な設定を変更していきますが、その前に、設定の変更と反映の方法を明確にしておきます。
設定ファイルの場所
設定を変更するには、php.iniファイルを修正します。テキストエディタなどで開き、修正&保存(&Apacheの場合はApache再起動)することで設定を変更できます。
C:\php82\php.ini
設定ファイルの修正を誤ると、意図した動作にならない可能性があります。
元に戻したくなる場合も想定し、編集前のデータは、複製してバックアップをとっておくと良いでしょう。
……と教科書的に言いますが、私はめんどうなのでやってません(汗)
INI形式のファイルについて
php.ini
はPHPの設定を管理するためのファイルで、INI形式で書かれています。
INIファイル形式はPHP独自のものではなく、様々なソフトウェアやアプリケーションで設定ファイルとして使用されています。
最低限知っておくと良いと思うのは、以下です。
- セクションという概念でグルーピングすることができ、[section_name]のように角括弧で囲まれて表現されます。
- 設定はキーと値のペアで指定し、key = valueの形式で書かれます。
;
で始まる行はコメントとして扱われます。- 空白行は無視されます。
設定ファイルの変更について
これは私がやっている方法ですが、もともと設定してあるキーと値をコメントアウトし、改めて直後に指定しています。
;memory_limit = 128M
memory_limit = 4096M
1行目を直接4096Mに変えても良いですが、こうしておけば後から見て「ああ、ここは自分で設定を変えたんだな」ということがわかるからです。
私は以降も基本的にはこの方法でやりますが、必要に応じてご自身のやり方で修正してみてください。
設定の反映方法
ApacheでPHPを使用している場合、 php.ini
を変更した際、ただ保存するだけでは即座に反映されません。
Apacheを再起動させた時に修正が適用されますので、php.ini
修正後は、ApacheMonitorなどからApacheを再起動させることを忘れないようにしてください。
もちろん、まだスタートしていなければ、StartでもOKです。
設定をカスタマイズする
それではPHPの設定をカスタマイズしていこうと思います。ここからは、あなたの環境・必要に応じて設定を変更すればOKですので、私と同じくする必要はありません。
あくまで設定の参考としてご覧いただければ幸いです。
error_reporting
どの種類のエラーが報告されるかを制御します。開発中は、基本的に全て出す一択です。
今回は最初から全てのエラーを表示する最良の設定になっていましたのでそのまま変更せずにOKです。
error_reporting = E_ALL
display_errors
エラーメッセージがブラウザ(またはコンソール)に表示されるかどうかを制御します。
開発環境では表示が好ましいですが、今回はそうなっていたのでそのままでOKです。
display_errors = On
max_execution_time
スクリプトが終了するまでに許可される最大の実行時間(秒単位)を指定します。時間がかかる処理もあるので増やしておきます。
私の環境では421行目にありました。以後は追加する分、行数もずれていくので、対象はテキストエディタの検索(多くはCtrl+F等)で探してみてください。
;max_execution_time = 30
max_execution_time = 3000
max_input_time
スクリプトが入力データ(例: POSTデータ、GETデータなど)を受け取るのにかかる最大時間を設定するためのものです。この設定の値は秒単位で指定されます。
巨大なSQLデータをphpMyAdminからPOSTする際など、数分かかることもあるのでmax_execution_time
と同じ値にしておきます。
;max_input_time = 60
max_input_time = 3000
memory_limit
スクリプトの実行中に使用できるメモリの最大量を指定します。この制限により、個々のPHPスクリプトがサーバーのすべてのメモリを消費することを防ぐことができます。
そんなに必要になることはないとは思いますが、32BGのPCなので1Gくらいいいやと思い、とりあえず指定しました。
;memory_limit = 128M
memory_limit = 1G
error_log
PHPのエラーメッセージを記録する場所を指定するために使用されます。
開発時はエラーを表示するので必要性は低いかもしれませんが、一応、ログに残すことにします。
;error_log = php_errors.log
error_log = "C:\php82\log\error.log"
上記のようにしたので、C:\php82
にlog
フォルダを作っておきました。
post_max_size
post_max_size
は、POSTリクエスト経由で受け取るデータの最大サイズを設定します。
phpMyAdminからSQLを入力したり、巨大なファイルをアップロードする可能性もあるので、多めに1Gにしておきます。
;post_max_size = 8M
post_max_size = 1G
extension_dir
PHP拡張モジュールが格納されているディレクトリのパスを指定するための設定です。
初期ではコメントアウトされていますが、確実に読み込みたいので明示的に記載しておくことにします。
;extension_dir = "ext"
extension_dir = "C:\php82\ext"
sys_temp_dir
PHPが一時的なファイルを保存するためのディレクトリを指定するのに使用されます。
無指定だと、C:\Windows\Tempなどが使われるのか分かりませんが、普通に考えると少なくともCドライブになるのでしょう。
私はシステムドライブとは分け、できるだけ高速化したいのでDドライブにします。
;sys_temp_dir = "/tmp"
sys_temp_dir = "D:\tmp\php"
もちろん、事前にフォルダを作っておく必要があります。
upload_max_filesize
アップロードの最大量です。これまでの通り、特にSQLファイルは大きいこともあるので、増やしておきます。
;upload_max_filesize = 512M
upload_max_filesize = 1G
各種extension
以下の様な、extension=XXXという表記が並んでいる箇所があります。私の環境だと970行目くらいです。
;extension=curl
;extension=ffi
;extension=ftp
;extension=fileinfo
;extension=mysqli
これは利用したい拡張機能をコメントアウトするエリアです。
私はとりあえず以下をコメントアウトしました(ここだけ量が多いので直接コメントアウトしています)。
extension=curl
extension=gd
extension=mbstring
extension=pdo_mysql
extension=mysqli
後で必要な時に再修正すればOKですので、無理に修正する必要はありません。この中でもマストなのは、mbstringでしょうか。
date.timezone
PHPの日付と時間の関数(例:date()
, time()
, strtotime()
など)が正しいタイムスタンプや日付情報を返すためには、正確なタイムゾーンの情報が必要です。
日本時間(JST)を使用するよう、以下のように設定します。
;date.timezone =
date.timezone = "Asia/Tokyo"
session.save_path
セッションデータの保存場所を指定するためのものです。私は以下の様にします。
;session.save_path = "/tmp"
session.save_path = "D:\tmp\php\session"
これまで同様、フォルダは作成しておきます。
session.use_strict_mode
未知のセッションIDを受け取った場合の動作を制御します。セッションIDがサーバー側で既に知られているIDではない場合、厳格モードが有効の場合は新しいセッションIDが生成されます。
開発環境では不要かとも思いましたが、テストする際など本番に近づけておこうかと思い厳格モードにしておきました。
;session.use_strict_mode = 0
session.use_strict_mode = 1
session.cookie_httponly
セッションIDを保持するために使用されるクッキーに HttpOnly
フラグを設定するかどうかを指定するためのものです。
基本は設定した方がセキュアになるため、開発環境でもそうしておきます。
;session.cookie_httponly =
session.cookie_httponly = 1
mbstring.language
mbstring
モジュールの動作を制御するための言語設定を指定します。
日本で使うのであれば以下にしておきます。
;mbstring.language = Japanese
mbstring.language = Japanese
Xdebug
エラー表示をより分かりやすくするもので、実質的にはマストと言えます。別途ダウンロードなどが必要なため、長くなるので以下ページで解説しています。
Composer
Composerは、PHPにおいての依存関係管理ツールです。
長くなるため、以下の別記事にて詳しく解説しています。
その他
その他、以下に関してはすぐやる必要は無いかもしれませんが、いずれ必要が生じた際に、改めて別記事で取り上げようと思います。
- sendmail_path
- curl
基本的に、最初から全てやるのではなく、必要が生じて都度設定していけばOKです。使わないものを設定してもしょうがないですしね。
まとめ
これでPHP×Apache×MySQLで、最低限の開発ができるようになりました!
ただ、先ほどの通りXdebugなどの是非入れておきたいものもあるので、手空き時に順次追加していきたいと思います。
コメント