Windows11にPHP8.1.20をインストール

アフィリエイト広告を利用しています

このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です

Windows11開発環境の構築ガイド : PHP / WEBアプリ開発 編
今回はPHP8.3.13をWindows11にインストールする手順について進めていきます。

本記事は開発環境での用途を前提としています。
本番環境で利用される場合はここにある内容だけを鵜呑みにせず専門家に相談されることをお勧めします。

【宣伝】弊社では2000年台前半頃からPHPを扱っており古いシステムでも解析して直したり再活用を行うことができます。お使いのシステムに気になることがありましたらお気軽にお問い合わせください。

特徴

  • Windows 11 / Windows 10 対応
  • 複数バージョンの共存

特定バージョンでの開発や動作確認など開発環境での用途を目的としています。

環境

作業日2023-07-27
OSWindows 11 Pro

ダウンロード

公式サイトから取得

公式サイトからダウンロードします。
https://www.php.net/downloads.php

▲上記画像は参考です。(バージョンが異なります)

対象バージョンの「Windows downloads」をクリックします。

Windows版はページが異なるので直接下記を開いても構いません。
https://windows.php.net/download

ファイルを選択

いくつか種類があるので適切なものをダウンロードします。
PHPのバージョンを確認し、「VS16 x64 Thread Safe」の「ZIP」をダウンロードします。

▲上記画像は参考です。(バージョンが異なります)

php-8.1.20-Win32-vs16-x64.zip
がダウンロードされます。

ダウンロードページには最新バージョンだけが出ています。

2023-07-27 時点だと、PHP 8.2.8 / PHP 8.1.21 / PHP 8.0.29 の3つです。
いま最新の8.2.8もしばらくしたらここに出てこなくなります。
そんなときはアーカイブに移動します。
同じページの左エリアの一番下に▼があります。

archives から入れますので、目的のバージョンの「zip」を探します。
ちなみに Museum のほうもクリックできますが、こちらは tar.gz が欲しい方向けです。

ダウンロードするときは、黄色になっているとこの「nts」が付いていないほうを選択します。
※archivesには1つ古いバージョンまでになります。

今回は▼を探します。普通にブラウザの検索(CTRL+F)で探せば良いです。

php-8.1.20-Win32-vs16-x64.zip

▲上記画像は参考です。(バージョンが異なります)

「debug」なしで、「8.1.20」で、「nts」なしで、「x64」を選択しています。

ファイルの種類について

「VS16」

「VS16」はPHPをコンパイルしたバージョンです。他のバージョンだと「VC14」とか「VC15」を見かけることがあります。基本的に気にしなくてOKです。

「x64」と「x86」

「x64」は64bit版、「x86」は32bit版です。
Apacheにモジュールとして設定する場合は気にする必要がありますが、ここではCGIとしてやっていくのでどちらでもOKです。
特にこだわり(案件の仕様とか)がなければ「x64」で構いません。

「Thread Safe」と「Non Thread Safe」

略して「TS」と「NTS」と書くこともあります。
Apacheにモジュールとして設定する場合は気にする必要がありますが、ここではCGIとしてやっていくのでどちらでもOKです。
特にこだわり(案件の仕様とか)がなければ「Thread Safe」で構いません。

インストール

解凍して配置

zipと同名のディレクトリを作成して解凍します

ドライブレター:\www\php\php-8.1.20-Win32-vs16-x64

▲上記画像は参考です。(バージョンが異なります)

ZIPを保存

この作業はどっちでも良いですが、ダウンロードしたzipは念のため削除せず残すようにしています。

ドライブレター:\www\archive 

ここにダウンロードしたzipをそのまま保存します。

初期設定

php.ini を作成

php.ini-development をコピーして、ファイル名を php.ini にします。

php.iniの設定変更

下記の設定は一例です。
この通りにしなくても構いませんし、意味を知った上でご自身の判断で設定してください。

171行目 .user.ini のファイル名

先頭のセミコロンを外します。

;user_ini.filename = ".user.ini"
 ↓
user_ini.filename = ".user.ini"

177行目 .user.ini のキャッシュ時間

先頭のセミコロンを外して、.user.ini のキャッシュを 10秒にします。
開発環境ならこの辺りで待ちたくないですね。

;user_ini.cache_ttl = 300
 ↓
user_ini.cache_ttl = 10

763行目 拡張の保存場所

先頭のセミコロンを外します。

;extension_dir = "ext"
 ↓
extension_dir = "ext"

915 ~ 951行目 拡張の有効化

必要なもののセミコロンを外します。
※下記リスト、分かりづらくなるので無効にしておくものは省略しています。

extension=curl
extension=fileinfo
extension=gd
extension=gettext
extension=intl
extension=mbstring
extension=exif      ; Must be after mbstring as it depends on it
extension=mysqli
extension=openssl
extension=pdo_mysql

extension=soap

966行目 デフォルトのタイムゾーン

先頭のセミコロンを外して、東京にします。

;date.timezone =
 ↓
date.timezone = Asia/Tokyo

1349行目 セッションファイルの保存先

先頭のセミコロンを外して、デフォルトの保存先を変えます。

;session.save_path = "/tmp"
 ↓
session.save_path = "E:\パス\www/httpd/session_save_path"

1920行目 curlの証明書

curlで https:// なページにアクセスしたいなら必要です。
cacert.pem は curl のサイトのこちら から入手できます。

;curl.cainfo =
 ↓
curl.cainfo = E:\パス\www\ca\cacert.pem

1929行目 opensslの証明書

file_get_contents() とかで https:// なページにアクセスしたいなら必要です。
cacert.pem は curl のサイトのこちら から入手できます。

;openssl.cafile =
 ↓
openssl.cafile = E:\パス\www\ca\cacert.pem

Image Magickを使う

ImageMagic を使う場合は下記を参考にしてください。

ApacheのVirtualHostに設定

本記事では、Windows10 での Apache、MySQL、PHPの組合せを前提としています。
ここでは、AmacheのVirtualHostでの設定例を記します。

次のように、Directory で使用するPHPバージョンを指定しています。書き方を工夫すれば、同一ドメイン内でもディレクトリごとにPHPバージョンを変えることも可能です。

##############################################################################
#       directory
##############################################################################
<directory "f:="" www="" vhosts="" example.com="" public_html"="">
    AddHandler cgi-script .cgi
    AddHandler fcgid-script .php
#    AddHandler fcgid-script .php .html
    FcgidWrapper "E:/パス/www/php/php-8.1.20-Win32-vs16-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-8.1.12-Win32-vs16-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-8.1.5-Win32-vs16-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-8.0.17-Win32-vs16-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-8.0.9-Win32-vs16-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-8.0.1-Win32-vs16-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-7.4.6-Win32-vc15-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-7.4.4-Win32-vc15-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-7.3.10-Win32-VC15-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-7.3.2-Win32-VC15-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-7.2.2-Win32-VC15-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-7.1.4-Win32-VC14-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-7.0.13-Win32-VC14-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-7.0.8-Win32-VC14-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-5.6.31-Win32-VC11-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-5.6.8-Win32-VC11-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-5.5.23-Win32-VC11-x64/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-5.4.43-Win32-VC9-x86/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-5.3.13-Win32-VC9-x86/php-cgi.exe" .php
#    FcgidWrapper "E:/パス/www/php/php-4.3.9-Win32/php-cgi.exe" .php
    DirectoryIndex index.php index.html index.htm index.cgi
    Options Includes ExecCGI  FollowSymLinks
    AllowOverride All
    Require ip 127.0.0.1
    Require ip 192.168.11.0/24
</directory>


##############################################################################
#       http
##############################################################################
<virtualhost *:80="">
    DocumentRoot "F:/www/vhosts/example.com/public_html"
    ServerName example-com-local.aulta.jp
</virtualhost>


##############################################################################
#       https
##############################################################################
<virtualhost *:443="">
    DocumentRoot "F:/www/vhosts/example.com/public_html"
    ServerName example-com-local.aulta.jp
</virtualhost>

ちなみに example-com-local.aulta.jp は、「a example-com-local 127.0.0.1」 です。
これを 「a example-com-local 192.168.1.1」とかってローカルIPを指定しておくと、ローカル内のスマホとかタブレットとか同僚のPCからでも見れるようになるので便利です。

パスは通さない

この後の手順として「環境変数」だとか「パスを通す」とかってなってくると思うんですが、不要です。

詳しくは「パスは通さない」をご覧ください。

【宣伝】弊社では2000年台前半頃からPHPを扱っており古いシステムでも解析して直したり再活用を行うことができます。お使いのシステムに気になることがありましたらお気軽にお問い合わせください。