PHP7.2下升级Magento 1.9.4.0出错的解决方法
导读
服务器的PHP版本从5.5.9升级到7.2以后,又花了两天时间把公司的Magento网站从1.9.2.4升级到了1.9.4.0,这是目前Magento 1.x的最新版本。升级过程总是出现错误,来来回回折腾了两三次,饶了很多弯路,好在最后终于完成了。
失败的首次升级尝试
一开始是把新下载的Magento文件解压缩之后放在一个干净的目录里,然后把原网站里的配置文件(/app/etc/local.xml)、产品图片库(/media/catalog)、自己定制的主题模版(/app/design/frontend/)、还有另外安装的第三方模块(/app/code/local;/app/code/community)等文件/目录复制到新的网站目录对应的位置,因为这样可以得到一个没有旧版文件比较干净的新版本。
但是Magento的系统相对很复杂,要安装一个功能插件或者主题模版,需要分别添加在很多不同的目录下面。时间久了,就忘了当时的修改记录了。这样在升级的时候,个别的文件可能没有复制齐全,有些依赖到的文件就缺失了。
采用这种方式升级以后,网站前后台能够打开,产品展示也正常,因此一度以为升级成功了。但是仔细检查的时候,发现后台有个别的页面无法正常显示,最明显的两个地方,一是客户的信息管理界面能列出客户清单,但是详细的客户信息页面展示不对;另外一个是订单列表能显示,但是订单详情不能显示。因些这次升级其实是失败了。
查看系统日志,没有找到很明显的报错信息,尝试了很多有可能的原因,包括在命令行下运行升级脚本,都没有解决这个问题。反正直接升级不成功,干脆把公司的网站数据直接升级到Magento 2.x或者迁移到Drupal Commerce上面去的想法了。不过不管是升级到Magento 2.x还是迁移到Drupal,都是麻烦的事,要花费大量的时间成本在这上面。
还是再尝试一下再说。
第二次升级遇到的问题和解决方法
这次采用的方法是直接把新版本的Magento文件解压缩到原来的网站目录,用新版的文件覆盖老版本的文件。做完必要的操作以后,网站的前后台显示的都是空白页面,比第一次都不如!
不过这次的Apache日志给了很清晰的线索,就是在指定的位置找不到mcryptcompat/mcrypt.php这个文件。
[Fri Mar 15 11:50:55.505403 2019] [proxy_fcgi:error] [pid 1902:tid 140270477702912] [client 54.36.148.126:37904] AH01071: Got error 'PHP message: PHP Warning: include_once(mcryptcompat/mcrypt.php): failed to open stream: No such file or directory in /var/www/html/magento/app/Mage.php on line 57\n PHP message: PHP Warning: include_once(): Failed opening 'mcryptcompat/mcrypt.php' for inclusion (include_path='/var/www/html/magento/app/code/local:/var/www/html/ magento/app/code/community:/var/www/html/magento/app/code/core:/var/www/html/ magento/lib:.:/usr/share/php') in /var/www/html/magento/app/Mage.php on line 57\n'
因为PHP7.2版本已经废弃了mcrypt这个模块,所以Magento官方提供了一个替代的功能。只是很奇怪,这个文件不知道为什么没有放在/app/code/core里面,而是放在了lib文件夹里面。这样的话,解决方法就很简单了,复制mcryptcompat/mcrypt.php到/app/code/local/目录或者/app/code/core/目录下就可以了。
再次刷新完成后前后台就能正常打开了,之前发现的问题也都消失了,到目前为止还没发现新的异常问题,应该算是升级成功了吧。
Magento升级总结
1. 升级前一定要做好备份,数据库和文件系统都要做好备份以防万一。
2.多看系统日志。日志报错往往能给我们很多解决问题的方向。
3.吐槽:Magento真的让人又爱又恨。它功能的强大和灵活性毫无疑问是电商系统的翘楚,但是它的复杂和难以驾驭也真让人崩溃。