ereg_repace.

本文介绍了当使用PHP5.3及其以上版本时遇到的ereg_replace等废弃函数问题及解决方案,包括如何更改php.ini文件来确保网站正常运行。

出现这种情况时,你可能用了PHP5.3乃至更高的PHP版本,目前很多cms中有很多地方的正则函数都用的ereg_replace,而这个函数现在在PHP5.3中已经被废止了。意思是不能用了。

被放弃的函数有:
ereg()
eregi();
set_magic_quotes_runtime();
split
mysql_close();  //将不支持全部关闭, 需要改为:mysql_close($link);

以下变更:
magic_quotes_gpc()       将永远为1;
Zend Optimizer   仍然没有支持.

如果一定要用php5.3,请修改php.ini中下面代码

;extension=php_mbstring.dll
改为
extension=php_mbstring.dll


;mbstring.func_overload = 0
修改为:
mbstring.func_overload = 7

 

[root@yfw ~]# cd /www/wwwroot/szrengjing.com [root@yfw szrengjing.com]# ls -la total 37344 drwxr-xr-x 27 www www 4096 Nov 8 15:09 . drwxr-xr-x 12 www www 4096 Nov 8 14:50 .. -rwxr-xr-x 1 www www 138 Oct 9 2023 404.html -rwxr-xr-x 1 www www 5877 Oct 9 2023 activity.php drwxr-xr-x 12 www www 4096 Nov 6 15:39 admin -rwxr-xr-x 1 www www 6898 Oct 9 2023 affiche.php -rwxr-xr-x 1 www www 3377 Oct 9 2023 affiliate.php -rwxr-xr-x 1 www www 2150 Oct 9 2023 ajax_68ecshop.php -rwxr-xr-x 1 www www 2964 Oct 9 2023 ajax_www_68ecshop_com.php -rwxr-xr-x 1 www www 263 Oct 9 2023 alipay.html -rwxr-xr-x 1 www www 1505 Oct 11 2023 animated_favicon.gif drwxr-xr-x 3 www www 4096 Sep 22 11:20 api -rwxr-xr-x 1 www www 18060 Oct 9 2023 api.php drwxr-xr-x 7 www www 4096 Oct 9 2023 app -rwxr-xr-x 1 www www 2367 Oct 9 2023 apply_index.php -rwxr-xr-x 1 www www 16339 Oct 9 2023 apply.php -rwxr-xr-x 1 www www 5333 Oct 9 2023 article_cat.php -rwxr-xr-x 1 www www 6934 Oct 9 2023 article_list.php -rwxr-xr-x 1 www www 9249 Oct 9 2023 article.php -rwxr-xr-x 1 www www 18629 Oct 9 2023 auction.php -rwxr-xr-x 1 www www 17932 Oct 9 2023 brand.php -rwxr-xr-x 1 www www 1104 Oct 9 2023 captcha.php -rwxr-xr-x 1 www www 2174 Oct 9 2023 catalog.php -rwxr-xr-x 1 www www 39916 Oct 9 2023 category.php drwxr-xr-x 2 www www 4096 Oct 9 2023 cert -rwxr-xr-x 1 www www 1401 Oct 9 2023 certi.php -rwxr-xr-x 1 www www 15792 Nov 7 02:57 chat.php -rwxr-xr-x 1 www www 989 Nov 7 09:55 check_kefu_config.sh -rwxr-xr-x 1 www www 2034 Oct 9 2023 chinabank_receive.php -rwxr-xr-x 1 www www 10996 Oct 9 2023 comment_add.php -rwxr-xr-x 1 www www 13581 Oct 9 2023 comment.php -rwxr-xr-x 1 www www 6351 Oct 9 2023 compare.php -rwxr-xr-x 1 www www 254 Jul 12 02:15 composer.json -rw-r--r-- 1 www www 37709 May 22 18:11 composer.lock -rwxr-xr-x 1 www www 1376 Oct 9 2023 cycle_image.php drwxrwxrwx 24 www www 4096 Jul 20 19:33 data -rwxr-xr-x 1 www www 3010 Oct 9 2023 delete_cart_goods.php -rwxr-xr-x 1 www www 11106 Oct 9 2023 denglu.php -rwxr-xr-x 1 www www 158 Oct 9 2023 dl_receiver.php -rwxr-xr-x 1 www www 2622 Oct 9 2023 erweima_png.php -rwxr-xr-x 1 www www 1540 Oct 9 2023 erweima_supplier.php -rwxr-xr-x 1 www www 32199 Oct 9 2023 exchange.php -rwxr-xr-x 1 www www 1099 Oct 17 2023 favicon.ico -rwxr-xr-x 1 www www 10874 Oct 9 2023 feed.php -rwxr-xr-x 1 www www 19019 Oct 9 2023 findPwd.php -rwxr-xr-x 1 www www 934 Nov 5 14:28 fix_login.sh -rwxr-xr-x 1 www www 4370 Oct 9 2023 flash.js -rwxr-xr-x 1 www www 173212 Apr 5 2025 flow.php -rwxr-xr-x 1 www www 2357 Oct 9 2023 gallery.php -rwxr-xr-x 1 www www 4929 Oct 9 2023 goods_comment.php -rwxr-xr-x 1 www www 53111 Nov 9 2024 goods.php -rwxr-xr-x 1 www www 6504 Oct 9 2023 goods_script.php -rwxr-xr-x 1 www www 2954 Oct 9 2023 goods_shaidan.php -rwxr-xr-x 1 www www 13636 Oct 9 2023 group_buy.php -rwxr-xr-x 1 www www 9227 Oct 9 2023 help.php -rwxr-xr-x 1 www www 9249 Apr 24 2024 .htaccess -rwxr-xr-x 1 www www 2186 Nov 7 10:15 http-bind.php drwxr-xr-x 25 www www 4096 Oct 1 16:29 images drwxr-xr-x 10 www www 4096 Jun 3 18:25 includes -rwxr-xr-x 1 www www 25211 Jul 20 11:32 index.php -rwxr-xr-x 1 www www 3605 Oct 9 2023 Iogo.png -rwxr-xr-x 1 www www 3996 Jun 29 2010 jb51.net.txt drwxr-xr-x 7 www www 4096 Oct 9 2023 js drwxr-xr-x 2 www www 4096 Nov 7 20:28 kefu -rw-r--r-- 1 root root 646 Nov 7 04:53 kefu_scan_report.txt -rwxr-xr-x 1 www www 10111 Oct 9 2023 kuaidi.php drwxr-xr-x 3 www www 4096 Oct 9 2023 languages -rwxr-xr-x 1 www www 1628 Sep 1 2013 licence.txt -rwxr-xr-x 1 www www 950 Oct 9 2023 login_act_ajax.php -rwxr-xr-x 1 www www 86251 Nov 11 2023 login_dl.jpg -rw-r--r-- 1 www www 879 Jun 5 00:41 login_handler.php -rwxr-xr-x 1 www www 1087 Nov 5 14:49 login.sh drwxr-xr-x 2 www www 4096 Nov 7 05:16 logs -rwxr-xr-x 1 www www 10629 Oct 9 2023 message.php drwxr-xr-x 20 www www 4096 Jan 1 2024 mobile -rwxr-xr-x 1 www www 16 Oct 9 2023 MP_verify_saEliKc9osXXdN26.txt -rwxr-xr-x 1 www www 4185 Oct 9 2023 myship.php -rw-r--r-- 1 www www 31395840 May 21 09:18 node-v22.16.0-x64.msi -rwxr-xr-x 1 www www 701 Oct 9 2023 other.php -rw-r--r-- 1 root root 97 Jun 4 20:56 package.json -rw-r--r-- 1 www www 23844 Jun 4 20:57 package-lock.json -rwxr-xr-x 1 www www 3998 Oct 9 2023 package.php -rwxr-xr-x 1 www www 3453 Nov 8 15:10 php5-to-php7-scan.sh -rwxr-xr-x 1 www www 4512 Aug 16 21:06 php_upgrade_audit.php -rwxr-xr-x 1 www www 11916 Oct 9 2023 pick_out.php drwxr-xr-x 3 www www 4096 Jun 14 2024 plugins -rwxr-xr-x 1 www www 1168 Oct 9 2023 pm.php -rwxr-xr-x 1 www www 46294 Oct 9 2023 pre_sale.php -rwxr-xr-x 1 www www 1339 Oct 9 2023 pricecut.php -rwxr-xr-x 1 www www 38435 Oct 9 2023 pro_goods.php -rwxr-xr-x 1 www www 36542 Oct 9 2023 pro_search.php -rwxr-xr-x 1 www www 399 Nov 7 18:26 qrcode.png -rwxr-xr-x 1 www www 5940 Oct 9 2023 question.php -rwxr-xr-x 1 www www 6341 Oct 9 2023 quotation.php drwxr-xr-x 2 root root 4096 Jul 12 02:15 ratchet-project -rwxr-xr-x 1 www www 6335 Oct 9 2023 README.md -rwxr-xr-x 1 www www 3298 Oct 9 2023 receive.php -rwxr-xr-x 1 www www 1754 Oct 9 2023 record.php -rwxr-xr-x 1 www www 1354 Oct 9 2023 region.php -rw-r--r-- 1 www www 21436 Nov 5 09:38 register.php -rwxr-xr-x 1 www www 0 Oct 9 2023 request.log -rwxr-xr-x 1 www www 3209 Oct 9 2023 respond.php -rwxr-xr-x 1 www www 2598 Oct 9 2023 respondwx.php -r-------- 1 www www 584 Oct 9 2023 robots.txt -rwxr-xr-x 1 www www 989 Jul 8 06:13 save_chat_record.php -rwxr-xr-x 1 www www 3798 Oct 9 2023 scan_list.php -rwxr-xr-x 1 www www 473 Oct 9 2023 scan.php -rw-r--r-- 1 www www 1791 Aug 14 19:32 scirpt.php -rwxr-xr-x 1 www www 34034 May 6 2025 search.php -rwxr-xr-x 1 www www 47739 Dec 30 2024 security.php -rwxr-xr-x 1 www www 642 Jul 20 06:28 send_msg.php -rwxr-xr-x 1 www www 28216 Sep 21 19:08 service_chat.html -rwxr-xr-x 1 www www 4668 Oct 9 2023 sitemaps.php -rwxr-xr-x 1 www www 108865 Dec 15 2024 sitemaps.xml drwxr-xr-x 3 www www 4096 Oct 9 2023 sms -rwxr-xr-x 1 www www 17076 Oct 9 2023 snatch.php drwxr-xr-x 2 www www 4096 Oct 9 2023 sound drwxr-xr-x 2 root root 4096 Nov 7 04:31 static -rwxr-xr-x 1 www www 9857 Oct 9 2023 stores.php -rwxr-xr-x 1 www www 3645 Jul 20 11:18 Strophe.php -rwxr-xr-x 1 www www 2811 Nov 5 19:34 submit_rating.php drwxr-xr-x 8 www www 4096 May 22 18:58 supplier -rwxr-xr-x 1 www www 8010 Oct 9 2023 supplier_article.php -rwxr-xr-x 1 www www 18413 Oct 9 2023 supplier_category.php -rwxr-xr-x 1 www www 13173 Oct 9 2023 supplier_index.php -rwxr-xr-x 1 www www 1629 Oct 9 2023 supplier_other.php -rwxr-xr-x 1 www www 1933 Oct 9 2023 supplier.php -rwxr-xr-x 1 www www 401 Nov 7 18:26 supplier.png -rwxr-xr-x 1 www www 1825 Oct 9 2023 supplier_reg.php -rwxr-xr-x 1 www www 11939 Oct 9 2023 supplier_search.php -rw-r--r-- 1 www www 5864 Nov 5 01:54 sync_openfire.php -rwxr-xr-x 1 www www 1726 Oct 9 2023 tag_cloud.php -rwxr-xr-x 1 www www 12604 Oct 9 2023 takegoods.php -rw-r--r-- 1 root root 2017 Nov 6 11:43 'tat -tulpn | grep 9090' drwxr-xr-x 7 www www 4096 Sep 5 00:05 temp -rwxr-xr-x 1 www www 1791 Nov 7 10:33 test-chat.html -rwxr-xr-x 1 www www 869 Nov 6 13:42 test-connection.html -rwxr-xr-x 1 www www 2150 Nov 7 10:28 test-full-login.html -rwxr-xr-x 1 www www 736 Nov 4 17:33 test.php -rw-r--r-- 1 root root 619 Oct 31 15:48 test-strophe.html -rw-r--r-- 1 root root 234 Nov 5 09:08 test_xmpp.php drwxr-xr-x 10 www www 4096 Oct 9 2023 themes -rwxr-xr-x 1 www www 5570 Oct 9 2023 topic.php drwxr-xr-x 3 www www 4096 Oct 9 2023 ueditor -rw-r--r-- 1 root root 2292786 Aug 16 21:07 upgrade_issues.txt -rw-r--r-- 1 root root 72001 Nov 8 15:12 upgrade_scan_report.txt -rwxr-xr-x 1 www www 2972 Oct 9 2023 url301.php -rw-r--r-- 1 root root 47 Oct 9 2023 .user.ini -rwxr-xr-x 1 www www 205685 Aug 17 11:56 user.php -rwxr-xr-x 1 www www 4752 Jan 14 2025 validate.php drwxr-xr-x 9 www www 4096 May 22 18:11 vendor -rwxr-xr-x 1 www www 57184 Oct 9 2023 virtual_group_goods.php -rwxr-xr-x 1 www www 17809 Oct 9 2023 virtual_group.php -rwxr-xr-x 1 www www 3397 Oct 9 2023 vote.php drwxr-xr-x 4 www www 4096 Oct 9 2023 wap drwxr-xr-x 3 root root 4096 Jun 5 12:36 .well-known -rw-r--r-- 1 www www 3823 Apr 11 2025 wget-log -rwxr-xr-x 1 www www 20686 Oct 9 2023 wholesale.php drwxr-xr-x 3 www www 4096 Oct 9 2023 widget -rwxr-xr-x 1 www www 428 Apr 6 2025 wxpay_notify.php -rw-r--r-- 1 root root 255 Nov 7 10:10 'XMPP Login Test' -rwxr-xr-x 1 www www 2726 Apr 6 2025 z1988com.php -rwxr-xr-x 1 www www 540 Oct 9 2023 安装说明.txt -rwxr-xr-x 1 www www 2392064 Oct 9 2023 模板修改教程.doc -rwxr-xr-x 1 www www 114 Feb 27 2013 脚本之家.url [root@yfw szrengjing.com]# 用脚sh 扫描站点 szrengjing.com 全站文件 从php5.3升级到php7.4 ecshop2.7.3版 一起要修改多少地方 才能让网站稳定运行 需要修改哪些代码 修改前及修改后做一个对比
11-09
你提出的问题非常典型:**将一个基于 PHP 5.3 的老旧 ECShop 2.7.3 站点升级到 PHP 7.4 并确保稳定运行**。这是一个涉及 **兼容性修复、函数弃用处理、语法变更适配、数据库连接方式更新、安全加固** 的综合性工程。 --- ## ✅ 一、背景分析 ### 当前环境: - **站点路径**:`/www/wwwroot/szrengjing.com` - **PHP 版本**:原为 PHP 5.3(已废弃) - **目标版本**:PHP 7.4(仍受支持,但注意 8.0+ 更现代) - **系统框架**:ECShop 2.7.3(开源电商系统,基于 Smarty 模板引擎) - **关键特征**: - 大量 `.php` 文件使用 `mysql_*` 函数(PHP 7 已彻底移除) - 使用了 `create_function()`、`ereg*`、`split()` 等已被弃用的函数 - 可能存在 `&$var` 引用赋值等旧语法 - 存在 Shell 脚本辅助工具(如 `check_kefu_config.sh`, `fix_login.sh`) --- ## ✅ 二、从 PHP 5.3 升级到 PHP 7.4 需要修改的核心问题 | 类别 | PHP 5.3 支持 | PHP 7.4 不再支持或行为改变 | |------|-------------|----------------------------| | MySQL 扩展 | `mysql_connect()`, `mysql_query()` | ❌ 已删除,必须替换为 `mysqli_*` 或 PDO | | 正则函数 | `ereg()`, `ereg_replace()` | ❌ 删除 | | 字符串分割 | `split()` | ❌ 删除,改用 `explode()` | | 动态函数创建 | `create_function()` | ⚠️ 废弃(7.2+),建议改为匿名函数 | | 错误处理 | `E_STRICT` 是 NOTICE | 在 7.4 中更严格报错 | | 八进制解析 | `"08"` 视为 0 | 现在抛出警告 | | `=&` 引用赋值 | 允许对象引用赋值 | 对象默认按引用传递,无需 `&` | | 不带引号的数组索引 | `$arr[key]` → 自动转字符串 | 现在会触发 `notice` | --- ## ✅ 三、自动化扫描脚本(Bash + grep)检测潜在问题 你可以使用以下 Bash 脚本自动扫描全站文件中的不兼容代码: ```bash #!/bin/bash # filename: php5-to-php7-scan.sh # author: dev # desc: 扫描 ecshop 项目中与 PHP 7.4 不兼容的代码片段 PROJECT_DIR="/www/wwwroot/szrengjing.com" LOG_FILE="$PROJECT_DIR/upgrade_scan_report.txt" echo "开始扫描 $PROJECT_DIR 中的 PHP 兼容性问题..." > "$LOG_FILE" # 1. 查找 mysql_* 函数调用 echo -e "\n\n=== 【危险】mysql_* 函数(必须替换为 mysqli 或 PDO) ===\n" >> "$LOG_FILE" grep -r "mysql_" "$PROJECT_DIR/" --include="*.php" | grep -v "mysql_"*"" | grep -v ".min.js" >> "$LOG_FILE" # 2. 查找 create_function() echo -e "\n\n=== 【废弃】create_function() 使用情况 ===\n" >> "$LOG_FILE" grep -r "create_function" "$PROJECT_DIR/" --include="*.php" >> "$LOG_FILE" # 3. 查找 split() 和 ereg() echo -e "\n\n=== 【已删除】split()/ereg() 正则函数 ===\n" >> "$LOG_FILE" grep -r "split(" "$PROJECT_DIR/" --include="*.php" >> "$LOG_FILE" grep -r "ereg(" "$PROJECT_DIR/" --include="*.php" >> "$LOG_FILE" # 4. 查找 &\$ 引用赋值(特别是 new 的时候) echo -e "\n\n=== 【过时】&$object = &new ClassName(); ===\n" >> "$LOG_FILE" grep -r "& *new" "$PROJECT_DIR/" --include="*.php" >> "$LOG_FILE" # 5. 查找未加引号的数组键(如 $foo[bar]) echo -e "\n\n=== 【警告】未加引号的数组索引(应为 \$arr['key']) ===\n" >> "$LOG_FILE" grep -rP '\$\w+\[[a-zA-Z_][a-zA-Z0-9_]*\]' "$PROJECT_DIR/" --include="*.php" | grep -v "\['" | grep -v '"]' >> "$LOG_FILE" # 6. 查找被移除的函数(extract() 配合不安全 flags) echo -e "\n\n=== 【注意】extract(\$arr, EXTR_OVERWRITE) 等危险用法 ===\n" >> "$LOG_FILE" grep -r "extract(" "$PROJECT_DIR/" --include="*.php" >> "$LOG_FILE" # 7. 输出完成信息 echo "扫描完成!报告已保存至: $LOG_FILE" ``` ### 使用方法: ```bash cd /www/wwwroot/szrengjing.com chmod +x php5-to-php7-scan.sh ./php5-to-php7-scan.sh cat upgrade_scan_report.txt ``` --- ## ✅ 四、常见需手动修改的代码示例(对比前后) ### 示例 1:替换 `mysql_connect()` → `mysqli_connect()` #### 修改前(PHP 5.3): ```php // includes/cls_mysql.php $this->link_id = @mysql_connect($host, $username, $password); mysql_select_db($db_name, $this->link_id); mysql_query("SET NAMES utf8"); ``` #### 修改后(PHP 7.4): ```php $this->link_id = @mysqli_connect($host, $username, $password, $db_name); if (!$this->link_id) { die('Connect Error: ' . mysqli_connect_error()); } mysqli_set_charset($this->link_id, 'utf8'); ``` > 📌 注意:ECShop 原生封装了 `cls_mysql` 类,你需要重写这个类以支持 `mysqli`。 --- ### 示例 2:替换 `create_function()` → 匿名函数 #### 修改前: ```php call_user_func_array(create_function('$a,$b', 'return $a + $b;'), [1,2]); ``` #### 修改后: ```php $add = function($a, $b) { return $a + $b; }; call_user_func_array($add, [1,2]); ``` 或者直接传入闭包: ```php call_user_func_array(function($a, $b) { return $a + $b; }, [1,2]); ``` --- ### 示例 3:替换 `split()` → `explode()` #### 修改前: ```php $parts = split('\.', $version); ``` #### 修改后: ```php $parts = explode('.', $version); ``` --- ### 示例 4:修复 `&new` 写法 #### 修改前: ```php $obj = &new ClassName(); ``` #### 修改后: ```php $obj = new ClassName(); // PHP 5+ 对象天然引用语义,无需 & ``` --- ### 示例 5:修复数组索引无引号 #### 修改前: ```php echo $config[host]; // 错误:未定义常量 host ``` #### 修改后: ```php echo $config['host']; ``` --- ## ✅ 五、推荐整体升级步骤 | 步骤 | 操作内容 | |------|----------| | 1 | 备份当前网站和数据库(完整快照) | | 2 | 将 PHP 切换为 7.4,并开启 `error_reporting(E_ALL)` | | 3 | 运行上述 `php5-to-php7-scan.sh` 脚本生成报告 | | 4 | 创建 `patch_list.txt` 记录所有需要修改的文件 | | 5 | 修改核心类 `cls_mysql.php` 支持 `mysqli` | | 6 | 替换所有 `mysql_*` 函数为其 `mysqli_*` 等价实现 | | 7 | 搜索并替换 `create_function`, `split`, `ereg` 等函数 | | 8 | 测试前台页面:首页、商品页、搜索、购物车、结算流程 | | 9 | 测试后台登录、订单管理、用户管理 | | 10 | 启用 OpCache 提升性能,关闭 display_errors 生产模式 | --- ## ✅ 六、ECShop 专用补丁建议(针对 2.7.3) 由于 ECShop 2.7.3 是十多年前的产品,社区已有大量迁移方案: ### 推荐 GitHub 补丁参考: - https://github.com/nchpxg/ecshop-patch-for-php7 - https://gitee.com/mirrors/ecshop/tree/php7/ 这些仓库提供了: - 完整的 `cls_mysql.php` → `cls_mysqli.php` 重构 - Smarty 兼容性修复 - 登录验证逻辑修复(防止 SESSION 丢失) - UTF-8 编码统一处理 --- ## ✅ 七、最终验证清单 ✅ 网站能否打开首页? ✅ 商品列表是否正常加载? ✅ 加入购物车是否成功? ✅ 能否提交订单? ✅ 后台能否登录? ✅ 图片上传是否正常? ✅ 搜索功能是否可用? ✅ 支付回调(wxpay_notify.php, respond.php)是否接收数据? --- ## ✅ 八、附加建议 1. **不要直接在线上操作!** 先克隆环境做测试。 2. 使用 Git 管理变更过程,便于回滚。 3. 考虑逐步迁移到现代化框架(如 Laravel + Vue),ECShop 已严重落后。 4. 若仅用于运营,可考虑容器化部署(Docker + PHP 7.4-fpm + Nginx)。 --- ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值