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

◆二次开发php

  一、什么是二次开发? html

二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,而后达到本身想要的功能和效果,通常来讲都不会改变原有系统的内核。mysql

  二、为何要二次开发? web

随着信息化技术的不断发展,IT行业涌现出了一系列优秀的开源做品,其做者或是我的,或是项目小组,或是软件公司。选择和 应用这些优秀的开源软件,并在此基础上进行符合业务需求的二次开发,将给企业节省信息化成本(时间成本及开发成本)的同时,更能带来技术上的保障。这就是 咱们常听的:站在巨人的肩膀上,你将看的更远。因此国内不少公司须要二次开发的人才。sql

  三、怎么作二次开发? shell

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

第二,你要对这个开源产品的功能和使用要有比较熟悉,由于你熟悉了,你才知道一个需求下来,你要改什么,什么是系统自带的,大概要怎么改。编程

第三,你要熟悉这个开源产品的数据结构,代码结构,系统的框架结构,核心是哪里,附属功能是在哪里。简单点说,就是数据库,代码逻辑,文件目录的熟悉。数组

第四,根据你的需求,而后利用开源产品的内核,进行系统的扩展和修改,以达到你的需求浏览器

  四、介绍PHP的开源产品的二次开发的基本要求:

第一, 基本要求:HTML(必需要很是熟悉),PHP(能看懂代码,能写一些小系统,如:留言板,小型CMS),Mysql(至少会一种数据库),Javascript(能看懂,能改现成的一些代码),Div+Css(能进行界面的调整,明白CSS是怎么使用的)

第二, 熟悉开源产品的使用,好比 Dedecms,你要知道怎么登陆,怎么新建栏目,怎么添加文章,模板标签的使用方法,模型的概念和使用方法等等一些功能

第三, 要熟悉这个开源产品的数据库结构,还要理解里面核心文件的内容,好比:数据库类怎么使用,经常使用的安全过滤是怎么作的,模板引擎又是怎么使用的等等一些核心内容。还要知道这个开源产品的目录结构,就是说,你要知道哪是放模板的,哪里是作控制的,哪里是放样式的,等等

第四, 熟悉你的需求,对需求进行解读,而后肯定如何对 这个开源产品进行修改和扩展 通过二次开发后,你能获取到的是什么呢? 你能完成你的需求,你能积累经验,这里的经验有你本身的,也有别人的。所谓别人的,就是在你作这个二次开发的时候,你能吸取到这个系统的精华,而后融入到 你本身的思想里,你还能总结项目架构的经验。有句话说的好,就是:聪明的人会把别人的失败的经验看成本身的经验,而傻的人就是本身无数次体验失败后才做为 本身的经验。

  二次开发不只仅是开发,而更重要的是吸收精华,总结经验,理顺思路,少走弯路,提高本身。

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

◆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-网络浏览器

在网络浏览器市场中,虽然微软的封闭源码软件IE浏览器仍然占有很大的份额,但其它功能类似的开源项目已经流行起来,并在 不断壮大。像Mozilla公司的Firefox浏览器(它是开源的,还有Flock、PaleMoon)。还有增加迅速的基于Webkit的浏览器,像 Safari,但最著名的是Chrome浏览器。

若是把手机网络也算到这里面,其中Webkit主宰着iPhone、Android和Blackberry手机中的浏览器。

二、Web server software-Web服务器软件

迄今为止,Apache是使用范围最广的网络服务器软件,它是开源的,可是一个叫作Nginx的轻量级服务器软件在最近几年开始流行起来。事实上,三大顶级网络服务器软件中有两个是开源的(排名第二的微软的IIS是例外,但其距离第一相差甚远)。

另外,大量服务器端底层软件也是开源的。例如,不少大流量网站使用Varnish做为与网站访问者之间的缓存层,而使用Memcached做为与网站数据库之间的缓存层。这只是众多例子中的两个。

三、Scripting languages and web frameworks-脚本语言和Web框架

网络上使用的大部分编程和脚本语言都是开源的,好比PHP、Perl、Python、Ruby等。

可是,不多有网站完彻底全是从零开始。绝不夸张的说,有成百上千的开源内容管理系统(CMS)和网络框架来协助开发人员,例如WordPress、Drupal、Ruby on Rails、Django、Joomla、DedeCMS、Ecshop等。

四、Databases-数据库

开源软件MySQL是目前为止最流行的网站数据库,但还有其它功能类似的开源软件,好比PostgreSQL,更不用说近来出现的众多“非关系型(NoSQL)”数据库。

既然咱们说到了底层软件,那就不得不提一下每次咱们使用互联网或因特网上的任何东西时都要依靠的基础系统:

五、DNS-域名解析系统

Web(就此而言是整个因特网)离开了域名解析系统就一无可取。你们都知道,域名解析系统可让用户使用像example.com之类的域名,而不是IP地址。BIND几乎是DNS服务器(亦称名称服务器)软件的实际标准,而且,你如今可能已经猜到了,它是开源的。

六、Server operating systems-服务器操做系统

全部网站都必须在服务器上运行,而那也是开源的统治领域。虽然Windows统治着桌面领域,可是网站赖以运行的服务器大部分采用开源的Linux操做系统,其余比较流行的选择是freeBSD和OpenBSD。

七、开源的诱惑

因为在许多状况下,开源软件可以提供与商业的封闭源码软件相同的性能,而且又是免费的,因此开源软件如此流行并不奇怪。免费是一个难以挑战的价格。

假如Web不是运行在全部这些免费软件上,那么它极可能须要一段艰苦的过程,才能让人们普遍接受。

注意咱们并没说过Web中没有任何封闭源码软件,而那显然是存在的。可是,从统计数据看,Web开源统治领域中真正的例外是微软的基于Windows系列系统。

除了那个,你一般须要深刻研究才能发现更多私有封闭源码技术,像路由器和相似设备上的操做系统。但那是因特网,而不是Web。

八、结束语

多亏了80年代因特网、便捷通信以及合做与共享的兴起,开源运动才得以蓬勃发展。在90年代,当Web诞生于顶层因特网设备时,开源运动已经准备好助其一臂之力了。

没有人会否定开源统治着Web的大部分。开源和Web是一个合做共生的关系,互利互惠,合做双赢。这就是为何咱们认为Web能够说是迄今为止是开源最大的成功。

相关文章
相关标签/搜索