Windows10にPHP8.0.25をインストール
篠原 隆司
アフィリエイト広告を利用しています
このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です
今回はPHP8.0.25をインストールしていきます。
なお本番環境で利用される場合はここにある内容だけを鵜呑みにせずセキュリティ専門家に相談されることをお勧めします。
弊社では、2000年台前半頃からPHPを触っている関係で、古いシステムでも解析して扱うことができます。当時の担当者とか制作会社がいなくなったなどで困られた方からの相談を頂くことがよくあります。お気軽にお問い合わせください。
特徴
- Windows10
- 複数バージョンの共存
特定バージョンでの開発や動作確認など開発環境での用途を目的としています。
環境
作業日 | 2022-11-16 |
OS | Windows10 64bit |
ダウンロード
公式サイトから取得
公式サイトからダウンロードします。
https://www.php.net/downloads.php
対象バージョンの「Windows downloads」をクリックします。
Windows版はページが異なるので直接下記を開いても構いません。
https://windows.php.net/download
ファイルを選択
いくつか種類があるので適切なものをダウンロードします。
PHPのバージョンを確認し、「VS16 x64 Thread Safe」の「ZIP」をダウンロードします。
php-8.0.25-Win32-vs16-x64.zip
がダウンロードされます。
ダウンロードページには最新バージョンだけが出ています。
2022-11-16 時点だと、PHP 8.1.12 / PHP 8.0.25 / PHP 7.4.33 の3つです。
いま最新の8.1.12もしばらくしたらここに出てこなくなります。
そんなときはアーカイブに移動します。
同じページの左エリアの一番下に▼があります。
archives から入れますので、目的のバージョンの「zip」を探します。
ちなみに Museum のほうもクリックできますが、こちらは tar.gz が欲しい方向けです。
ダウンロードするときは、黄色になっているとこの「nts」が付いていないほうを選択します。
※archivesには1つ古いバージョンまでになります。
「debug」なしで、「8.1.12」で、「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.0.25-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.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.25-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からでも見れるようになるので便利です。
パスは通さない
この後の手順として「環境変数」だとか「パスを通す」とかってなってくると思うんですが、不要です。
本当に必要なら「必要になったときに設定する」で足ります。
その時にはその意味を分かっているはずなのでそうなってからでも遅くありません。
環境変数だとかパスだとかってなんなん?
たとえば、C:\sample に sample.php というファイルを作成し次のように書いているとしましょう。
<!--?php
echo date('Y-m-d H:i:s');
?-->
現在日時を表示するだけのプログラムです。
これを実行するには次のようにします。
php "C:\sample/sample.php"
「php で C:\sample/sample.php を実行」という意味ですね。
ですがこれは環境変数に登録していないと使えません。
環境変数に登録しなくても次のような指定ができます。
C:\php\php-8.1.12-Win32-vs16-x64\php.exe "C:\sample/sample.php"
「php」ではなくphp.exeのフルパスを使います。
「環境変数に登録」というのはこのように "php" だけで実行できるようにすることです。
不要なことが分かってきたかなと思います。
例えば、PHP8.1.12 を "php" として登録したとします。じゃ、php7.4.6 で動かしたくなったときどうしましょう。PHP 5.6.31 で動かしたくなったときどうしましょう。
"php" に紐づけれるのは1つのバージョンだけです。
となると "php8"(PHP8系) とか "php7"(PHP7系) とかにしましょうか。
それも方法の1つです。
しばらく使っていくと "PHP80" (PHP8.0系) とか "PHP81"(PHP8.1系) にしておけばよかった、と思うことになるかもしれません。
で最終的には、"PHP8017"(PHP8.0.17) とか "PHP811"(PHP8.1.1) みたいになってくると思います。
こうなってくると「そもそも環境変数に登録する必要ある?その意味は?」ってなってきます。
php.exe への絶対パスが扱いやすいです。
仕事として行っていると色々なバージョンを扱うことになります。
過去案件の改修とかで古いバージョンを用意することはよくあります。
それでも環境変数に登録しておくと便利なこともあります。
それを見極められるようになってきたときは、そうしたら良いと思います。