入手ecshop

用入手这个词可能有点草率,但是以我有限的汉语词汇量也想不出更恰当的词儿。

本科阶段一直无视C以外的程序语言,虽然也有学过JAVA,甚至数据库语言这种算不上程序语言的不知道什么东西。毕业以后发现自己C也没有学的很好,其他的东西更是两眼一抹黑。于是开始睁眼看世界,狂补以前留下的不足,第一个着手点就是PHP。

最开始抱着core php programming看,看完chapter1-chapter8,到之后的一个个具体的函数说明就再也看不下去了,就是这么狂躁,没辙。

搁了几天后,一次巧合看到了php的ecshop这个开源的项目,感觉不错,代码量似乎也不大,整个工程解压缩以后也就18.6M,于是下下来从它入手开始学PHP。

刚入手ecshop时还是蛮晕,除了知道主页的索引页index.php在upload文件夹下其他啥也不知道了,在网上找了其结构看了看,思路清晰了许多。网上关于ecshop的结构很多,在此就不重复劳动也不转帖了,说一下除了网上有的文章外,自己对整个ecshop的一些理解。

ecshop中除了txt外,有7种重要的文件格式:

  • php
  • dwt
  • lbi
  • css
  • html/htm
  • xml
  • js

其中dwt和lbi文件之前完全没听说过,在此简单说一下。dwt是网页模板文件Dreamweaver Template,简单来说就是用html写的文件,如upload/themes/default/activity.dwt代码如下所示:

  1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2 <html xmlns="http://www.w3.org/1999/xhtml">
  3 <head>
  4 <meta http-equiv="Content-Type" content="text/html; charset=gbk" />
  5 <meta name="Keywords" content="{$keywords}" />
  6 <meta name="Description" content="{$description}" />
  7 <!-- TemplateBeginEditable name="doctitle" -->
  8 <title>{$page_title}</title>
  9 <!-- TemplateEndEditable --><!-- TemplateBeginEditable name="head" --><!-- TemplateEndEditable -->
 10 <link rel="shortcut icon" href="favicon.ico" />
 11 <link rel="icon" href="animated_favicon.gif" type="image/gif" />
 12 <link href="{$ecs_css_path}" rel="stylesheet" type="text/css" />
 13 {* 包含脚本文件 *}
 14 {insert_scripts files=‘common.js‘}
 15 </head>
 16 <body>
 17 <!-- #BeginLibraryItem "/library/page_header.lbi" --><!-- #EndLibraryItem -->
 18 <!--当前位置 start-->
 19 <div class="block box">
 20  <div id="ur_here">
 21   <!-- #BeginLibraryItem "/library/ur_here.lbi" --><!-- #EndLibraryItem -->
 22  </div>
 23 </div>
 24 <!--当前位置 end-->
 25 <div class="blank"></div>
 26 <div class="block">
 27   <h5><span>{$lang.activity_list}</span></h5>
 28   <div class="blank"></div>
 29    <!-- {foreach from=$list item=val} -->
 30   <table width="100%" border="0" cellpadding="5" cellspacing="1" bgcolor="#dddddd">
 31     <tr>
 32       <th bgcolor="#ffffff">{$lang.label_act_name}</th>
 33       <td colspan="3" bgcolor="#ffffff">{$val.act_name}</td>
 34     </tr>
 35     <tr>
 36       <th bgcolor="#ffffff">{$lang.label_start_time}</th>
 37       <td width="200" bgcolor="#ffffff">{$val.start_time}</td>
 38       <th bgcolor="#ffffff">{$lang.label_max_amount}</th>
 39       <td bgcolor="#ffffff">
 40         <!-- {if $val.max_amount > 0} -->
 41         {$val.max_amount}
 42         <!-- {else} -->
 43         {$lang.nolimit}
 44         <!-- {/if} -->
 45       </td>
 46     </tr>
 47     <tr>
 48       <th bgcolor="#ffffff">{$lang.label_end_time}</th>
 49       <td bgcolor="#ffffff">{$val.end_time}</td>
 50       <th bgcolor="#ffffff">{$lang.label_min_amount}</th>
 51       <td width="200" bgcolor="#ffffff">{$val.min_amount}</td>
 52     </tr>
 53     <tr>
 54       <th bgcolor="#ffffff">{$lang.label_act_range}</th>
 55       <td bgcolor="#ffffff">
 56         {$val.act_range}
 57         <!-- {if $val.act_range ne $lang.far_all} -->
 58         :<br />
 59         <!-- {foreach from=$val.act_range_ext item=ext} -->
 60         <a href="{$val.program}{$ext.id}" taget="_blank" class="f6"><span class="f_user_info"><u>{$ext.name}</u></span></a>
 61         <!-- {/foreach} -->
 62         <!-- {/if} -->
 63       </td>
 64       <th bgcolor="#ffffff">{$lang.label_user_rank}</th>
 65       <td bgcolor="#ffffff">
 66         <!-- {foreach from=$val.user_rank item=user} -->
 67         {$user}
 68         <!-- {/foreach} -->
 69       </td>
 70     </tr>
 71     <tr>
 72       <th bgcolor="#ffffff">{$lang.label_act_type}</th>
 73       <td colspan="3" bgcolor="#ffffff">
 74         {$val.act_type}<!-- {if $val.act_type ne $lang.fat_goods} -->{$val.act_type_ext}<!-- {/if} -->
 75       </td>
 76     </tr>
 77     <!-- {if $val.gift} -->
 78     <tr>
 79       <td colspan="4" bgcolor="#ffffff">
 80       <!-- {foreach from=$val.gift item=goods} -->
 81       <table border="0" style="float:left;">
 82         <tr>
 83           <td align="center"><a href="goods.php?id={$goods.id}"><img src="{$goods.thumb}" alt="{$goods.name}" /></a></td>
 84         </tr>
 85         <tr>
 86           <td align="center"><a href="goods.php?id={$goods.id}" class="f6">{$goods.name}</a></td>
 87         </tr>
 88         <tr>
 89           <td align="center">
 90             <!-- {if $goods.price > 0} -->
 91             {$goods.price}{$lang.unit_yuan}
 92             <!-- {else} -->
 93             {$lang.for_free}
 94             <!-- {/if} -->
 95           </td>
 96         </tr>
 97       </table>
 98       <!-- {/foreach} -->
 99       </td>
100     </tr>
101     <!-- {/if} -->
102   </table>
103   <div class="blank5"></div>
104   <!-- {/foreach} -->
105 </div>
106 <div class="blank5"></div>
107 <!--帮助-->
108 <div class="block">
109   <div class="box">
110    <div class="helpTitBg clearfix">
111     <!-- #BeginLibraryItem "/library/help.lbi" --><!-- #EndLibraryItem -->
112    </div>
113   </div>
114 </div>
115 <div class="blank"></div>
116 <!--帮助-->
117 <!--友情链接 start-->
118 <!--{if $img_links  or $txt_links }-->
119 <div id="bottomNav" class="box">
120  <div class="box_1">
121   <div class="links clearfix">
122     <!--开始图片类型的友情链接{foreach from=$img_links item=link}-->
123     <a href="{$link.url}" target="_blank" title="{$link.name}"><img src="{$link.logo}" alt="{$link.name}" border="0" /></a>
124     <!--结束图片类型的友情链接{/foreach}-->
125     <!-- {if $txt_links} -->
126     <!--开始文字类型的友情链接{foreach from=$txt_links item=link}-->
127     [<a href="{$link.url}" target="_blank" title="{$link.name}">{$link.name}</a>]
128     <!--结束文字类型的友情链接{/foreach}-->
129     <!-- {/if} -->
130   </div>
131  </div>
132 </div>
133 <!--{/if}-->
134 <!--友情链接 end-->
135 <div class="blank"></div>
136 <!-- #BeginLibraryItem "/library/page_footer.lbi" --><!-- #EndLibraryItem -->
137 </body>
138 </html>

全是html标签!lbi文件DreamWeaver HTML Library Module解释起来费劲儿,简单来说还是html代码写的文件,在此就不贴代码了,那么这两个文件有没有关系,或者是什么关系呢,从ecshop的文章列表页: article_cat.dwt结构图中能清楚地感受到:

dwt文件和lbi文件是从属关系,每个dwt文件由若干个lbi文件组成,这里就不用管lbi文件是什么什么库、重复使用之类的。

ecshop一共有22个dwt文件,分别表示22个不同的页面,至于由多少个lbi文件我就没去统计。

根目录有三个文件夹,upload、upgrade、docs。我在这里刻意把upload文件夹放在最前面,因为它最重要,前台、后台、数据处理都是在它下面完成的;upgrade从名字来看是用于升级的,我还没看这个文件夹下的内容;docs下是一些文档,暂时不管。

主页的索引文件index.php在upload文件夹下,是程序的入口点,我还是决定用最原始的方式,跟程序的执行流程。

时间: 2024-08-12 12:23:39

入手ecshop的相关文章

ECSHOP \admin\edit_languages.php GETSHELL Based On Injection PHP Code Into /languages/zh_cn/user.php

目录 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述 对于很多CMS网站来说,它们都需要保存很多的网站META信息,最常用的最佳实践是以变量声明的形式保存在.php文件中,在需要的时候直接include进来,PHP File Loader会自动将引入文件中的变量注册到当前的代码空间中,供其他的代码直接引用.例如 1. phpmyadmin使用config/config.inc.php保存phpmyadmin的配置信息:p

Ecshop实现注册页面手机号唯一的验证

前天,公司总监提了一个需求,实现我公司商城注册会员用手机号登录这个功能,那么这个功能容易修改,在我的前一篇博文中已经给出处理方法了,但是这里有一个问题,就是如果实现了用手机号码来登陆,那么就需要在注册时保证会员所填写的手机号是唯一的,也就是说手机号还未被注册,那么该怎么来检测填写的手机号是否注册过了呢? 一.参考检测邮箱 因为注册页面,有检查用户名和邮箱是否重复的步骤,初步想法是参考检测邮箱的方式来解决,但是查看user_passport.dwt,如下: 似乎可以像上面一样开为手机号的input

漏洞预警 | ECShop全系列版本远程代码执行高危漏洞

2018年9月1日,阿里云态势感知发布预警,近日利用ECShop全系列版本的远程代码执行漏洞进行批量化攻击量呈上升趋势.该漏洞利用简单且危害较大,黑客可通过WEB攻击直接获得服务器权限. 漏洞原理 该漏洞产生的根本原因在于ECShop系统的user.php文件中,display函数的模板变量可控,导致注入,配合注入可达到远程代码执行的效果.使得攻击者无需登录等操作,直接可以获得服务器的权限. 首先从user.php文件入手,代码中可以看到,系统读取HTTP_REFERER传递过来的 内容赋值给$

ECSHOP自动收货解决方案 【附代码】

ecshop系统,本身不带自动确认收货的,网上也找了一下,很多很复杂,且需要在服务器端设置定时任务,如果是虚拟主机,基本上就歇菜了. 某宝有一些卖自动收货的插件,不太了解其机制,不过也比较贵,要1-200一个.没办法,就自己开发吧.以下为解决方案. 解决思路: 跟淘宝的类似,默认设置7天后还没有自动确认收货,那么就会系统强制确认收货.只不过这个强制确认收货,没有在系统里设置常驻内存的程序,也没有设置系统自动任务,为变通的方案.设定为用户在登录成功后,进入用户中心页面,就会扫描自己名下,有没有超过

Ecshop:当用户注册时,自动成为某等级

首先打开includes文件夹下lib_passport.php文件 此处注意,很多教程都写得时lib_passwort.php文件,应为以讹传讹.经本人亲测,应该@lib_passport.php 约在177行处添加 $update_data['user_rank']=1; //在Ecshop3.0版本中,只需要添加这一行代码就可以了.不需要像网上其他的教程那样,再添加一行额外的$GLOBALS['db']->query("update ".$GLOBALS['ecs']-&g

ecshop jquery冲突 终极解决方案。亲测生效。

解决jquery兼容的完美解决方案: ECShop把AJAX事件和JSON解析的模块放在common/transport.js之中,可以说它也有自己封装的一套工具,这其实是很正常的. 但恰恰的,在封装JSON各种方法的同时对object的模型进行了重写,这个就跟jQuery冲突了.因为众所周知的,jQuery对各种JavaScript对象进行了扩展. 这一切其实都很容易理解,各有各的理由十分自然,但头痛和无奈的就变得在我们这些使用者身上了.在ECShop论坛上原来也有很多朋友提出了这个问题,也提

ECShop后台站点地图关于 Deprecated: Assigning the return value of new by reference is deprecated的错误的解决办法

今天对后台系统进行一些简单的操作,当点击  系统设置---站点地图  时发现提示: Deprecated: Assigning the return value of new by reference is deprecated 的错误,如下图: 起先以为是代码的问题,可是一想到这个模板是官网的默认模板,对sitemap.php文件进行查找后未能发现问题.后来将错误内容从网上一查找,原来是由于从php5.3开始后,废除了php中的"=&"符号,所以删除&符号即可. 删除

删除ecshop云服务及授权关于官方等信息

一.删除[云服务中心] 删除/admin/cloud.php 删除/admin/templates/menu.htm中以下代码 Ajax.call('cloud.php?is_ajax=1>act=menu_api','', start_menu_api, 'GET', 'JSON'); 删除/admin/templates/start.htm中以下代码 Ajax.call('cloud.php?is_ajax=1>act=cloud_remind','', cloud_api, 'GET',

ecshop 中的json

ecshop中有2个地方使用了json,一个是cls_json.php文件,一个是transport.js文件. cls_json 封装了json类,可以调用里面的encode的方法,根据参数不同,进行不同的转化,调用json_encode可以直接进行转化.是php对json的处理. transport.js是ecshop封装的ajax方法,通过ajax.call 来实现ajax的调用.ajax传值的过程中,可以选择json来传递,一般也是选择它的,因为这样调用起来方便,转化也方便.所以它对js