今天起要学习一些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.php
的422
行
发现
1 |
$tag_sel = array_shift(explode(' ', $tag)); |
其实按我自己看的话,没发现什么错误,然后我去百度,才发现说PHP5.3
以上默认只能传递具体的变量,而不能通过函数返回值传递,所以这段代码中的explode
就得移出来重新赋值了,我也不太懂,然后修改成
1 2 |
$tag_arr=explode(' ', $tag); $tag_sel=array_shift($tag_arr); |
这个就解决了
还有如果安装时第二个问题没去处理的话,现在也会提示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.ini
的 error_reporting
项更改,如果你想不提示Strict Standards
跟deprecated
提示就error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT
这样写,不过我发现居然是不起作用的。后来我研究原来是在includes\init.php
文件中定义了这句 error_reporting(E_ALL);
把全部错误都提示出来,那你懂的,这儿改成0
就行了。
我还是有点完美主义的,还是遇到错误就改一下吧,反正技术难度不是那么高,只是比较繁琐。
基本上都是一些Strict Standards
跟Deprecated
的错误,代码改完后,后台管理界面只要刷新就直接能看到了,前台的话需要清除缓存才能看到效果。
这个preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in 错误还是有些难修改。我调试了好多次才搞懂,一改错,前台就没全部没了。