ECSHOP在PHP5.5及高版本上报错的解决方式_php实例_脚本之家

by admin on 2019年11月26日

随着PHP5.5
的普及,ECSHOP系统又爆出了新的错误。PHP发展到PHP5.5版本以后,有了很多细微的变化。而ECSHOP官方更新又太慢,发现这些问题后也不及时升级,导致用户安装使用过程中错误百出。说了半天,这个新错误到底是什么呢,它的完整错误提示信息是这样的:

preg_replace
使用的超过了php5.2默认允许的字节,也就是pcre.backtrack_limit和pcre.recursion_limit的大小的问题。

Ecshop却没来得及修改,如果在高版本的php虚拟主机上安装ecshop程序,出现兼容性问题。

复制代码 代码如下: [root@abc lnmp]#
service php-fpm start Starting php-fpm eAccelerator: Could not allocate
67108864 bytes, the maximum size the kernel allows is 33554432 bytes.
Lower the amount of memory request or increase the limit in
/proc/sys/kernel/shmmax. [04-Dec-2013 19:06:44] NOTICE: PHP message:
PHP Warning: [eAccelerator] Can not create shared memory area in
Unknown on line 0 [04-Dec-2013 19:06:44] NOTICE: PHP message: PHP
Fatal error: Unable to start eAccelerator module in Unknown on line 0
failed 复制代码 代码如下: [root@abc
lnmp]# vi /etc/sysctl.conf # Kernel sysctl configuration file for Red
Hat Linux # # For binary values, 0 is disabled, 1 is enabled. See
sysctl and # sysctl.conf for more details. # Controls IP packet
forwarding net.ipv4.ip_forward = 0 # Controls source route
verification net.ipv4.conf.default.rp_filter = 1 # Do not accept
source routing net.ipv4.conf.default.accept_source_route = 0 #
Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0 # Controls whether core dumps will append the PID to
the core filename. # Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1 # Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1 # Disable netfilter on bridges.
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0 fs.file-max=65535
net.ipv4.tcp_max_syn_backlog = 65536 net.core.netdev_max_backlog =
32768 net.core.somaxconn = 32768 net.core.wmem_default = 8388608
net.core.rmem_default = 8388608 net.core.rmem_max = 16777216
net.core.wmem_max = 16777216 net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1 #net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_mem = 94500000 915000000
927000000 net.ipv4.tcp_max_orphans = 3276800 # TIME_OUT后等待时间
#net.ipv4.tcp_fin_timeout = 30 #net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 1024 65535 kernel.shmmax = 128000000
加上最后一句话 kernel.shmmax = 128000000 然后应用sysctl -p 复制代码 代码如下: [root@abc lnmp]# service
php-fpm start Starting php-fpm done [root@abc lnmp]#
/usr/bin/memcachedstart

案例一:

Deprecated: preg_replace(): The /e modifier is deprecated, use
preg_replace_callback instead in…….

Discuz!6.0.0正式版程序发布以来,大家都热火朝天的升级中,但是部分插件在6.0下出现了问题比如

小编在本地环境php5.5上安装出现以下两种报错提示

最近用ThinkPHP开发一个项目,本地开发测试完成上传到服务器后,第一次打开正常,再刷新页面时就出现
“页面调试错误,无法找开页面,请重试”的错误.

注意:不是所有人的ECSHOP都会报这个错误,只有使用PHP5.5环境的ECSHOP才会报这个错误。

在php为5.2.0及以上的环境下安装以后会出现白屏的问题

Only variables should be passed by reference phpDeprecated:
preg_replace(): The /e modifier is deprecated, use
preg_replace_callback instead…?

我就郁闷啦,明明本地设置define
运行没点问题,怎么放到服务器上就出错了昵?

下面ecshop开发中心教程先来说一下错误产生的原因:

从Discuz!用户的角度考虑,我们需要去协助插件作者解决这个问题

通过在网络上查找,小编发现并不是只能在低版本的php中安装,也是找到了解决办法,方便大家在php5.5版本上调试程序。小编就在这里把解决方法分享给大家:

baidu,Google还是没有找到解决方案,突然发现项目APP_Name/Runtime/Cache目录和APP_Name/Runtime/Logs目录没有可写权限,果断更改,F5,唉好啦,妈妈再也不用担心出现错误信息啦!

1)、错误原因:

下面说下我的解决过程,希望能给大家一些建议吧

先说明第一个问题的解决方法:

案例二:

preg_replace() 函数中用到的修饰符 /e 在 PHP5.5.x 中已经被弃用了。

第一:此插件在5.5的情况下可以正常运行,但是6.0下就白屏了

php 5.3以上版本的问题,和配置有关
只要418行把这一句拆成两句就没有问题了。

ThinkPHP 将 APP_DEBUG 常量设置为 false 后出现了类似下面的问题:

如果你的PHP版本恰好是PHP5.5.X,那你的ECSHOP肯定就会报类似下面这样的错误:

Discuz!6.0为了增加模板缓存文件的可读性,增加了缓存文件的缩进,而确实修改过部分templates.func.php的模板处理部分,莫非是这个原因?开始我初步确定是这里的问题,因为用5.5的部分代码替换修改过的代码,就表现正常,但是很郁闷的没有找到原因

$tag_sel = array_shift;

$tag_arr = explode; $tag_sel = array_shift;

复制代码 代码如下:Parse error: syntax
error, unexpected T_STRING in
E:\PHPnow\htdocs\ojbak\Runtime\~app.php on line 1

Deprecated: preg_replace(): The /e modifier is deprecated, use
preg_replace_callback instead in……

第二步:怀疑是bank.htm这个模板书写格式的问题,于是我很郁闷的开始分析模板,说实话,模板大了分析起来真的很头疼。结果显然又没有找到原因。比较郁闷的说

因为array_shift的参数是引用传递的,5.3以上默认只能传递具体的变量,而不能通过函数返回值

或者直接报”服务器错误”, 怎么办?这个和 PHP 有关系,在 php.ini 里修改配置

2)、解决办法:

第二步:然后发现将此模板拆分以后,就正常执行了,这时候我初步怀疑是不是正则匹配的bug在大数据量的时候出现了错误,于是我就上bugs.php.net开始搜索了

ace&x=3&y=5在这里找啊找啊找,于是终于找到了这里

第二个报错解决办法:

复制代码 代码如下:short_open_tag = On

其实从刚才的错误提示信息中我们也能看出一二,它提示我们使用
preg_replace_callback 来代替 preg_replace。

据说将pcre.backtrack_limit=-1 in php.ini就是无限制

找到文件:include/cls_template.php

因为 app.class.php 里面的 build
方法:当开启了调试模式后,会获取相关文件的内容 然后重新组合成文件
这个时候是会自动加上 的也就是你看到的 ~app.php
文件了但是当你不开启调试模式后,会每次都会加载相关的文件,这样子,你的错误就暴露出来了。

使用记事本或其他PHP编辑软件打开文件 includes/cls_template.php ,找到

之所以写这么详细就是想一起分享下我解决问题的思路:)

return preg_replace}/e", "\$this->select;

return preg_replace_callback}/", function { return $this->select;

案例三:

return preg_replace}/e”, “\$this->select;

小编目前只遇到这样两个报错,如果在程序调试和开发过程中遇到其他的问题,如果能够解决,小编也是会整理出解决方法的。

在thinkphp中将APP_DEBUG设置为false之后,数据查询总是显示第一条。。但是把APP_DEBUG设置为true之后,就正常了。。这是为什么?有什么解决方案吗?

return preg_replace_callback}/”, function { return $this->select;

ecshop 在高版本PHP下报错的解决方法

正常来说,APP_DEBUG是调试模式,放到线上环境,尽量要设置为false的。。

3)、如果你的ECSHOP中其他文件也报类似的
preg_replace错误,请参照上面方法解决之,解决思路和解决方法是一样的。

1 .ecshop提示Strict Standards: Non-static method cls_image

自己找一个select查询,在关闭debug的情况下,用写文件的方式调试下查询后生成的sql。

以上这篇ECSHOP完美解决Deprecated:
preg_replace()报错的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

::gd_version() should not be called statically inE:/wwwroot/weirenchou/includes/lib_base.php on line 346

return cls_image::gd_version()

$p = new cls_image();return $p->gd_version();

以上所述就是本文的全部内容了,希望大家能够喜欢。

2 .ecshop的时候出现如下错误:

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /ecshop/includes/cls_template.php on line 300

打开ecshop的目录找到includes/cls_template.php 到第300行

return preg_replace}/e", "/$this->select;

return preg_replace_callback}/", function { return $this->select;

3. Strict Standards: Only variables should be passed by reference in
E:/web/shopex/includes/cls_template.php on line 422

$tag_sel = array_shift;

$tag_arr = explode; $tag_sel = array_shift;

4 .会员整合出现

phpbb::set_cookie() should be compatible with integrate/includes/modules/integrates/phpbb.php on line 232110行function set_cookie 

function set_cookie ($username="", $remember = NULL)includes/modules/integrates/phpwind6.php

ucenter.php vbb.php也是这样修改

ucenter.php 210行修改成

 function add_user($username, $password, $email, $gender = -1, $bday = 0, $reg_date = 0, $md5password = '')

function login($username, $password, $remember = NULL)

5. 数据库备份出现

edefining already defined constructor for class cls_sql_dump/admin/includes/cls_sql_dump.php on line function __construct { $this->cls_sql_dump; }

移到function cls_sql_dump前面

Non-static method cls_sql_dump::get_random_name() admin/database.php on line 64

打开includes/cls_sql_dump.php

function get_random_name()

static function get_random_name()

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图