Laravel使用Intervention Image遇PHP Fileinfo扩展报错求助
我之前在使用Intervention Image时也踩过这个一模一样的坑,结合你的情况,给你几个具体的排查和解决步骤:
确认修改的是MAMP实际使用的php.ini文件
MAMP有时候会存在多个php.ini文件,你直接去C:\MAMP\bin\php\php7.1.5下修改的可能不是当前服务器加载的那个。打开MAMP,点击顶部菜单栏的Preferences-> 切换到PHP标签,确认选中的PHP版本是7.1.5,然后点击右侧的Open php.ini按钮,这时候打开的才是服务器真正读取的配置文件,在这个文件里取消注释extension=php_fileinfo.dll。验证PHP是否真的加载了Fileinfo扩展
在你的网站根目录新建一个phpinfo.php文件,内容如下:<?php phpinfo(); ?>访问这个文件(比如
http://localhost/phpinfo.php),在页面里搜索fileinfo:- 如果能找到相关模块信息,说明扩展已经加载成功,这时候可以试试清除Laravel缓存(运行
php artisan cache:clear和php artisan config:clear)再测试你的代码; - 如果找不到,再看页面里的
Loaded Configuration File项,这里显示的就是当前PHP实际加载的配置文件路径,去修改这个路径下的php.ini。
- 如果能找到相关模块信息,说明扩展已经加载成功,这时候可以试试清除Laravel缓存(运行
正确重启MAMP服务
单纯重启电脑可能没彻底关闭MAMP的后台进程。正确的操作是:在MAMP界面点击Stop Servers,然后完全退出MAMP(右键任务栏图标选择退出),等待几秒后再重新打开MAMP并启动服务器。检查extension_dir配置是否正确
打开正确的php.ini文件,找到extension_dir配置项,确认它的值指向PHP扩展的正确目录,比如:extension_dir = "C:\MAMP\bin\php\php7.1.5\ext"同时确认这个目录下确实存在
php_fileinfo.dll文件,如果路径不对或者文件缺失,也会导致扩展加载失败。
另外,再确认下Intervention Image是否已经正确安装:你应该已经运行过composer require intervention/image,并且在config/app.php的providers数组里添加了Intervention\Image\ImageServiceProvider::class,aliases数组里添加了'Image' => Intervention\Image\Facades\Image::class,这些配置没问题的话,解决完扩展问题你的代码就能正常运行了。
内容的提问来源于stack exchange,提问作者Onyx

