経緯
Windows でお手軽に PHP (というよりLAMP環境)を試す環境として、 XAMPP から Laragon の乗り換えを行いました。
その上であるリポジトリのパッケージガーデニングをして Composer でインストールしようとしたところ、 PHP のバージョンが要件を満たしていない、と怒られてしまいました。
ああ、そういえば XAMPP の PHP に環境変数(パス)が通ったままだった……と思って XAMPP の PHP を環境変数 Path から削除し、気を取り直して php -v
したところ、意図しない警告が表示されました。
> php -v
PHP Warning: PHP Startup: Unable to load dynamic library 'C:/laragon/bin/php/php-X.X.X-nts-Win32-VC00-x86/ext\php_curl.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library 'C:/laragon/bin/php/php-X.X.X-nts-Win32-VC00-x86/ext\php_curl.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:/laragon/bin/php/php-X.X.X-nts-Win32-VC00-x86/ext\php_gd2.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library 'C:/laragon/bin/php/php-X.X.X-nts-Win32-VC00-x86/ext\php_gd2.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:/laragon/bin/php/php-X.X.X-nts-Win32-VC00-x86/ext\php_mbstring.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library 'C:/laragon/bin/php/php-X.X.X-nts-Win32-VC00-x86/ext\php_mbstring.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:/laragon/bin/php/php-X.X.X-nts-Win32-VC00-x86/ext\php_mysqli.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library 'C:/laragon/bin/php/php-X.X.X-nts-Win32-VC00-x86/ext\php_mysqli.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:/laragon/bin/php/php-X.X.X-nts-Win32-VC00-x86/ext\php_openssl.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library 'C:/laragon/bin/php/php-X.X.X-nts-Win32-VC00-x86/ext\php_openssl.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:/laragon/bin/php/php-X.X.X-nts-Win32-VC00-x86/ext\php_pdo_mysql.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library 'C:/laragon/bin/php/php-X.X.X-nts-Win32-VC00-x86/ext\php_pdo_mysql.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:/laragon/bin/php/php-X.X.X-nts-Win32-VC00-x86/ext\php_xsl.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library 'C:/laragon/bin/php/php-X.X.X-nts-Win32-VC00-x86/ext\php_xsl.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP X.X.X (cli) (built: MMM dd yyyy hh:ii:ss)
Copyright (c) yyyy The PHP Group
Zend Engine vZ.Z.Z, Copyright (c) yyyy Zend Technologies
……何故か存在しないパスの PHP (そもそも C:/laragon
のパスに Laragon をインストールしていない) に対して、パッケージがないと警告してきました。
しかもバージョンも Laragon には 8.3系 で入れているはずなのに全く異なるバージョン番号でした。
Laragon の管理画面で右クリック→コンテキストメニューから「ツール」→「Path 環境変数」→「Path に Laragon を追加」で Laragon 関係の環境変数を一通り通して PC 自体の再起動をしても現象は変わりませんでした。
身に覚えのないバージョンの PHP 、そしてインストールパス。環境変数にも追加したはずなのに一向に意図したバージョンの PHP の情報が表示されないという事象。
これは一体どういうことなのか……と一瞬途方に暮れましたが、 何とか原因を突き止めました。
結論
先に結論を述べると、「別の開発用途で入れた Chocolatey に同梱されている PHP を参照していた」というのが今回の根本的な原因でした。
加えて、環境変数もシステム環境変数に Chocolatey のパスが通っており、ユーザ環境変数に追加した Laragon のパスよりもそちらが優先されていたために一向に意図したバージョンの PHP が表示されなかった、というオチでした。
調査
まずは事象の内容から環境変数のパスが正しく通っていないだろうと推測して、上述の通り Laragon 関係の環境変数を一気に追加しました。
が、結果は変わらず。
環境変数 Path の内容を見ると、今追加した Path はユーザ環境変数に追加されていることは確認でき、パスの一覧を検索しましたが PHP を含むパスは Laragon のみ。
どこに意図しないバージョンの PHP がいるのか皆目見当もつかなかったところ、
こちらの記事を参考に PowerShell から where.exe
を実行。
> where.exe php
D:\laragon\laragon\bin\php\php-8.3.13-nts-Win32-vs16-x64\php.exe
C:\ProgramData\chocolatey\bin\php.exe
すると、 Laragon 以外にもう一つ…… Chocolatey に同梱された PHP がいることを突き止めました。
試しにシステム環境変数 Path を見てみると、
C:\ProgramData\chocolatey\bin
C:\ProgramData\chocolatey\bin\php.exe
への足がかりになる、 C:\ProgramData\chocolatey\bin
へのパスが通っていました。
そこで、システム環境変数の Path に D:\laragon\laragon\bin\php\php-8.3.13-nts-Win32-vs16-x64
を追記し、「上へ」で移動して C:\ProgramData\chocolatey\bin
よりも上に持って行きました。
これで優先順位的には Laragon の方が先に探索されるので引っかかるはず……ということで、再度 php -v
。
> php -v
PHP 8.3.13 (cli) (built: Oct 22 2024 21:07:34) (NTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.3.13, Copyright (c) Zend Technologies
漸く意図した PHP のバージョンが表示されました。…… PHP のバージョンを切り替えるだけのつもりが、思ったよりも嵌まってしまいました。