Windows11×Apache×PHP8.2環境を、PHP8.3にアップデートする

PHP
※当サイトはアフィリエイト広告を掲載しています。

「最新のPHP8.3はまだ顧客のレンタルサーバーに対応していないことがある」、という理由で、これまでPHP8.2をベースに開発していました。

しかし、そろそろどこもPHP8.3が対応してきました。PHP8.4も近日リリースもするころですし、当たり前かもしれません。

というわけで、そろそろ開発環境もPHP8.3にアップデートしよう、ということで、文化の日を利用して実施することにしました。

結論から言えば、何も問題なく特に難しいことはありませんでした。あまり読みごたえが無い内容になってしまいますが、「簡単であった」という備忘録もかねてポストしておきます。

Lara
Lara

こういうメンテナンス的な作業は休日にやるのが好きです

環境

この環境にPHP8.3を入れます。

  • Windows11 Professional(64bit)
  • Apache 2.4.57
  • PHP 8.2.11を利用中

要望

  • PHP8.2にも変更できるように
  • できればphp.iniを使い回したい

前者は、案件によって古いバージョンのPHPが必要になることもあるから。

後者は、単純に1から設定するのが面倒だからです。同じ方も多いのではないでしょうか。

ダウンロード

PHP8.3を公式サイトから落とします。

Thread Safe or Non Thread Safe

WindowsのApacheで使うならThread Safeを選択するもの……と考えずっとそうしてきましたが、たまには天邪鬼なことをしてみます。

今回はあえてVS16 x64 Non Thread Safeを入れてみます。一人で使うのでまあ変わり無いとは思いますけどね。

Non Thread Safeの方がオーバーヘッドが少ないのでは……なんて思いましたが、もしあっても誤差の範囲でしょう。WindowsのApacheなら、ThreadSafeを選択するのがセオリーです。

解凍して配置

落としたファイルを解凍し、できたフォルダをphp83に変更します。そしてCドライブ直下に移動しました。

つまり、C:\php83の落としてきたPHPのフォルダがある状態です。

これで準備が整いました。

Apacheの設定

httpd.confの修正

PHP8.2を使っているのであれば、以下の様な記述がApacheの設定ファイルであるhttpd.confの中にあると思います。

LoadModule php_module "C:\php82\php8apache2_4.dll"
PHPIniDir "C:\php82"

これを以下に変更します。

LoadModule php_module "C:\php83\php8apache2_4.dll"
PHPIniDir "C:\php83"

# LoadModule php_module "C:\php82\php8apache2_4.dll"
# PHPIniDir "C:\php82"

過去のPHPに戻すことも考え、以前の記述は#でコメントアウトして残します。

一時的にPHP8.2にしたい時は、ここをちょっと直すだけで戻すことが可能です。

PHP設定

当初の目標通りphp.iniを使い回したいですが、(すんなりできると思ってなかったので)まずは最小構成で動作確認してから実施します。

php.ini作成

ダウンロードしたPHPのフォルダ内にあるphp.ini-developmentを複製し、php.iniを作ります。

まずは778行目の以下をコメントアウト。

extension_dir = "ext"

今回、私の環境では問題なかったですが、以下の様に絶対パスでないと動かないことも過去にはあったように思います。

extension_dir = "C:\php83\ext"

937行目からの拡張をいろいろとコメントアウトしています。最小構成ならしなくてもよかったかもしれませんが一応。

extension=curl
extension=ffi
extension=ftp
extension=fileinfo
extension=gd
extension=gettext
extension=gmp
extension=intl
extension=imap
extension=mbstring
extension=exif      ; Must be after mbstring as it depends on it
extension=mysqli
extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
extension=oci8_19  ; Use with Oracle Database 19 Instant Client
extension=odbc
extension=openssl
extension=pdo_firebird
extension=pdo_mysql
extension=pdo_oci
extension=pdo_odbc
extension=pdo_pgsql
extension=pdo_sqlite
extension=pgsql
extension=shmop

; The MIBS data available in the PHP distribution must be installed.
; See https://www.php.net/manual/en/snmp.installation.php
;extension=snmp

extension=soap
extension=sockets
extension=sodium
extension=sqlite3
extension=tidy
extension=xsl
extension=zip

zend_extension=opcache

これでApacheを再起動→ひとまずこれでPHP8.3でApacheが起動しました。

PHP8.3が正しくインストールできていなかったり、Apacheと相性が悪かったりするなら、Apacheは起動しないはずです。

php8.2のphp.iniをコピー

現状の環境で、PHP8.3が動作出来ることは切り分けられました。

続いて目標であるPHP8.2のphp.iniに置き換え、Apache再起動します。

……あっけなく起動しました。

PHP8.3独自の設定があれば使えないことになりますが、まあ良しとしましょう。

Lara
Lara

個人的には何か問題が起こらない限り、PHP9が出るまでは使い回しても良いかなと思います

環境変数を変更

問題無さそうですので、環境変数のPHPバージョンも変えておきます。これをしないと、CLI(例えばLaravelのコマンド等)で利用してくれないので、変更するのが良いです。

システム環境変数の編集

ファイル検索からenv等と打ち込むと、「システム環境変数の編集」が出ますのでクリックします。英語でのショートカットも有効なのは非常に便利ですね。

以下の画面がでますので、手順に沿って変更します。

エラー

やっと(!?)躓きがありました。

CLIで動作確認しようと思ったら、以下のエラーが出ます。

php -v

Warning: Failed loading Zend extension 'xdebug' (tried: C:\php83\ext\xdebug (謖・ョ壹&繧後◆繝「繧ク繝・繝シ繝ォ縺瑚ヲ九▽縺九j縺セ縺帙s縲・, C:\php83\ext\php_xdebug.dll (謖・ョ壹&繧後◆繝「繧ク繝・繝シ繝ォ縺瑚ヲ九▽縺九j縺セ縺帙s縲・) in Unknown on line 0
PHP 8.3.13 (cli) (built: Oct 22 2024 21:08:02) (ZTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.3.13, Copyright (c) Zend Technologies

文字化け部分は読めませんが、XDebugのextensionを利用しているので、dllが必要なようです。

C:\php82\ext\php_xdebug.dllを、C:\php83\ext\にコピペしていけるかなとダメ元でやってみたら微妙なメッセージです。

php -v
Xdebug requires Zend Engine API version 420220829.
The Zend Engine API version 420230831 which is installed, is newer.
Contact Derick Rethans at https://xdebug.org/docs/faq#api for a later version of Xdebug.

PHP 8.3.13 (cli) (built: Oct 22 2024 21:08:02) (ZTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.3.13, Copyright (c) Zend Technologies

先ほどとは違ってWarningとは出ていませんが、ダメっぽいです。

おとなしく公式サイトから落としてきます。今回は天邪鬼でNon Thread Safeなので、PHP8.3 VS16(64ビット)の方を選択しました。

php_xdebug-3.4.0beta1-8.3-vs16-nts-x86_64.dllというファイル名でしたが、php_xdebug.dllに名前を変えて、C:\php83\extに配置します。

完了

php -v
PHP 8.3.13 (cli) (built: Oct 22 2024 21:08:02) (ZTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.3.13, Copyright (c) Zend Technologies
    with Xdebug v3.4.0beta1, Copyright (c) 2002-2024, by Derick Rethans

これで、CLIでもPHP8.3が利用できるようになりました。

まとめ

PHP8.2環境からPHP8.3を入れるのは、ほぼトラブルが起きず完了してしまいました。

こんなに簡単なら、もっと早くやっておけば良かったと思います。

もうすぐPHP8.4も登場です。次回はもっと早めにアップデートしておこうと思います。

コメント

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