PHP Warning:  PHP Startup: Unable to load dynamic library 'curl' ...

まえがき

`xampp` で表題のエラーが出ていたので、それを修正するためのメモです。

:::note info
**私の環境**
+ Windows 10 Home（22H2）
+ `D`ドライブ直下に`xampp`をインストールしています（`D:\xampp`）。
:::

## 1. エラーの内容

以前に書いた記事
「**更新が止まった(?)XAMPPに新バージョンのPHPを導入する**」
で追加導入した`PHP8.3.10`は見た目はちゃんと動いたのですが、
`apache`の`error.log`（`D:\xampp\apache\logs\error.log`）に、`apache`を起動するたび、以下のような9行のエラーが記録されていました。

```conf
[Sun Sep 08 17:52:10.100260 2024] [core:warn] [pid 4956:tid 696] AH00098: pid file D:/xampp/apache/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
PHP Warning:  PHP Startup: Unable to load dynamic library 'curl' (tried: ext\\curl (\xe6\x8c\x87\xe5\xae\x9a\xe3\x81\x95\xe3\x82\x8c\xe3\x81\x9f\xe3\x83\xa2\xe3\x82\xb8\xe3\x83\xa5\xe3\x83\xbc\xe3\x83\xab\xe3\x81\x8c\xe8\xa6\x8b\xe3\x81\xa4\xe3\x81\x8b\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93\xe3\x80\x82), ext\\php_curl.dll (\xe6\x8c\x87\xe5\xae\x9a\xe3\x81\x95\xe3\x82\x8c\xe3\x81\x9f\xe3\x83\x97\xe3\x83\xad\xe3\x82\xb7\xe3\x83\xbc\xe3\x82\xb8\xe3\x83\xa3\xe3\x81\x8c\xe8\xa6\x8b\xe3\x81\xa4\xe3\x81\x8b\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93\xe3\x80\x82)) in Unknown on line 0
[Sun Sep 08 17:52:10.153634 2024] [mpm_winnt:notice] [pid 4956:tid 696] AH00455: Apache/2.4.46 (Win64) OpenSSL/1.1.1h PHP/8.3.10 configured -- resuming normal operations
[Sun Sep 08 17:52:10.153634 2024] [mpm_winnt:notice] [pid 4956:tid 696] AH00456: Apache Lounge VS16 Server built: Oct  2 2020 11:45:39
[Sun Sep 08 17:52:10.153634 2024] [core:notice] [pid 4956:tid 696] AH00094: Command line: 'd:\\xampp\\apache\\bin\\httpd.exe -d D:/xampp/apache'
[Sun Sep 08 17:52:10.169262 2024] [mpm_winnt:notice] [pid 4956:tid 696] AH00418: Parent: Created child process 4192
PHP Warning:  PHP Startup: Unable to load dynamic library 'curl' (tried: ext\\curl (\xe6\x8c\x87\xe5\xae\x9a\xe3\x81\x95\xe3\x82\x8c\xe3\x81\x9f\xe3\x83\xa2\xe3\x82\xb8\xe3\x83\xa5\xe3\x83\xbc\xe3\x83\xab\xe3\x81\x8c\xe8\xa6\x8b\xe3\x81\xa4\xe3\x81\x8b\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93\xe3\x80\x82), ext\\php_curl.dll (\xe6\x8c\x87\xe5\xae\x9a\xe3\x81\x95\xe3\x82\x8c\xe3\x81\x9f\xe3\x83\x97\xe3\x83\xad\xe3\x82\xb7\xe3\x83\xbc\xe3\x82\xb8\xe3\x83\xa3\xe3\x81\x8c\xe8\xa6\x8b\xe3\x81\xa4\xe3\x81\x8b\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93\xe3\x80\x82)) in Unknown on line 0
[Sun Sep 08 17:52:10.817547 2024] [mpm_winnt:notice] [pid 4192:tid 728] AH00354: Child: Starting 150 worker threads.
[Sun Sep 08 17:52:30.086453 2024] [mpm_winnt:crit] [pid 4192:tid 728] AH02538: Child: Parent process exited abruptly. Child process is ending
```

2行目と7行目には全く同じエラーメッセージが書かれており、`\x...`の部分を含めて`PHP`（`echo '...';`）で表示させると、次のような内容でした。

> PHP Warning: PHP Startup: Unable to load dynamic library 'curl' (tried: ext\curl (指定されたモジュールが見つかりません。), ext\php_curl.dll (指定されたプロシージャが見つかりません。)) in Unknown on line 0

このエラーメッセージは、`xampp8.2.12`の頃から出ていたようです。

:::note info
（追加）
私の環境では、xampp8.0の頃からPHPのバージョン切り替えをしていました。
一方、最新版のxampp8.2.12を直接インストールした方は、2・7行目と同様のエラーは出ていなかったと思われます。

現に、私もこの後xampp8.2.12をインストールし直してみたところ、2・7行目と同様のエラーは出ませんでした。（ただし、2・7行目以外のエラーは改善が見られませんでした。）
:::


## 2. 修正できなかった（ネット上の）対応策

Web で情報を探した結果、以下のような対応策が見つかりましたが、いずれも表題のエラーの修正にはつながりませんでした。

+ `php.ini` 中、`extension=curl`をコメントアウトする。
+ `D:\xampp\php\ext`を`Windows`の環境変数に登録する。
+ `php_curl.dll`（など）を他のフォルダへコピーする。
+ `php.ini` 中、`extension_dir = "ext"`を設定する。（→ すでに設定ずみ）

これらのいずれも、解決には至りませんでした。


## 3. 解決策

結論から言うと、以下の手順のように（Apache を更新）すると、表題のエラーは解決できました。

1. [Apacheダウンロードページ](https://www.apachelounge.com/download/ "Apacheダウンロードページ")から、最新の`Apache`（`httpd-2.4.62-240904-win64-VS17.zip`）をダウンロード。
2. ダウンロードした`zip`ファイルを展開（`httpd-2.4.62-240904-win64-VS17`フォルダが作られる）。
3. `XAMPP Control Panel`から`Apache`を停止（Stop）。
4. これまでの`Apache`（`D:\xampp\apache`）を`Apache.bak`にリネーム（`D:\xampp\apache.bak`）。
5. 上記 2 でできた`httpd-2.4.62-240904-win64-VS17`フォルダ直下にある、`Apache24`フォルダを`D:\xampp`フォルダ直下に移動（又はコピー）（→ `D:\xampp\Apache24`）。
6. 上記 5 のフォルダ名を`apache`にリネーム（`D:\xampp\apache`）
7. `D:\xampp\apache\conf`フォルダを`conf.original`にリネーム（`D:\xampp\apache\conf.original`）。
8. `D:\xampp\apache.bak\conf`フォルダを、`D:\xampp\apache`フォルダにコピー（`D:\xampp\apache\conf`)。


## 4. 結果

その後のエラーログは、以下のようになりました。
（PHP Warning の行は無くなりました。）

```conf
[Sun Sep 08 19:28:50.390398 2024] [core:warn] [pid 4140:tid 448] AH00098: pid file D:/xampp/apache/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
[Sun Sep 08 19:28:50.447332 2024] [mpm_winnt:notice] [pid 4140:tid 448] AH00455: Apache/2.4.62 (Win64) OpenSSL/3.1.7 PHP/8.3.10 configured -- resuming normal operations
[Sun Sep 08 19:28:50.447332 2024] [mpm_winnt:notice] [pid 4140:tid 448] AH00456: Apache Lounge VS17 Server built: Sep  4 2024 10:31:52
[Sun Sep 08 19:28:50.447332 2024] [core:notice] [pid 4140:tid 448] AH00094: Command line: 'd:\\xampp\\apache\\bin\\httpd.exe -d D:/xampp/apache'
[Sun Sep 08 19:28:50.447332 2024] [mpm_winnt:notice] [pid 4140:tid 448] AH00418: Parent: Created child process 7404
[Sun Sep 08 19:28:51.080337 2024] [mpm_winnt:notice] [pid 7404:tid 444] AH00354: Child: Starting 150 worker threads.
```

それでもまだ、これら6行のエラーメッセージが、`Apache`を起動するたび追加されます。どなたか、これらを無くす方法がおわかりの方、ヘルプミー！


### 参考サイト

+ [GitHub](https://github.com/php/php-src/issues/12491#issuecomment-1801670557 "GitHub")
+ [その他の参考サイト](https://strix.main.jp/?diys=php_module_load_error "その他の参考サイト")