PHP 5.6.6 上運行 ecshop 2.7.3 不兼容問題整合

 

在安裝完php在本身的服務器上之後, 發如今靜態網頁上出現了不少 error。php

在網上查找事後發現,大部分問題是由於 PHP發展到PHP5.5版本之後,有了不少細微的變化。而ECSHOP官方更新又太慢,發現這些問題後也不及時升級,致使用戶安裝使用過程當中錯誤百出。html

 

在這裏我整理一下我遇到的問題但願對大家能有些幫組也爲了本身之後查看。sql

 

問題1:     服務器

  Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in cls_template.php XXX linecookie

出錯緣由:函數

   出現以上問題是 preg_replace() 函數中用到的修飾符 /e 在 PHP5.5.x 中已經被棄用了。在PHP 5.5以上的版本用 preg_replace_callback 函數替換了 preg_replace函數。this

解決方法:spa

 解決問題的方法就是將代碼中使用 preg_replace 函數的部分所有替換成 preg_replace_callback 函數,而且將一被廢棄的 /e 修飾符 刪除。 .net

例子:  htm

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

   替換爲

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

參考文獻:

   http://www.68ecshop.com/article-1193.html 

   preg_replace 函數介紹 http://php.net/manual/zh/function.preg-replace.php

   preg_replace_callback 函數介紹 http://php.net/manual/zh/function.preg-replace-callback.php

 

問題2:

   Strict Standards: Only variables should be passed by reference in ......\includes\cls_template.php on line 418

出錯緣由:

   出現這個問題的緣由,貌似在php5.4中array_shift只能爲變量,不能是函數返回值。

解決方法:

   $tag_sel = array_shift(explode(‘ ‘, $tag));

   替換成

   $tag_arr = explode(‘ ‘, $tag);
   $tag_sel = array_shift($tag_arr);

 

問題3: 

   Strict Standards: Non-static method cls_image::gd_version() should not be called statically in ......\includes\lib_base.php on line 346   或者

   Strict Standards: Non-static method cls_image::gd_version() should not be called statically in ......\includes\lib_installer.php on line 31

出錯緣由:

   如問題中提示的同樣,由於 cls_image.php 中 gd_version() 不是 static 函數因此在lib_base.php 與 lib_installer.php 中調用時纔會出現以上問題。

解決方法:

  解決方法1:    首先在 lib_image.php 文件中,用 Shift+F 去搜索 gd_version 函數。而後在gd_version 方法前加 static 修飾符,是此函數變成靜態函數。

    解決方法2:    在lib_base.php 與 lib_installer.php 函數中找到 cls_image::gd_version() 部分, 而後分別建立cls_image 實例,以後用建立的實例再去調用 gd_version() 函數。

                      $cls_gile = new cls_image();

                      return $cls_gile->gd_version();

參考文獻:

   http://www.ecshop120.com/ecshop-ercikaifa/article-275.html

 

問題4:

   Deprecated: Assigning the return value of new by reference is deprecated in…

出錯緣由:

   PHP5.3+廢除了」=&」符號,對象複製用」=」

解決方法:

   搜索全部PHP文件,將」=&」替換爲」=」

參考文獻:

   http://www.phpally.com/ecshop%E6%8A%A5%E9%94%99deprecated-assigning-the-return-value-of-%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/comment-page-1/

 

問題5:

   Strict Standards: mktime(): You should be using the time() function instead in ......\admin\shop_config.php on line 32

出錯緣由:

   這個錯誤提示的意思:mktime()方法不帶參數被調用時,會被拋出一個報錯提示。

解決方法:

   $auth = mktime();

   將mktime()替換成time()方法,代碼爲:

   $auth = time();

參考文獻:

   http://www.weste.net/2014/6-18/97356.html

 

問題6:

   Strict Standards: Redefining already defined constructor for class cls_sql_dump ......

出錯緣由:

   緣由跟PHP類中的構造函數有關,PHP早期版本是使用跟類同名的函數做爲構造函數,後來又出現了使用 __construct()做爲構造函數,

   這倆個函數能夠同時存在。到了PHP5.4版本,對這倆個函數在代碼中的前後順序有了嚴格的要求。在PHP5.4版本下,必須__construct() 在前,

   同名函數在後,不然就會出現上面的的錯誤提示。

解決方法:

   把__construct()函數放在,同名函數上面就好了。

參考文獻:

   http://www.ecshop120.com/ecshop-ercikaifa/article-253.html

 

問題7:

   Strict Standards: Declaration of vbb::set_cookie() should be compatible with integrate::set_cookie($username = '', $remember = NULL)

出錯問題:

   vbb繼承了integrate類而且重寫了 set_cookie() 函數,但vbb重寫set_cookie函數的參數 與 其父類set_cookie 的參數不符因此出現以上問題。

解決方法:

   function set_cookie ($username="")
   改成
   function set_cookie ($username="", $remember = NULL)

   如出現相似錯誤,能夠以一樣的方法解決。

參考文獻:

   http://blog.sina.com.cn/s/blog_6f145be10102v2px.html

相關文章
相關標籤/搜索