PHP 7 環境安裝 ECShop V2.7.3 時出現:
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 /path/cls_ecshop.php on line 25
原因:PHP 7 棄用「類名作為構造函數」寫法,統一使用 __construct()。
錯誤代碼(cls_ecshop.php:25):
class ECS {
function ECS() { ... } // 舊式構造函數
}
修復:
class ECS {
function __construct() { ... } // 標準構造函數
}
刷新安裝頁,該錯誤消失。
現象:下一步報錯:
Deprecated: Non-static method cls_image::gd_version() should not be called statically in /path/lib_installer.php on line 31
原因:cls_image::gd_version() 非靜態方法被靜態調用。
修復方案一:改為靜態方法(cls_image.php)
class cls_image {
public static function gd_version() { ... } // 添加 static
}
修復方案二:改為實例調用(lib_installer.php:31)
// 原:cls_image::gd_version()
// 新:
$cls_image = new cls_image();
$cls_image->gd_version();
兩種方式均可解決,推薦方案一(語義更清晰)。
現象:繼續安裝報錯:
Fatal error: Uncaught Error: Call to undefined function mysql_connect()...
根因:PHP 7 完全移除 ext/mysql(已棄用多年),僅支援 mysqli 和 pdo_mysql。
影響:ECShop 核心大量使用 mysql_* 函數,需全量重寫資料庫訪問層。
| 方案 | 工作量 | 風險 | 建議場景 |
|---|---|---|---|
| 全量重寫為 mysqli/pdo | 極大 | 高 | 長期維護項目、團隊有 PHP 7 經驗 |
| 使用 mysql 兼容層(如 php7-mysql-shim) | 小 | 中 | 短期過渡、低流量內部系統 |
| 降級 PHP 5.6(安全維護至 2018/12) | 零 | 極高(安全風險) | 不推薦,僅作臨時緩衝 |
| 遷移至現代框架 | 巨大 | 低(長期) | 重構規劃中、資源充足 |
composer require dshafik/php7-mysql-shim
// 在入口文件最早處 require vendor/autoload.php
該庫實現 mysql_* 函數映射到 mysqli,可作為臨時過渡,但不保證 100% 兼容,且有效能損耗。
ECShop 遷移 PHP 7 面臨三級挑戰:
對於活躍維護的電商系統,建議制定遷移至現代框架(Laravel/Symfony/ThinkPHP)的長期規劃,而非在舊代碼上打補丁。