在ubuntu16.04上配置ecshop系統的慘痛經歷

前言

ecshop是一套網上購物系統,類似於淘寶,非商業版開源免費,可以供學習使用,在這裏我們用它當作壓力測試的目標。

但就我個人體驗來說,並不太好,我也不太清楚是不是因爲我安裝的ecshop不是最新版的緣故(我安裝的是imooc上提供的鏈接 如下),各種錯誤。

pan.baidu.com/s/1dDAJvZN

現在先寫一些這兩天我安裝時遇到的一些問題吧。

準備Linux(我選的是ubuntu16.04)

服務器可以有兩種選擇,1:虛擬機,2:騰訊雲啊阿里雲啊隨便租一個

ssh 遠程登錄什麼的我就不多說了,假設大家不會卡在這裏。

首先我們配置一個web服務器,包括apache2、php5.6、mysql。

注意,這裏的php不能是7.0,否則安裝ecshop到最後一步你會發現,這個東西不支持在php7.0下訪問mysql。這個我也試圖解決,有人貼出了一個githup上ecshop的補丁,但我點進去時已經404了。也有博客園的dalao特別野,自己生生把那些接口都改了。。表示一波尊敬。。

下邊進行各種包的安裝。

sudo apt install apache2 git vim mysql-server mysql-client

sudo apt-get install -y language-pack-en-base
sudo LC_ALL=en_US.UTF-8add-apt-repository ppa:ondrej/php
sudo apt-add-repositoryppa:ondrej/php
sudo apt upgrade

sudo aptinstall php5.6-common php5.6-gd php5.6-mysql 
sudo apt install libapache2-mod-php5.6

(中間那一大堆是apt的換源操作,我本人事成功了的,如果有什麼地方不行,也可自行百度ubuntu16.04安裝php5)

這樣基本的安裝就結束了,詳細的配置待會再說。

詳細配置(默認會vim的使用)

  • 現在需要你把ecshop.zip這個文件傳到服務器,在mac上直接用scp命令就行了
    scp /Download/Ecshop.zip ubuntu@你服務器的地址

  • 然後在服務端解壓
    uzip Ecshop.zip

  • 將其中的upload文件改名放到~下。(你的文件夾可能不是這個名字,類似操作就好)
    mv Ecshop/upload ~/ecshop

  • 然後進到apache2的配置文件的所在地:cd /etc/apache2中
    sudo vim apache2.conf

  • 大概在150行左右,在標籤中,all denied 改成all granted,防止外部無法訪問到。(:wp)

  • 然後接着在這個目錄下(/etc/apache2)
    sudo vim sites-enabled/000-default.conf

  • 我們可以修改監聽的端口,但我沒有改。主要需要改的是DocumentRoot這個屬性,我們需要把這個地方改成之前cshop的地址(注意最後不要加/)
    DocumentRoot /home/ubuntu/ecshop

  • 然後啓動服務
    service apache2 restart

  • 訪問網站,我們可以看到大概的雛形了

漫長的改bug之旅

1) 上來就是錯。

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP;
ECS has a deprecated constructor in ~/cshop/includes/cls_ecshop.php on line 25



這也是一個版本的問題。。把同名的構造函數改成__constructor就OK了。

class foo{
    foo(){   
    }
}

class foo{
    __construct(){
    }
}

2) 點擊下一步,到達檢查環境,報錯。方法不是靜態的。

Deprecated: Non-static method cls_image::gd_version() should not be called statically in ~/csshop/install/includes/lib_installer.php on line 31
//操作:
vim ~/ecshop/includes/cls_image.php
//把gd::_version()這個函數前加個static就行了,改成這樣:
//static function gd::_version()

3) 我們發現很多不支持,首先看看mysql,支持,那麼就省了很大一部分事。gd是php的一個庫,大概是顯示圖片的。如果你之前按照我的命令執行的話,那麼應該是裝上了php5.6-gd,如果這裏顯示不支持,那就是因爲php.ini文件中沒有打開的緣故了。首先我們需要找到php.ini這個配置文件:

  1. 在~/ecshop下新建一個xx.php文件,裏邊這麼寫:
    <?php
    phpinfo();
    ?>
  2. 去訪問你這個文件,用apache2解釋它,你會看到如下圖的信息,從裏邊找到地址。
    php.ini
    然後我們去修改php.ini這個文件,找到下邊這一行,去掉行首的分號
    extension=php_gd2.all
    重啓apache2
    service apache2 restart

  3. 此時你應該看到支持gif、png等,但是jpeg還是不支持,但其實鍋在ecshop的代碼,我們到這裏改代碼:
    vim install/includes/lib_installer.php
    其中在100行左右的這句話,他把 gd_info[‘JPEG Support’] $ 寫成 gd_info[‘JPG Support’],刷新,解決問題。

4) 很多文件的權限不支持的問題,賦予權限就行了。
sudo chmod -R 777 ~/ecshop
注意是R,不是r。這裏有點想要吐槽的,因爲我的基本功還有些欠缺吧,我在百度解決這個問題的時候,看到有人說是r,我也沒仔細想就去試了,但是老是報錯。。(哭)

5)到這裏第二步就差不多了,目前應該就不報錯了,點擊下一步,配置。然後瞬間又報錯了。大概如這樣:
這裏寫圖片描述
然後一樣的去改第300行,把上邊這行改成下邊這樣。

//return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source);
return preg_replace_callback("/{([^\}\{\n]*)}/",function($r){ return $this->select($r[1]);},$source);



然後是422這行的錯。這裏說的是不能用函數的返回值來當作變量使用。
改成這樣就好:
$tttt = explode(' ',$tag);
$tag_sel = array_shift($tttt);

6)應該沒啥大問題了吧。。哭

效果:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章