解读ZenCart源代码
用户评价: / 19
好 
作者:深圳网页制作   
周六, 2011年 02月 26日 10:43
解读代码笔记:

1newimg imgedit等值是提交表单对应的表单值.

2初步判断,dmz_cache的图片也是这个ih组件来控制来生成.

3所有图片的操作,都是由这个image handles模块来控制,而那个includes的下面的configure.php都是一个路径变量的设置,以及数据库连接参数的设置.

4include下面的class 以及Fuction都是一些常用操作功能的设置.包括.图片一部份节能处理操作.

5图片上传调用的类是includes/class下面的upload.php类文件.

6阅读数据库,熟悉数据表,特别是数据表名以数据字段,熟悉之,更方便读懂源代码!

7刚刚发现,俺一直疑惑看源代码里的SQL语句时,总找不到执行操作的表.原来是SQL语句中都加了前缀,例如table_tablename 等.正克确而实际的数据名是tablename.
现在问题就是仍然搞明,他们文件是如何调用与转移的?明白这点,就好写代码?

8 经过测试,现在已经解决图片复制其它目录的问题.而且经过观察,相应的img录,dmz_cache目录也可以看到生成的缓存图片.感觉工作已经完成一大 半.只余下最后一步,就是将生成的加水印的图片放到本地网站的images目录下面,方便以后查询调用.并且,要判断,本地有的,就从本地但读取,本地没 有的,才从远程的图片目录调用.是事情就这样简单吗?

9那么俺应该再精读源代码,如果以前是走马观花地阅读,是大概级阅读,那么现在就是代码级阅读.那就先从Fuction,再读class.再读ih2模块.
10 阿mark说要改变那些加密过的字符为自已定制的字符,这个比较难实现.因为MD5加密的字符都是随机的.不能让MD5加密的字符完全符合自已的要求.除非取消MD5加密.而将后缀名改为按提交时间或者按产品目录分类来定义吧.
11 Zen Cart是基于面向对象,也就是OOP来开发的.刚刚发觉这种写法的一样好处,就是代码比较精练,没有冗余代码设置.

12其实Zen Cart的源代码也不是太难阅读,只要细心些,时间充裕些.基本上都可以读懂.只要能读懂,就基本知道在哪里改.如何修改.
13不要对长版面的代码感到烦恼.就当他是一些书本来读就行.不要只着眼于那些短版面的代码.
14阅读代码,情愿读慢些,都要尽量读懂它.不要因为看不进去,就走马观花看.这样未必浪费时间.
15Zen Cart的代码还有好处,就是注解详尽而清晰,这样的代码风格更容易方便别人读懂!
16其实,主要通过几天的接触,对Zen Cart的源代码有所熟悉,消除了原来那种陌生感!那么以后阅读与修改,就方便好多.也容易得多.
17那么现在就要考虑写成一个Fuction,.就是,判断,判断本地有那个图片文件的.就读取本地,没有的,就要调用远程图片服务器?
18积极开动脑筋,根据需求/要求,去构筑与理清思路,然后根据思路去写伪代码,然后再形成真实的代码.
19如果之前俺考虑与分析得是后台图片提交的路径的设置.那么现在就要考虑与分析图片获取与调用的代码,看他们的图片调用机制是什么的?
20 图片上传时候可能要加个判断,例如图片重复上传时候,但是这个好像不重要.现在主要要考虑的是图片调用时候.判断图片调用时候什么时候从本地读取, 什么时候从图片服务器调用.那么本地的的图片又是从那里来呢.从远程图片服务器来.不是说,先尝试从服务器读取,本地目录没有,才从远程的图片服务器调 用.并放到本地images目录…俺相信图片调用时候,程式应该已经相关判断机制.那么在这个判断机制加强一下.应该可以.
21动手写代码之前,一定要理清思路,思路不清.很难编码的.
22FUNCTION的作用就是,输入一两个变量,就能得出某个值或者输出.所以.应这样考虑.将图片的名字输入FUCTION就可以判断出这个图片是在本地已有,还是没有,有的,就直接输出值,没有,就到远程服务器拉取相应的图片.
23尽快将实现思路圈划出来.不怕代码没写好,就怕思路不清晰,逻辑出错…

24先得出一个文件名,然后将这个文件名扔入FUCTION里,无论怎样,从FUCTION出来都是一个文件,例如图片.
25手阅代码,是学好编程的最好方式,所以,无论如何,都要手阅代码.这是学好编程一个保障.一个保证.
26BMZ_images_handle.class.php就是加水印的CLASS类。要细读。刚想到的,就是俺新加的判断本地目录有没有产品图片的 FUNCTION也要应加在这里。
27俺现在就是要搞清楚,产品在是那里调用图片的。要搞清楚。
28 再次伸明,Zen Cart的代码还是容易看得懂,只要细心看,认真看,基本上都可以看懂,因为都是那些变量,那些语法,那些FUNCTION。还有手册。所以,不需心存畏 惧。最重要,多思考,多编写。多测试。思路清晰,逻辑就不会错。逻辑不会错。那么就令代码更不会错。最好就是全部是语法错。所以说,编程思维很重要。思路 越清晰。写代码越快。一切都是编程思维来作证!

29自定义Function调用及输出值应出实例,刚刚意会到的。或者留意到的。
$color = $this->get_background_rgb($bg);//调用get_background_rgb Function ,然后输入变理$bg ,最后输出$bg 对应的color值。
if (!$color) {
$color = $this->get_background_rgb($ihConf['default']['bg']);
$transparent = (strpos($ihConf['default']['bg'], ‘transparent’) !== false);
} else {
$transparent = (strpos($bg, ‘transparent’) !== false);
}
$transparent &= preg_match(’/(.gif)|(.png)/i’, $file_ext);

get_background_rgb 的Function如下:
function get_background_rgb($bg) {
$bg = trim(ereg_replace(’transparent’, ”, $bg));
list($red, $green, $blue)= split(’[, :]‘, $bg);
if (preg_match(’/[0-9]+/’, $red.$green.$blue)) {
$red = min(intval($red), 255);
$green = min(intval($green), 255);
$blue = min(intval($blue), 255);
$color = array(’r'=>$red, ‘g’=>$green, ‘b’=>$blue);
return $color;
} else {
return false;
}
}

30这个dmz_image_handle.class.php类真的很重要,许多图形处理的Function都在这里调用与起作用。要认真分析与阅读。
31不要一看到一大堆代码就发恐。不要看到一大堆代码就想往后退。静下心来,认真些,认真看,边看边思考,边分析。读多,想多,写多,就什么问题就没有。所以,不用怕。不有恐惧的。
32经过昨天的阅读代码与分析。基本上找回编码的感觉。现在就是要多清晰自已的思路。写多些代码,读多些源代码,多借鉴与模似别人的代码写法。。
33俺写php代码,俺是越来越有感觉啦。继续努力。不怕写错,就怕不敢写。要勇于写。想到那就写到那,边写,边纠正逻辑错误。
34现在从远程图片服务器取代码那块代码基本上写完,现在就要编写本地判断有没有图片那块,并且这块判断本地有没有图片这块务必在加水印之前起作用!
35、上面说得没错。如果要实现阿MARK的需求,判断本地有没有目录,以及没有就从图片目录器那里取值一样。这些代码务必在加水印之前完成。
36现在核心代码基本上写完,也就要看一下如何调用。在哪调用。还有,今天下午六点半之前,完成基本编码与置,整合,方便明天作整合测试。
37刚才搜索一下,发现调用到$DIR_WS_IMAGES 这个变量,在多处调用。要满足需求,要多处修改,而且不能改错。要一个一个来校正来修改。

38如果按照昨天阿MARK所说,直接指定图片服务器,就可以,也就比较简单,但是这样要考虑那些缓存图,大中小图的存放问题。
39 本地的images只是充当本地存放图片作用。也就是存放操作者在后台增加的图片的用途,现在,本地IMAGESE取消,也可以说迁移到图片服务器度,那 这个IMAGES真的可以取消。不作考虑。因为前台图片显示调用的是BMZ_CMACHE的图片,而对于images下面的large 以及medium目录放在images都可以。
40昨天查询这个图片调用路径时,发现,如果要新加一个图片链接变量时,要修改的地方很多,并且要小心修改。。。尽快理清这个思路,想清这个问题,这个思路不清。就会一直成为死结。影晌开发进度!
41问题是做着解决的。而不是想着去解决的。一时想不通,那就按基本思路去做。在做着的时候,边思考边解决。总比一直停在这个问题要好!
42、那个本地IMAGES真的没必要保留。既然决定将图片目录外迁至图片服务器,那就不需考虑本地图片服务器变量。那就按这个思路去做。去处理!
43初步分析一下,在后台增加新图片时,报错的原因是不能读取远程图片服务器的图片,那么如何才能自由自主地读取远程的图片服务器?难道要将它移到本地图片服务器?
44刚刚想到,可不可以将上传图像保存到本地某个图像目录,然后,将本地图像目录跟远程的图像目录建立一个镜像。或者,将图片统一上传到远程图像目录,然后在本地建立一个镜像目录?
45、刚刚看到,如果要想列出远程服务器某个目录下的文件,这个好像不可能,除非远程服务器支持目录显示。但这会存在很大的安全风险。。。上月
46经过跟阿MARK的讨论,那个直接设图片服务器为远程目录不成功。这个思路走不能。跟着想其它方法。
47、阿MARK说数据库已有图片的名称。可以直接调用数据库的图片服务器名称来判断。判断本地有的。就直接调用。判断没有。就从图片服务器目录那里调用。
48.阿MARK的意思就是说改造后台那个UPLOAD功能。在上传时,判断本地有没有那个产品图片,有的话,就直接跑下一步。按平时的流程去跑。如果没有。就调用图片服务器。将相应的图片服务器下的目录调用过来。。。
48、原来俺的思路是对的。只不过后来。俺想偏啦。走不出来啦。。
49再强调一句。思路要清晰。。需求要清晰。需求与思路都不清晰。很难编出好的程序来。要记住!
50、为增加对这个Zen Cart程序的认识。阅读代码不能只限于那几个常接触的代码。尽可能全部阅读!
51现在存在什么问题?那就是通过调用数据库的图像名来判断本地有没有相应的图像,如果有,就行,没有就调用图片远程图片服务器的图片。
52、那FUCTION基本写完,但现在就不知在哪里调用它,并且以什么条件来激活它。
53这个SQL语句怎样设计呢?那就看看需求,需求是要从数据库取出相应的图片名字。。。那么那where 判定语句是怎样写呢?
54 阅读源代码的作用就是在读懂别人写的代码的同时,就是要借签与参考别人的编码写法。必要时,要摘抄与引用别人的代码。这就是阅读源代码的作用之一,至于读 过源代码来常握编码者的编程思路,这个要慢慢浸淫,一步一步积累。阅读源代码与阅读别人的文章一样,在理解的基础上,借签别人的写法与文字。甚至摘抄。这 个在文人眼中不算是抄袭。所以,要明白,阅读源代码的作用与要根本目的,不要,读了大半天的源代码,还不知要干什么,那就难以交待啦。还有。手册,要常备 左右,要常翻。手册的作用是理清与纠正俺知识上的盲点与不足。当然,最重要是要多编码,多测试。多看效果,多从排错中,获取经验与知识!
55刚跟以前的同事交流沟通过。那些简写字符是数据表的别名,也就是表名的简写。后面是数据表的字段名。这些别名的设定是在数据表里设定的。
56 发觉俺对这个Zen Cart不是不太熟。还有许多源代码没看到。还有许多设置变量都不清楚。这次跟同事沟通过。才发现到俺的不足。所以,决定,这个下午可能要将前后台的 INCLUDE下面的源代码阅读一篇。。还有那些CLASS与FUCNTION,都要看一篇。尽量看懂。不懂,就问LEON。。
57这个Zen Cart/WHOLESALEC程序真是博大精学。非一般开源程序。并不是简简单单就能看懂,要花很多心力。。。。该程序层层调用。环环相扣。。短时间内真的不那么看懂!
58、虽然还有许多源代码没有阅读。但是经过之前的努力,现在阅读源代码已经有很大进步,之前,阅读有点缓慢,现在阅读速度快些。这是好事。这个可以激励自已更好地掌握与精通这个Zen Cart源程序!
59既然数据库已有图片名字,那么将图片名字从数据库中调用出来,然后判断本地有没有这个图片,没有就从远程图片服务器调用,思路就是这样。。
60、 为什么俺一直执着于通过这个upload来触发这个FUCNTION呢?自已可以考虑不用这个FUCTION,可以这样考虑:1、不用这个 UNLOAD命令,直将将这个FUCNTION放置于前台图片调用那差代码中,另外一个思路就是将这个UPLOAD改造,改造成为触发器,也就是说不用直 接指定远程服务器变量,改回原来,然后,新增一个变量,好,就这样办!

61俺享受这种自麻醉,麻木自已,不用让自已那么烦。不用想太多东西!
62、相信自已,相信定能成为编程高手。专心致志,心无旁望。目标一致,就是成为编程高手!
63$this 只能在class里使用与定义。那么fucntion呢。如何调用呢。从ZENTCART的代码来看!
64要分清zen_not_null($images)与$zen_not_null[$images]的区别,前者为Fuchtion的值,后者为数组的值,不可以搞混!
65为什么之前定义的变量在function不起作用呢?全部要直接指定变量。为什么呢?难道。俺还有许多关于class类,Function的理解还不够??
66 变量只能在Fuction内设置,不能在Fuction外设置?还是这样,如果定义变量,在Fucntion外定义的。要将它定义为全局变量,而不是设置 局部变量。如果设成局部变量,那只能在某段过程代码里执行。而且只能执行一次。相反全局变量,就可以在全局调用,并且,多次调用?
67、经过测 试。基本上可以断定俺的推测是对的。如果是局部变量,就不能在FUNCTION调用。要再定义。或者将一些常用变量设成一个全局变量,然后调用这个全局变 量。就好像现在Zen Cart或许多开源程序一样。会将一些常用的变量,统一写到一个存有全局变量的PHP文件。然后在FUCNTION调用这个全局变量!
68、这个1值从何而来??这个1值应该是代表真true的那个1值,如果为0,就是假false的值。
69俺需要的遍历这个图像目录下面所有图片名,然后判断出这个目录有没有俺要的图片。有就好,没有就连接远程图片服力器来获取!
70、借签与参考微软那个桌面搜索的代码。看它是如何找到match出要查找的文件名的!
71刚想到的。阅读源代码,分析开源软件的代码的好处,就是,如果要查看某个fuction的具体应用,那就可以用DW打开这个开源软件,并且DW查找相关的Fucntion应用,看看实际应用,必要时,拿来用!
72以后要吸取教训,在php编写sql语句时,为避免出错,先将sql语句放到phpmyadmin 先实地跑一跑,看有没有语法错误先。再写入php代码。。。这也是一种习惯。
73为什么function单独执行就可以,放入fuction组就不行。那是。因为$image值没有指定,也可以说是远程服务器没有要下载的图片文件名。所以报错。。
74、或者,俺不需要想得这么复杂。以免将自已搞晕啦。只要能解决问题,解决掉俺的需求就可以。还有。在编码时候,要谨记随时自已思路清晰。以免语入死胡同,走不出来!
75、两个知识盲点,就是if 等判断语句的详累与精确用法。其次,就是就是变量的赋值方法,也就是如何将$a 的值赋给$b??尽快解决这两个知识盲点!
76、开源软件就是有个好处,那就是,俺在编码时,不能确定某个Fucntion的用法,或者不能晚明确某个语法的用法,就可以查找这些开源代码。观察这些编写开源软件的大师的是如何使用这些Fuction以及这些php 语法知识的。并且最终为俺所用。!
77 刚才看了看大师的作品。发觉他们用if也没啥特别,都是用if来判断某个变量的值,或者用fucntion来判断某个变量,或者数组的属性是否符合某个条 件或者某种情况,然后,再执行某种操作。没什么特别。那么,俺一直搞不清这个if的判断用法,是不是俺自已搞晕啦。。。想得过于复杂啦??
78、看来要尽快解决这个变量赋值与以及传值问题,否则,无法将编码继续下去!刚才,经过测试,不可以直接将$a=$b这样来传值。。刚才查了手册,可以考虑用引用赋值变量来代替!
79、if(!$imgsize=”" && !$get_imgname=”"){ 不可以这样写。应该这样写。if(!$imgsize && !$get_imgname){
80 如何将循环输出的变量输成一个字符串变量。那个while Function只是将目录下所有文件都找出来,并且一个一个地显示出来。。。俺在前台看到的输出效果是while不断起作用所至,而不是一个固定字符串变量!!
81、现在有两个问题,变量不能跨Function传递。。还有,就是无法将while 执行输出的每个值弄成一个字符串变量!
82 为什么手工指定文件名就可以下载,并跑完全程呢。。。没有指定就不行呢。俺想程序代码没有问题,语法也应没有问题。问题可能出在从数据库里取出的值方 面。。。测试一下,看看,是不是这个问题。。。刚才测试过,好像不关这个图片名字多了个/符的事情。因为。俺直接编辑数据库表,将这个/符去掉,还是报同 样的错误。。。可能问题还是在出在源代码方面。
83为什么测试来测试去都无法显示那两个重要的变量,问题可能是根本就没有执行那Fucntion ,或者说根本没有产生那两个变量,所以,无法进入下一步操作。
84 到底问题出在哪里呢。为什么。改来改去,都是那样的报错呢?为什么无法将其它function产生的变量值无法在其它Function使用呢??为什么, 照理由俺已经将其它function以全局变量的形式来调用。。。那么其它function为何不起作用呢?难道是其它function没有将值传出来给 其它Function调用??
85问题仍然一样,还是无法得到function的变量值。试过return都不行。。。。那如何取得Fucntion的变量值呢?
86为何会文件丢失?难道电脑真的中了木马,给删除了一些资料??
87 基本明白他们的营运方式,他们有一个叫什么博士的外贸系统,应该是叫金博士,其实这个外贸系统也可以叫做CRM系统,至少有这些CRM功能。他们的营运方 式。就是他们在外国托管服务器,开设几个外贸网站,为了防止克隆。他们在网站加了功能过滤中国内的IP访问。这些网站其实就是基于Zen Cart二次改造过的商城。而他们有自已的加工生产线。自产自销。将自已的生产的产品摆友商城。对外销售。如果客户想找其它在网城没有展示出来的商品。而 且客户发来咨询电邮的话。那就主管,将咨询电邮发给相关跟单或者客服,让他们跟进。本公司没有的商品,就由相关跟单与客服跟进,联络其它商家,或者低买其 它商家的产品,然后高价买给外国商家,并且从中盈利,相信,他们整体的盈运方式就是这样。。找天,找一个相熟的客服的咨询。了解,确实这个营运流程。还 有。那些客服与跟单还要负责写一些商品英文说明材料与资料!
88为什么不能执行那段检测文件大小类型的那段Fucntion呢?俺只是加了一些链接代码,就不行。那可能是那段代码执行不正确。所以。出错,报错,而影晌后面代码的执行!
89、根本无法集中注意力。无法集中精神盯着代码?为何这样。长时间盯着代码。眼睛很累。也看不入神。长时间盯着代码。可能会失明!变盲!
90、 初步看过俺加的代码。思路是清晰的。流程是对的。逻辑也是对的。那为何会报错。那到底是那里问题?为什么加了这段代码,就提示不能执行检查文件大小类型参 数?为什么?照理由俺的思路与想法都应没错。只要每天。没有图像文件。就到远程图片服务器拉回本地。然后再判断??
 

评论信息

分享到: