CentOS8环境下ECShop_V4.0.7安装全攻略&Debug历程

基本环境介绍

  • OS:CentOS8(阿里云ECS)
  • PHP:7.2.11
  • MYSQL:8.0.17
  • APACHE:2.4.37
  • PHPMYADMIN:4.9.5(非必需)

文末有本次Debug全部Reference链接
本文出现的源码仅供交流学习使用

前置操作

ECShop的下载解压以及一些比较简单的操作网上都是,这里就不多说了。说几个坑点。

Apache

  • Apache的conf配置文件一般位于/etc/httpd/目录下。该目录下的conf文件夹为Apache全局配置文件,conf.d文件夹下的文件为虚拟主机配置文件。主要使用conf.d文件夹下的配置文件。示例代码如下:
Listen 2333
<VirtualHost *:2333>
        ServerAdmin [email protected]
        DocumentRoot /ecshop
        ErrorLog /ecshop/log/error_log
        CustomLog /ecshop/log/access_log common
                <Directory "/ecshop">
                        Options Indexes FollowSymLinks
                        AllowOverride All
                        Require all granted
                </Directory>
</VirtualHost>
  • 注意阿里云的安全组策略中需要把相应出入方向端口开启
  • 其余问题直接查看status即可
systemctl status httpd  # 查看Apache状态
systemctl start httpd  # 启动Apache
systemctl restart httpd  # 重启Apache
systemctl stop httpd  # 停止Apache

php

  • 安装php的各种扩展包:很多bug都是由于php扩展包没安装完全导致的,而且没有明确的错误提示,网上资料也很少。下面是一些必须的php扩展包:
    CentOS8环境下ECShop_V4.0.7安装全攻略&Debug历程_第1张图片
    最坑的就是php-json这个扩展包,后续在安装ECShop的时候因为没装这个包导致后台管理界面一直打不开,phpMyAdmin也打不开。这些包可以用yum/rpm/dnf等包管理器安装。

MySQL

  • MySQL相对来说没什么坑点,主要就是记得把安全策略给配一下。若ECShop安装检查环境显示不支持MySQL,那是你php-mysqlnd扩展包没装好。
    MySQL

phpMyAdmin(非必需)

  • 一个非常好用的MySQL后台管理,非必需安装。wget下载V4.9.5版本后解压扔到某目录下,conf.d加一个配置文件把它给配了就行。记得安装php-json扩展包,否则会报错。如果还不行,修改config.sample.inc.php文件,详情参考文末Reference。
    CentOS8环境下ECShop_V4.0.7安装全攻略&Debug历程_第2张图片

ECShop安装

  • 终于到了最关键的一步。下载ECShopV4.0.7,解压。将source文件夹中的appserver和ecshop文件夹移动到某目录下(保证两者在同一目录下),这里以根目录为例。
    根目录
  • 配置Apache conf.d的配置文件,为其添加一个监听VirtualHost。(参考前置操作中的Apache)。这里注意记得在ecshop下创建一个新文件夹log,用于存放日志。
  • 修改权限,避免不可读写。在检查环境时可能会出现某几个文件夹不存在的情况,经检查后发现可能是xftp传输zip文件时丢失数据导致,不过问题不大,丢的都是空文件夹,直接新建就行。
cd /
chown -R apache:apache appserver ecshop
  • 重启Apache服务,访问 ip:port/install/index.php 即可

暴力修改源码Debug

  • 安装:本人在安装ECShop时,最后一步弹出小窗口提示安装的时候,所有子任务都提示OK,但是最后完成瞬间跳转页面的时候闪过无法访问页面,然后又迅速返回安装失败,安装程序被锁定界面。(安装程序锁定把ecshop/data/install.lock删了就能再次安装)
    安装失败
    查看ecshop/log/error_log后发现里面是空的,查看ecshop/log/access_log后发现,在最后安装结束的那一刻,页面被莫名奇妙重定向了一次
    CentOS8环境下ECShop_V4.0.7安装全攻略&Debug历程_第3张图片
    在多次尝试无果后,查看ecshop/install/index.php源码后发现如下代码:
    CentOS8环境下ECShop_V4.0.7安装全攻略&Debug历程_第4张图片
    对应的js源码在/ecshop/install/js/setting.js,为:
    CentOS8环境下ECShop_V4.0.7安装全攻略&Debug历程_第5张图片
    于是我的分析是,在安装程序完成的那一刻,goToDone函数应该会被调用,并跳转到相应页面,这里跳转到了ecshop/install/index.php。然后进入红框所示的if语句,并再次重定向,这才导致了两次页面跳转。但是在实际测试中,我将JS代码location.href改为我自己写的测试php文件,并未发生跳转,这点非常奇怪,现在也不知道为什么,有大佬知道的麻烦在评论区指点一下。
    这里我又去看了下这个“yunqi”,源文件叫ecshop/yunqi_check.php,看了半天也没看懂这是干啥的,我本身也没学过php不太熟。
    既然改JS文件没用,那就直接改php源码吧!
    我先尝试了不使用header函数实现重定向,百度上找了其他的方法试了试都不成功,没耐心了,直接不让程序进入这段分支不就好了吗?然后我就如下图这么改了,多加了个“q”,让它进不了分支。
    修改源码
    修改完后重新安装,果然成功了…

  • Debug-1:无法打开后台管理界面。找了半天原因发现应该是php扩展包php-json没安装导致的,装完之后就能打开了。

  • Debug-2:满心欢喜打开ECShop主页,发现MySQL错误:
    MySQL错误
    然后我刷新一下,又能正常访问了。后来发现,在浏览器没有保存该网址的cookie时第一次访问该网页是会报错的,在第一次访问保存cookie后,后续几次访问就可以正常访问。但是我需要用Jmeter对其作性能测试,在Jmeter中发送请求,如果不添加 HTTP Cookie Manager 返回的Response Data全是MySQL错误。这样就很不方便所以我再次尝试修复这个坑爹的Bug。
    先看看报错的内容,INSERT INTO语句报语法错误,我用phpMyAdmin直接将原SQL语句输入测试发现真的是语法错误。经过研究发现这可能是高版本MySQL的特性吧,INSERT INTO 的字段属性名需要加上``这种引号才行,而且visit_times和access_time两个字段需要int型value,原语句是chars。修改之后在phpMyAdmin执行插入成功。剩下的问题就是如何找到这个SQL语句在源代码中的位置并进行修改了。
    这里我用到了VS Code的搜索功能,选择ecshop文件夹作为Folder打开VS Code,在搜索栏搜索关键字:
    CentOS8环境下ECShop_V4.0.7安装全攻略&Debug历程_第6张图片
    关键文件:lib_main.php
    vim打开该文件,输入“/sql”查找关键字后发现:
    CentOS8环境下ECShop_V4.0.7安装全攻略&Debug历程_第7张图片
    终于找到了,然后修改了就完事了。(上图就是修改后的)

Reference

  • CentOS下Apache默认安装路径:https://blog.csdn.net/Jeremy__Lin/article/details/80544860
  • Centos7 完全卸载mysql:https://www.jianshu.com/p/ef58fb333cd6
  • CentOS8 安装MySQL 8.0:https://www.cnblogs.com/kasnti/p/11929030.html
  • Centos7.2安装ecshop:https://blog.csdn.net/yangchuan_csdn91/article/details/69533282
  • apache AH01630: client denied by server configuration错误解决方法:https://blog.csdn.net/fdipzone/article/details/40512229
  • 简要谈谈php中mysql,mysqli,mysqlnd,pdo到底是什么:https://blog.csdn.net/u013785951/article/details/60876816/
  • CentOS7默认安装PHP不支持MySQL的办法:https://www.cnblogs.com/richarwoo/p/5408885.html
  • CentOS 7 完全卸载PHP:https://blog.csdn.net/sinat_32829963/article/details/81556800
  • 在CentOS 8上安装并保护PhpMyAdmin:https://0xzx.com/202001140332454097.html
  • centos出现“FirewallD is not running”怎么办:https://www.cnblogs.com/rxbook/p/8110143.html
  • phpmyadmin getCookie() on null:https://blog.csdn.net/SakuraLLj/article/details/104390066

你可能感兴趣的:(php,linux,centos,apache,mysql)