【已解决】Laravel Class encrypter does not exist No supported encrypter found. The cipher

Laravel 报错加密类找不到。Class encrypter does not exist. No supported encrypter found.

Laravel 5.1 加密类找不到问题

Laravel 项目运行时,报错:

No supported encrypter found. The cipher and / or key length are invalid
Class encrypter does not exist

刚开始以为是,加密拓展没装好,实际上是app密钥没生成、配置到位。

解决否

已解决

方案

点断点, 断到: \Illuminate\Encryption\EncryptionServiceProvider::register

发现读取了配置,配置里面的 key 没初始化。

$ php artisan key:generate

$ php aritsan config:cache

生成的 key 要写入到配置文件里。这配置一般是在 /app/config.php 目录里,实际请按照个人项目来。

这里报错就是因为,随便写了一个字符串,长度不符合key的40长度,导致报错密钥长度不够。

Laravel 加速

Laravel 一时爽,上线火葬场。赶紧优化一下,不然Laravel做的项目就只剩下优雅的代码了。

好慢

是的,在Laravel开发模式下,有时候会有种在开发JSP应用的感觉一样,改一下重启一下Tomcat的那种速度。

发布到线上,访问的人一多CPU就100%了。

这篇文章就是来改进这个的,让你的Laravel应用加速。

官方推荐

以下Laravel自己优化自己的一些操作。

## 类映射加载优化 ,额,这个命令在Laravel5.6 被移除了
$ php artisan optimize
$ php artisan clear-compiled ## 清理上面的缓存

## 把配置信息 缓存一下
$ php artisan config:cache
$ php artisan config:clear  ## 清理缓存

## 把路由缓存一下
$ php artisan route:cache
$ php artisan route:clear ## 清理缓存

如果你在开发Laravel 过程中,配置没改,路由没改,那么可以把配置,和路由缓存加速一下。

composer 优化

接下来就是路由加速

来自

生成 classmap

执行命令

$ composer dump-autoload --optimize
$ composer dump-autoload -o  ## 或者是简写

这个命令的本质是将 PSR-4/PSR-0 的规则转化为了 classmap 的规则, 因为 classmap 中包含了所有类名与类文件路径的对应关系,所以加载器不再需要到文件系统中查找文件了。可以从 classmap 中直接找到类文件的路径。

权威的(Authoritative)classmap

$ composer dump-autoload --classmap-authoritative
$ composer dump-autoload -a 

执行这个命令隐含的也执行了 Level-1 的命令, 即同样也是生成了 classmap,区别在于当加载器在 classmap 中找不到目标类时,不会再去文件系统中查找(即隐含的认为 classmap 中就是所有合法的类,不会有其他的类了,除非法调用)

注意事项
如果你的项目在运行时会生成类,使用这个优化策略会找不到这些新生成的类。

使用 APCu cache

$ composer dump-autoload --apcu

使用这个策略需要安装 apcu 扩展。
apcu 可以理解为一块内存,并且可以在多进程中共享。
这种策略是为了在 Level-1 中 classmap 中找不到目标类时,将在文件系统中找到的结果存储到共享内存中, 当下次再查找时就可以从内存中直接返回,不用再去文件系统中再次查找。

在生产环境下,这个策略一般也会与 Level-1 一起使用, 执行composer dump-autoload -o –apcu, 这样,即使生产环境下生成了新的类,只需要文件系统中查找一次即可被缓存 , 弥补了Level-2/A 的缺陷。

Opcache 加速

PHP 5.5 都默认打包了该扩展。在配置中启用即可。

下面是一个简单的默认配置:

/etc/php/7.3/fpm/conf.d/10-opcache.ini

; configuration for php opcache module
; priority=10
zend_extension=opcache.so

opcache.enable=1

opcache.memory_consumption=128

opcache.interned_strings_buffer=8

opcache.max_accelerated_files=4000

opcache.revalidate_freq=60