初学ecshop遇到的问题

技术分享1,803 人阅读

今天起要学习一些php开源项目了,毕业php最大优势就是有这些优秀的开源框架,只会埋头从零开发的程序员不是优秀的程序员,结合现有的资源,最快效率完成一个需求才是最优秀的程序员。

安装的过程就遇到一些错误,毕竟ecshop是很早的了,如果用在php5.3版本以上的话,很多地方会提示错误。

从网上百度echop的官方,下载安装包,将upload的文件复制到我web根目录,然后浏览器打开,会提示一个安装页面,点下一步后,会发现环境、目录检测中,只有一个jpeg不支持,其它都正常,我用phpinfo查看了一下,发现jpeg是支持的,后来发现是在 install\includes\lib_installer.php里面的get_system_info方法里的$gd_info['JPG Support']写错了,应该是$gd_info['JPEG Support']

在目录检测页面上,发现头部会出现

Non-static method cls_image::gd_version() should not be called statically in

在上面提到的lib_installer.php里找到get_gd_version方法,有两种处理方法

1.将return cls_image::gd_version(); 改成$img=new cls_image;$img->gd_version();

2.到includes/cls_image.php文件里把gd_version方法更改成static function gd_version

不过上面两点就算不修改不会影响,点下一步,配置数据库后完成。

然后当我打开首页跟后台后,发现一切都凌乱了,出现好多

Strict Standards: Only variables should be passed by reference in E:\baiduyu\WorkSpace\PHP\ecshop\includes\cls_template.php on line 422

之类的

找到cls_template.php422

发现

其实按我自己看的话,没发现什么错误,然后我去百度,才发现说PHP5.3以上默认只能传递具体的变量,而不能通过函数返回值传递,所以这段代码中的explode就得移出来重新赋值了,我也不太懂,然后修改成

这个就解决了

还有如果安装时第二个问题没去处理的话,现在也会提示Non-static method cls_image::gd_version() should not be called statically in

那按上面提到的处理方法给gd_version加上static吧,直接加static就比较方便,改一下全部调用这个方法的页面都好了,改好后打开后面页面应该是没问题了,前台的话可能还有,因为还得去后台清除一下缓存。

登录后就出现

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

原因是 /e 修饰符已经被弃用了。使用 preg_replace_callback() 代替,找到该行然后更改成return preg_replace_callback("/{([^\}\{\n]*)}/", function($r) { return $this->select($r[1]); }, $source);

修改好后再刷新,终于进入后台界面了,首次进入是开店向导,又是很多Strict Standards提示

类似这样的Redefining already defined constructor for class cod in,你打开其中提示中的文件会发现,这些类中都定义了两个构造函数同名函数在前,__construct函数在后,从php5.4开始,对于这样的两种 写法同时出现的情况,要求必须__construct()在前,同名函数在后,所以只需要对调两个函数的位置即可。

面对这些多的错误提示,其实有更简单的处理方法,就是更改输出错误提示的值,不过我自己是不喜欢这样做的,可以在php.inierror_reporting项更改,如果你想不提示Strict Standardsdeprecated提示就error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT这样写,不过我发现居然是不起作用的。后来我研究原来是在includes\init.php文件中定义了这句 error_reporting(E_ALL);把全部错误都提示出来,那你懂的,这儿改成0就行了。

我还是有点完美主义的,还是遇到错误就改一下吧,反正技术难度不是那么高,只是比较繁琐。

基本上都是一些Strict StandardsDeprecated的错误,代码改完后,后台管理界面只要刷新就直接能看到了,前台的话需要清除缓存才能看到效果。

这个preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in 错误还是有些难修改。我调试了好多次才搞懂,一改错,前台就没全部没了。