OpenCart迁移问题

今天在迁移公司商城的时候,按照OpenCart一般的迁移步骤,导入数据库和程序文件,设置好Nginx解析,一切都很顺利,最后打开网站出现了两个问题:

  1. 出现报错YOU NEED THE PHP "DOMDocument" EXTENSION INSTALLED(原因是系统没有安装php-xml扩展)
  2. 商品图片无法显示(样式正常)(原因是config文件中的路径没有使用绝对路径)
  3. 后台登录不跳转(原因是session存储目录没有写入权限)
  4. 后台无法上传图片(原因是图片目录没有读写权限)
  5. 列表页无法显示(原因是渲染路径拼写错误)

注:服务器环境——CentOS 6.9 + Nginx 1.10 + MariaDB 10.3 + PHP 5.6

解决办法

1. 缺少php-xml扩展

根据PHP版本安装相应的扩展,我的是PHP 5.6,所以应该安装php56w-xml扩展:

yum install -y php56w-xml

安装完成后记得要重启php-fpm进程:

service php-fpm restart

重新打开页面,可以正常打开页面了,但是出现了第2个问题,商品图片无法显示。

2. 商品图片无法显示

用Chrome工具看了一下,商品列表中的图片src显示为unknown,直觉是路径有问题,但是PHP脚本路径问题,还是图片路径问题,还无法确定,需要继续排查:

  1. 查看数据库中product表中图片的路径,一切正常,没有乱码,说明可以排除这个问题;
  2. 查看config.php文件中的路径配置,发现路径中使用了软链接/www/而没有使用绝对路径,这种用法很容易导致程序运行出错

所以果断更换了该路径为/home/www/,重新上传到网站根目录和admin下的两个config.php文件,两个均需要修改。
再次打开网页,图片已经可以正常显示。

3. 后台登录不跳转

后台登录无法跳转,首先需要从Nginx错误日志寻找线索,日志级别设为warn,不要使用debug级别,日志记录太过详细导致几百行日志记录看不到问题所在。

SessionHandler::read(): open(/var/lib/php/session/sess_****************, O_RDWR) failed: Permission denied (13)

找到问题所在,解决就简单了,转到/var/lib/php/session目录,设置session目录权限为755即可

# chmod 755 session/

至此迁移的问题基本全部解决,记录下来备查,希望能帮到碰到类似问题的同行。

4. 后台无法上传图片

检查Nginx日志发现的问题是:

[error]  open() "/www/www.domain.com/tm/searchTrademarkList.do" failed (2: No such file or directory)

此问题和前面的第2个问题一样是因为/www/路径为软链接路径,是在Nginx解析配置www.domain.com.conf中使用了该路径,改成/www/的绝对路径/home/www/即可。

解决路径问题,只是其一,上传时仍然会提示如下错误:

It was not possible to complete the request due to file system permission restrictions.

这是CKEditor编辑器的报错,这种报错多半是上传路径的权限不足导致的:

// 到网站根目录为image及其子目录catalog提权到777
//(注:此处也有可能是用户、组的问题导致的,比如上传时使用的是root权限,执行时是其他用户,那就需要修改用户、组)
chmod 777 image;
chmod 777 image/catalog

// 如果 catalog下存在子目录还需要将子目录一并提权
// 列出子目录
cd  /image/catalog && ls -F | grep '/$'
chmod 777 1/  10/  2/ 22/  

// 同时需要将子目录的缩略图目录提权(如果不提权会导致虽然上传成功,但是仍然无法选择使用已上传的图片)
cd /image/cache/catalog && ls -F | grep '/$'
chmod 777 1/  10/  2/ 22/  

回到后台检查,OK,可以正常上传了。
如果上述办法仍然不能解决问题,请参考CKEditor官网提供的问题排查方法检查:CKEditor问题排查

5. 列表页无法显示

控制器下的/catalog/controller/product/categorylist.php在渲染输出时误将product/Categorylist中的Categorylist首字母大写,这个错误在Windows Server 2008上正常运行,但是迁移到CentOS上后却无法渲染了,页面显示空白,调试之后发现只是一个字母的问题。

// 错误写法
$this->response->setOutput($this->load->view('product/Categorylist', $data));

// 正确写法
$this->response->setOutput($this->load->view('product/categorylist', $data));

你可能感兴趣的:(OpenCart)