【2023年10月版】Windows11にPHP8.2をインストールする

2023年版 Windows11 PHPをインストール PHP
※当サイトはアフィリエイト広告を掲載しています。

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版を落としました(以下画像の赤枠)。

PHPのダウンロードページ

PHPバージョンについて補足です。たしかApacheのバージョンが古いと、新しいバージョンのPHPがうまく動かなかったことがあるように思います。Apache2.4以前を利用の方は、この機会にApacheをアップデートするのも一考ですね。

ダウンロードしたファイルは、ただのZIPファイルです。

デスクトップなどに解凍しておいてください。

ファイルの配置

フォルダのリネーム

解凍したフォルダを、必要に応じて任意の名称に変更します。

インストール先のフォルダ名称になりますので、よく考えて決めましょう。

私はphp82としました。

PHP82にリネーム

インスール先に配置

次に、このphp82フォルダをインストール先に移動します。

Ctrl+Xでカットし、希望のフォルダ内でCtrl+Vで貼り付けます。

私はCドライブ直下にしたので、C:\php82となりました。

C:\php82に配置

php.iniの作成

PHPには、php.iniという設定ファイルが存在します。

……と言っても自分で用意する必要があるので、最初に行いましょう。

C:\php82の中に、php.ini-developmentというファイルがあります。これはdevelopment=開発に適したひな形です。

このファイルをCtrl+Cでコピーし、Ctrl+Vで貼り付け(複製)した後、php.iniという名称に変更します。

わざわざ複製したのは、初期状態に戻したくなった時用です。必要無ければ、最初からphp.ini-developmentphp.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を使うのが最も簡単です。タスクトレーに常駐していれば以下の通りです。

Apacheを再起動する

タスクトレーにApacheMonitorのアイコンがない場合、C:\Apache2457\bin\ApacheMonitor.exeなどにプログラムがあります。ダブルクリックでタスクトレーに入るはずです。

問題無く再起動できれば、ここまではOK。

以下のようなエラーが出る場合は、httpd.confの設定に間違いがあるので、見直してみましょう。

The requested operation has failed!

ブラウザから動作確認

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です。

php8.2.11のphpinfo()の結果

CLIからも動作させる

PHPは、Apacheを通じてWebブラウザから実行するだけの利用にとどまりません。

CLI(コマンド・ライン・インターフェース)からも利用するシーンもそこそこあります。Windowsの場合、Windowsターミナル(要はPowerShellやコマンドプロンプト)ですね。

PHP開発者なら、ほぼ必須に近いと思いますのでやっておきましょう。

パスを確認する

CLIで動作させるためには、PHPの実行ファイルにパスを通す必要があります。そのために、まずは対象ファイルの場所を確認します。

今回私の環境では、以下です。

C:\php82\php.exe

上記プログラムを、ターミナルからphpと打っただけで実行できるようにしたい。

そのために、以下のフォルダをWindowsのパスに通すことにします。

C:\php82

パスを通す

Windowsキーを押した後に、envと打ち込むと「システム環境変数の編集」が候補に表示されますので、そのままEnter(またはアイコンをクリック)して実行してください。

Windowsからenvと検索

以下のウィンドウが立ち上がりますので「環境変数」をクリックします。

環境変数をクリック

すると、以下の様になりますので、ユーザー環境変数のPathを選択した状態で、「編集」ボタンをクリックします。

環境変数を編集

「新規」を押し、先ほどのPHPのフォルダのパスを貼りつけてOKを押してウィンドウを閉じます。

C:\php82をパスに追加

動作確認

PowerShellまたはコマンドプロンプトを開きます。もしすでに起動していた場合、一度終了させてから起動させてください。

以下のコマンドを打ちます。

php -v

これはPHPのバージョンを表示するコマンドで、以下の様な表示になればOKです。

PHPの設定変更方法

これから基本的な設定を変更していきますが、その前に、設定の変更と反映の方法を明確にしておきます。

設定ファイルの場所

設定を変更するには、php.iniファイルを修正します。テキストエディタなどで開き、修正&保存(&Apacheの場合はApache再起動)することで設定を変更できます。

C:\php82\php.ini

設定ファイルの修正を誤ると、意図した動作にならない可能性があります。

元に戻したくなる場合も想定し、編集前のデータは、複製してバックアップをとっておくと良いでしょう。

Lara
Lara

……と教科書的に言いますが、私はめんどうなのでやってません(汗)

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を再起動させることを忘れないようにしてください。

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

余談ですが、これまでは1024Mなどと指定していましたが、今回初めて、1Gと指定できることを知りました。

error_log

PHPのエラーメッセージを記録する場所を指定するために使用されます。

開発時はエラーを表示するので必要性は低いかもしれませんが、一応、ログに残すことにします。

;error_log = php_errors.log
error_log = "C:\php82\log\error.log"

上記のようにしたので、C:\php82logフォルダを作っておきました。

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でしょうか。

2023/10/29:
mysqliを追加しました。

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
Lara
Lara

基本的に、最初から全てやるのではなく、必要が生じて都度設定していけばOKです。使わないものを設定してもしょうがないですしね。

まとめ

これでPHP×Apache×MySQLで、最低限の開発ができるようになりました!

ただ、先ほどの通りXdebugなどの是非入れておきたいものもあるので、手空き時に順次追加していきたいと思います。

コメント

タイトルとURLをコピーしました