开源系统_二次开发(转)

转自http://www.phpchina.com/portal.php?mod=view&aid=40204, 更多详细资料请参看原文

最好最实用的二次开发教程

  ◆二次开发

  什么是二次开发?

  二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一

般来说都不会改变原有系统的内核。

  为什么要二次开发?

  随着信息化技术的不断发展,IT行业涌现出了一系列优秀的开源作品,其作者或是个人,或是项目小组,或

是软件公司。选择和应用这些优秀的开源软件,并在此基础上进行符合业务需求的二次开发,将给企业节省信息

化成本(时间成本及开发成本)的同时,更能带来技术上的保障。这就是我们常听的:站在巨人的肩膀上,你将看

的更远。所以国内很多公司需要二次开发的人才。

  怎么做二次开发?

  第一,你要有这个开源产品的所用语言的语言基础,能看懂代码是最基本的。

  第二,你要对这个开源产品的功能和使用要有比较熟悉,因为你熟悉了,你才知道一个需求下来,你要改什

么,什么是系统自带的,大概要怎么改。

  第三,你要熟悉这个开源产品的数据结构,代码结构,系统的框架结构,核心是哪里,附属功能是在哪里。

简单点说,就是数据库,代码逻辑,文件目录的熟悉。

  第四,根据你的需求,然后利用开源产品的内核,进行系统的扩展和修改,以达到你的需求介绍PHP的开源

产品的二次开发的基本要求:

  第一, 基本要求:HTML(必须要非常熟悉),PHP(能看懂代码,能写一些小系统,如:留言板,小型CMS),

Mysql(至少会一种数据库),Javascript(能看懂,能改现成的一些代码),Div+Css(能进行界面的调整,明白CSS

是怎么使用的)

  第二, 熟悉开源产品的使用,比如 Dedecms,你要知道怎么登录,怎么新建栏目,怎么添加文章,模板标

签的使用方法,模型的概念和使用方法等等一些功能

  第三, 要熟悉这个开源产品的数据库结构,还要理解里面核心文件的内容,比如:数据库类怎么使用,常

用的安全过滤是怎么做的,模板引擎又是怎么使用的等等一些核心内容。还要知道这个开源产品的目录结构,就

是说,你要知道哪是放模板的,哪里是做控制的,哪里是放样式的,等等

  第四, 熟悉你的需求,对需求进行解读,然后确定如何对这个开源产品进行修改和扩展

  经过二次开发后,你能获取到的是什么呢?

  你能完成你的需求,你能积累经验,这里的经验有你自己的,也有别人的。所谓别人的,就是在你做这个二

次开发的时候,你能吸收到这个系统的精华,然后融入到你自己的思想里,你还能总结项目架构的经验。有句话

说的好,就是:聪明的人会把别人的失败的经验当作自己的经验,而傻的人就是自己无数次体验失败后才作为自

己的经验。二次开发不仅仅是开发,而更重要的是吸取精华,总结经验,理顺思路,少走弯路,提升自己。

  站在巨人的肩膀上,你将看的更远!!!

  ◆DedeCMS二次开发

  为了让更多人了解二次开发,并更方便的了解DedeCMS的二次开发,下面将会简单的介绍关于DedeCMS二次开

发的一些基础和大纲

  DedeCMS二次开发必备基础:

  · 非常熟悉HTML

  · 熟悉DIV+CSS的布局

  · 扎实的PHP基础,熟悉结构化编程,了解OOP,并能看懂和使用

  · 熟悉MYSQL,掌握SQL语言

  DedeCMS二次开发学习过程

  · 理解CMS是什么

  · 熟悉DedeCMS的功能(如:栏目的分类,文档管理,模型的使用,系统的设置等常用的功能)

  · 掌握DedeCMS的模板标签使用及原理

  · DedeCMS目录结构分析

  熟悉每个文件夹里面主要装什么文件,这样在二次开发的时候知道在哪个文件夹下的什么文件修改

  目录结构摘要:

  ./a 生成文件存放路径

  ./data 缓存文件及数据中心

  /admin 管理后台数据

  /backupdata 备份数据

  /cache 缓存文件

  /enums 级别联动数据,JS,枚举类型的缓存文件

  /js 常用的JS

  /mark 水印相关文件

  /module 模块安装文件

  /rss Rss相关

  /sessions Session 存放路径

  /textdata 文本数据

  /tplcache 模板缓存

  /uploadtmp 上传文件缓存位置

  /ziptmp zip包解压缓存位置

  ……

  DedeCMS文件结构分析

  熟悉每个文件的基本功能,方便做修改,知道每个文件的大概作用之后,可以方便的对文件进行修改

  文件结构摘要:

  common.inc.php 数据库配置文件

  config.cache.bak.php 后台系统配置备份

  config.cache.inc.php 后台系统配置文件缓存

  downmix.data.php 采集混淆缓存文件

  mysql_error_track.inc MYSQL错误??志

  safequestions.php 安全问题

  sitemap.html 站点地图

  sys_pay.cache.php 支付网关配置

  template.rand.php 随机模板设置

  ……

  · DedeCMS数据库结构分析,至少要熟悉每个表的作用

  熟悉每个表的作用,了解几个核心表的设计及字段的含义,方便拿到新的需求之后,能快速的判断是否加字

段,还是新建表来处理。同时也能理解DedeCMS的数据库设计思想,把有用的设计思路加到自己的系统中。

  · DedeCMS的流程控制,及一些核心文件的解析

  熟悉一些登陆,注册,文档管理,权限控制,分类管理,模型设置等一些常用流程控制。对几个核心文件进

行解剖,了解其编程技巧及安全机制

  · DedeCMS插件的开发(****式插件和内嵌式插件)

  熟悉两种插件的编写,插件的导入导出,插件搭配模型的使用

  ◆Ecshop二次开发

  EcShop二次开发学习方法

  近年来,随着互联网的发展,电子商务也跟着一起成长,B2B,C2C,B2C的电子商务模式也不断的成熟。这时

催生出了众多电子商务相关的PHP开源产品。B2C方面有Ecshop,Zencart,Magento等国内外知名产品。

  下面我们就来简单介绍一下学习Ecshop二次开发的过程和要注意的一些东西:

  Ecshop二次开发必备基础:

  · 非常熟悉HTML

  · 熟悉DIV+CSS的布局

  · 扎实的PHP基础,熟悉结构化编程,了解OOP,并能看懂和使用

  · 熟悉Smarty模板引擎

  · 熟悉MYSQL,掌握SQL语言

  Ecshop二次开发学习过程

  · 熟悉电子商务基本概念

  · 熟悉EcShop 的基本功能使用(商品类型,商品分类,商品属性设置,促销活动使用等)

  · 掌握Ecshop的数据库结构和数据库设计思想

  · 熟悉ER的模式,实体与关系的建立

  熟悉每个表的作用,了解几个核心表的设计及字段的含义,方便拿到新的需求之后,能快速的判断是否加字

段,还是新建表来处理。同时也能理解Ecshop的数据库设计思想,把有用的设计思路加到自己的系统中

  · 文件结构分析及代码分析

  熟悉一些登陆,注册,文档管理,权限控制,分类管理,商品类型等一些常用流程控制。对几个核心文件进

行解剖,了解其编程技巧及安全机制

  · Ecshop文件结构分析:

  \includes\cls_captcha.php: 验证码图片类

  \includes\cls_ecshop.php: 基础类

  \includes\cls_ecshop.php(56): 密码编译方法;

  \includes\cls_rss.php: RSS 类

  \includes\cls_smtp.php: SMTP 邮件类

  \includes\inc_constant.php: 常量

  \includes\init.php: 前台公用文件

  \includes\lib_common.php: 公用函数库

  \includes\lib_goodscat.php: 前台公用函数库

  \includes\lib_insert.php: 动态内容函数库

  \includes\lib_main.php: 前台公用函数库

  \includes\lib_payment.php: 支付接口函数库

  \includes\iconv\cls_iconv.php: 字符集转换类

  \includes\ip\cls_ip.php: IP 归属地查询类

  \includes\modules\integrates\discuz.php: 会员数据处理类

  \includes\modules\integrates\ecshop.php: 会员数据处理类

  Ecshop模板更换

  熟悉Smarty的精简版的使用,嵌入自己的界面,EcShop模板的跟换技巧

  Ecshop二次开发实例

  中英文切换的功能,秒杀功能,京东商城模板的制作等

  学习目的:

  1,会使用Ecshop进行二次开发

  2,会换普通的模板及一些功能的修改

  3,吸取里面的开发经验

  掌握基础知识-》模仿里面的一些写法-》修改里面的模式(形成自己的开发模式)

  掌握Ecshop里面的编程技巧及系统设计技巧

  ◆缓存技术分析

  常见的PHP缓存技术分析[概念版]

  在大部份情况下我们的网站都会使用数据库作为站点数据存储的容器。当你执行一个SQL查询时,典型的处

理过程是:连接数据库->准备SQL查询->发送查询到数据库->取得数据库返回结果->关闭数据库连接。但数据库

中有些数据是完全静态的或不太经常变动的,缓存系统会通过把SQL查询的结果缓存到一个更快的存储系统中存

储,从而避免频繁操作数据库而很大程度上提高了程序执行时间,而且缓存查询结果也允许你后期处理。

  普遍使用的缓存技术

  数据缓存:这里所说的数据缓存是指数据库查询缓存,每次访问页面的时候,都会先检测相应的缓存数据是

否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件

  中,以后同样的查询结果就直接从缓存文件中获得。

  页面缓存:

  每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,

显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些

缓存类通常有此功能)

  内存缓存:

  在里就不介绍了,不是本文所要讨论的,只简单提一下:

  Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

  dbcached 是一款基于 Memcached 和 NMDB 的分布式 key-value 数据库内存缓存系统。

  以上的缓存技术虽然能很好的解决频繁查询数据库的问题,但其缺点在在于数据无时效性,下面我给出我在

项目中常用的方法:

  时间触发缓存:

  检查文件是否存在并且时间戳小于设置的过期时间,如果文件修改的时间戳比当前时间戳减去过期时间戳

大,那么就用缓存,否则更新缓存。

  设定时间内不去判断数据是否要更新,过了设定时间再更新缓存。以上只适合对时效性要求不高的情况下使

用 ,否则请看下面。

  内容触发缓存:

  当插入数据或更新数据时,强制更新缓存。

  在这里我们可以看到,当有大量数据频繁需要更新时,最后都要涉及磁盘读写操作。怎么解决呢?我在日常

项目中,通常并不缓存所有内容,而是缓存一部分不经常变的内容来解决。但在大负荷的情况下,最好要用共享

内存做缓存系统。

  到这里PHP缓存也许有点解决方案了,但其缺点是,因为每次请求仍然要经过PHP解析,在大负荷的情况下效

率问题还是比效严重,在这种情况下,也许会用到静态缓存。

  静态缓存

  这里所说的静态缓存是指HTML缓存,HTML缓存一般是无需判断数据是否要更新的,因为通常在使用HTML的场

合一般是不经常变动内容的页面。数据更新的时候把HTML也强制更新一下就可以了。

  其实一个缓存系统涉及的问题是比较多的,我在这里只介绍一下我平时的缓存思路,并没有介绍利用软件来

实现缓存和写出具体代码。

  如果您有什么好的解决方案也请在下面提出,让我们一起互相探讨。

  ◆PHP使用函数调用命令

  php中使用exec,system等函数调用系统命令

  php的内置函数exec,system都可以调用系统命令(shell命令),当然还有passthru,escapeshellcmd等函数。

  在很多时候利用php的exec,system等函数调用系统命令可以帮助我们更好更快的完成工作。比如前二天笔者

在批量处理.rar文件时exec就帮我了大忙了。

  今天整理一下常用的调用系统函数发出来和大家分享经验。

  注意:要想使用这二个函数php.ini中的安全模式必须关闭,要不然为了安全起见php是不让调用系统命令

的。

  先看一下php手册对这二个函数的解释:

  exec --- 执行外部程式

  语法 : string exec ( string command [, array &output [, int &return_var]] )

  说明 :

  exec( )执行给予的命令command,不过它并不会输出任何东西,它简单的从命令的结果中传回最后一行,如

果你需要去执行一个命令,并且从命令去取得所有资料时,可以使用passthru( )这个函数。

  如果有给予参数array,则指定的数组将会被命令所输出的每一行填满,注意 : 如果数组先前已经包含了一

些元素的话,exec( )将会把它附加在数组的后面,如果你不想要此函数附加元素的话,你可以在传递此数组给

exec( )之前呼叫unset( )。

  如果有给予参数array和return_var,则传回执行的状态命令将会写到这个变量。

  注意 : 如果你允许来自使用者输入的资料,可以传递到此函数,那么你应该使用escapeshellcmd( )来确定

此使用者无法哄骗(trick)系统来执行武断的(arbitrary)命令。

  注意 : 如果你使用此函数来启动一个程式,而且希望在背景里(background)执行的时候离开它,你必须确

定此程式的输出是转向(redirected)到一个文件或是一些输出的资料流,否则PHP将会悬挂(hang)直到程式执行

结束。

  system --- 执行外部程式并且显示输出

  语法 : string system ( string command [, int &return_var] )

  说明 :

  system( )执行给予的命令command,并且输出结果。如果有给予参数return_var,则执行命令的状态码将会

写到这个变量。

  注意 : 如果你允许来自使用者输入的资料,可以传递到此函数,那么你应该使用escapeshellcmd( )来确定

此使用者无法哄骗(trick)系统来执行武断的(arbitrary)命令。

  注意 : 如果你使用此函数来启动一个程式,而且希望在背景里(background)执行的时候离开它,你必须确

定此程式的输出是转向(redirected)到一个文件或是一些输出的资料流,否则PHP将会悬挂(hang)直到程式执行

结束。

  如果PHP是运作成伺服器模组,在输出每一行后,system( )会试着自动地清除web伺服器的输出缓冲。

  成功则传回命令的最后一行,失败则传回false。

  如果你需要去执行一个命令,并且从命令去取得所有资料时,可以使用passthru( )这个函数。

  这二个都是用来调用系统shell命令,

  不同点:

  exec可以把执行的结果全部返回到$output函数里(数组),$status是执行的状态 0为成功 1为失败

  systerm不需要提供$output函数,他是直接把结果返回出来,同样$return_var是执行的状态码 0为成功 1

为失败

  ◆关于开源

  开源最大的成功来源于Web

  开源运动广受欢迎,并且在软件开发史上写下了浓重一笔。但是它影响最深远的地方在哪呢?有史以来,最

成功的开源“项目”又是什么呢?

  事实上,总体来看,Web不就是开源运动最大的成功么?

  可能最有名的例子就是隐藏域众多网站背后的LAMP,也就是Linux、Apache、MySQL和PHP。但当你仔细考虑

后,你会发现更多。

  下面列出了Web得以运转的一些开源项目。

  Web browsers-网络浏览器

时间: 2024-08-03 06:49:21

开源系统_二次开发(转)的相关文章

搭建rtmp直播流服务之4:videoJS/ckPlayer开源播放器二次开发(播放rtmp、hls直播流及普通视频)

前面几章讲解了使用nginx-rtmp搭建直播流媒体服务器,以及使用ffmpeg推流到nginx-rtmp服务器,java通过命令行调用ffmpeg实现推流服务,后端的事情到这里就已经全部完成了. 本章讲一下播放器的选用和二次开发,前端的播放器虽然有flex(flash)可以用,但是很遗憾flex接触的并不多,学习成本又太高,那么基于第三方开源的flash播放器二次开发就显得很有必要. 一.几种播放器选择 那么播放器,哪些已经不再更新的和收费的,这里不会介绍,只介绍两种轻量级的开源播放器. 1.

搭建rtmp直播流服务之4:videojs和ckPlayer开源播放器二次开发(播放rtmp、hls直播流及普通视频)

前面几章讲解了使用 nginx-rtmp搭建直播流媒体服务器; ffmpeg推流到nginx-rtmp服务器; java通过命令行调用ffmpeg实现推流服务; 从数据源获取,到使用ffmpeg推流,再到nginx-rtmp发布流,后端的服务到这里就已经全部完成了. 如果这里的流程没走通,那么这里的播放器也是没办法播放实时流的. 本章讲一下播放器的选用和二次开发,前端的播放器虽然有flex(flash)可以用,但是很遗憾flex接触的并不多,学习成本又太高,那么基于第三方开源的flash播放器二

Laravel入门及实践,快速上手社交系统ThinkSNS+二次开发

[摘要]自从社交系统ThinkSNS+不使用ThinkPHP框架而使用Laravel框架之后,很多人都说技术门槛抬高了,其实你与TS+的距离仅仅只是学习一个新框架而已,所以,我们今天来说说Laravel的入门. 温馨提示: l 本文纯干货,文字和代码居多,且适合零基础Laravel学习者: l 本文会新建一个名为 blog 的 Laravel 程序,这是一个非常简单的博客. 本文主要内容: · 新建 Laravel 程序,如何连接数据库: · Laravel 程序的基本文件结构: · MVC(模

[转载]织梦DEDE多选项筛选_联动筛选功能的实现_二次开发

织梦默认的列表页没有筛选功能,但有时候我们做产品列表页的时候,产品的字段比较多,很多人都需要用到筛选功能,这样可以让用户更方便的找到自己所需要的东西,实现这个联动筛选功能需要对织梦进行二次开发,下面就告诉大家如何对织梦进行二次开发实现这个很多人都需要的筛选功能,如下图所示: 首先需要说明的是这个功能需要在模板里面用到php标签,所以需要在后台模板引擎禁用标签里面解除这个标签的禁用,具体方法: 后台——系统——系统基本参数——其它选项——模板引擎禁用标签:php 将这个PHP去掉后保存就可以了!

国外邮件列表系统phplist二次开发纪要

一般能用到的 1.语言设置    $language_module = "tchinese.inc";    $default_system_language = 'zh_CN'; 2.smtp发信设置     在 "config/config.php"添加以下信息    define("PHPMAILERHOST",'mail.mail.com');    $phpmailer_smtpuser = '[email protected]';  

呼叫中心系统OA二次开发

1.         既有修改 分辨率显示自适应调整 工作流数据调整 2.         呼叫中心 语音电话 l         新建任务 字段:任务主题.语音主题.提交时间.执行时间.任务量.成功.有效接听.无效接听.失败.反馈.任务状态.操作等 功能:查询.新建任务.试听.外呼.修改.删除等 注意:任务管理内的相关数字与内容有链接,可点击查看明细. l         历史任务 l         外呼清单 l         语音管理 字段:语音主题.内容.总时长.有效接听时长.状态.日

Ecshop系统二次开发教程及流程演示

来源:互联网 作者:佚名 时间:03-01 16:05:31 [大 中 小] Ecshop想必大家不会觉得陌生吧,大部分的B2C独立网店系统都用的是Ecshop系统,很受用户的喜爱,但是由于Ecshop模板自带有很多Ecshop的Logo和版权信息,和一些其他需要修改的地方,所以我们需要对Ecshop系统做二次开发,下面就来看看具体操作步骤吧 一.Ecshop简介: ECShop是Comsenz公司推出的一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店.系统是基于PHP语言及MYSQ

软件二次开发的系统平台

二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能,一般来说都不会改变原有系统的内核.一般的来说,一些大公司如IBM开发了一个大型的软件系统平台,根据不同的客户的需要,一些其它的中小公司为客户根据需求在该平台上进行第二次有针对性的开发.是否提供相应的接口,有的软件公司只提供软件,但也有小公司连代码一起出售,如是后者,就更方便进行二次开发.比如售票系统,车站里面弄好了,提供几个储存过程给银行,银行就可以代理售票了,这也是一种,还有一种如我们利用delphi,C#等

【转】Java开源项目源码阅读方法及二次开发方法

一直以来,都想要阅读某些Java开源项目的源代码,甚至想要修改某些代码,实现对开源项目进行二次开发的目的.但总是不知从何入手,直接将开源项目的源代码导入Eclipse,总是会报很多错误,而无法编译.可以直接通过Eclipse打开开源项目的源代码,至少能够达到可视化源码阅读.源码导航的目的,还是能在一定程度上解决源码阅读不爽的问题,因为直接打开并没有改变源文件项目的目录结果,对于修改过后的代码,可以通过命令行找到源文件项目目录,并使用mvn或者ant对项目进行编译,再查看修改后的项目是否正确. 由