PHP7.3.11で動いていた Laravle6 のプログラムが、PHPを7.4にアップグレードしたところ、下記のエラーが出た。
Symfony\Component\Debug\Exception\FatalThrowableError
Call to undefined function Illuminate\Encryption\openssl_cipher_iv_length()
内容的には難しくて理解できませんが、openssl とあるので、openssl関連のエラーだろうと思い、phpinfo()で調べてみると、openssl拡張機能そのものが組み込まれていない。
そもそも、公式サイト(https://https://windows.php.net/download#php-7.4)
からダウンロードした Windows パッケージでは、openssl はコンパイル時に組み込まれていないことも判明。
自分でコンパイルするほどの芸はないので、php.ini で extension_openssl を有効化するしかありません。
php.ini-developnent をコピーしてphp.iniを作り、中を見ると、はいはい、ちゃんと無効になっていました。
;extension_openssl
コメントを外して有効化。
extension_openssl
ついでに、extension_dir もコメントアウトされていたので、
;extension_dir = "ext"
外しました。
extension_dir = "ext"
さて Apache2.4を再起動して、phpinfo()で確認すると、、、入っていない!
おかしいな、拡張機能のフォルダは "ext" じゃないのか、そんなはずはないとか、あちこちググった挙句、StackOverflow の次の記事で同じ問題が出ているのを発見しました。
How to enable openSSL in PHP 7.4 with Apache Server 2.4?
https://stackoverflow.com/questions/61919440/how-to-enable-openssl-in-php-7-4-with-apache-server-2-4
この質問者の方は、どうやら自分で解決策を見つけて自己レスされています。
それによると、extension_dir の指定を絶対パスで指定してやるというなんとも単純な話でした。
そこで私も、下記のように変更。
extension_dir = "C:\php-7.4.16\ext"
半信半疑で Apacheを再起動すると、「!」、、正解でした。