undefined function curl_init() php.iniでのphp_curl.dll読み込みエラー

php8.3にしたら、curl_init()が使えなくなっていた。

まずはcurlの拡張モジュールが必要なのでインストール

https://curl.se/windows

windowsの場合、上からダウンロードする。ほかのモジュールでは違うので、注意。

ダウンロードしたzipファイルを展開して、program filesとかの下に置く。(どこでもいい)

環境変数でシステムパスを通す。

この時点で本来なら使えるはずだが、Apacheのエラーログで読み込めないとのこと。

PHP Warning:  PHP Startup: Unable to load dynamic library 'curl' (tried: C:/php/ext\\curl


extension=curlはコメントアウトしてない。php_curl.dllはextension_dirで指定したフォルダの中にある。

この時点ですでに分からなくなった。

AIに聞くと、

  1. 新しいバージョンでの変更:
    PHP 8.3では、libeay32.dllとssleay32.dllの代わりに、libcrypto-.dllとlibssl-.dllが使用されることが多くなっています.
  2. ファイルの配置:
    これらのDLLファイルは、PHPのインストールディレクトリに配置されるべきです。Windowsのシステムフォルダ(System32など)にコピーするのは推奨されません.
  3. パスの設定:
    PHPのインストールディレクトリをWindowsのPATH環境変数に追加することで、これらのDLLファイルを正しく読み込むことができます
Claude

とのことなので、libcryptoもあるので、PHPのパスを確認すると、システム側にパスを通してなかった。ので追加。

これで、Apacheの再起動を行ったが、まだエラーが出ていたのでPCを再起動すると、Apacheでcurlを読み込めた。

確認点としては、

  • PHPのパスを通す
  • extension_dirには絶対パス
  • extension=curlのコメントアウト外す(デフォでは外れてるはず)
  • curlの拡張モジュールをインストール
  • curl.exeのパスを通す
  • Apacheの再起動
  • PCの再起動も試す
  • OSが古い場合のバージョンの互換性を確認する。ほとんど問題にならないと思うが、ダウンロードするモジュールのバージョンやPHPのバージョンなどは最新のものにして、それがOSで使えるかどうか。