Call to undefined function Illuminate\Encryption\openssl_cipher_iv_length()

これはLaravelで出たエラーだが、OpenSSLのバージョンが低く、関数がないというのが最初に思いつく原因だと思う。

OpenSSLを更新すれば問題ないが、自分の原因はそこではなかった。

OpenSSLを更新できなければ、以下のように

app/Providers/EncryptionServiceProvider.phpファイル作成。

<?php

namespace App\Providers;

use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\ServiceProvider;

class EncryptionServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        if (App::runningUnitTests()) {
            return;
        }

        if (! function_exists('openssl_cipher_iv_length')) {
            Config::set('app.cipher', 'AES-256-CBC');
        }
    }
}

config/app.phpファイルのproviders配列に次の行を追加

/*
 * Package Service Providers...
 */
App\Providers\EncryptionServiceProvider::class,

この修正により、openssl_cipher_iv_length()関数が存在しない場合に、暗号化キーの長さを256ビットに設定するようになります。

以上でも解決できない場合、根本的にPHPの拡張機能のOpenSSLを読み込めていない場合がある。

その場合、php.iniの

extension=openssl
extension=ext

これらがコメントアウトされていないことを確認する。

そしてextension=extのときは、絶対パスを指定したほうがいい。

例えば、C:/php/ext のようにすると読み込める。これでphpinfo(); を確認して拡張機能が読み込めていることを確認する。