您的位置:

php中级篇,PHP介绍

本文目录一览:

什么叫php高级工程师

PHP 工程师 (PHP Programmar)

定义: 正在以PHP程序为主要工作,并正在进行新产品的研发.可以同时使用C+/perl等辅助提高PHP程序性能的人是PHP工程师.

描述: PHP工程师是.

特征:

1: 精通一种或多种linux.

2: 快速编写结构清晰,代码格式优美的PHP程序.

3: 能够进行框架级通用程序的研发.

4: 能够在程序开发初期就通过项目规划避免未来可能出现的性能瓶颈.

5: 能够使用框架/类库加速项目开发进度.

6: 有自己的代码库.

7: 能够胜任大部分服务器和部分服务器集群优化工作.

技术要求我就不说了.具体到PHP中级程序员之后,PHP程序员就开始选择发展方向进行分化了.能够到这一步的人,基本都对自己的职业规划有清晰的认识.目前国内此类人才奇少.

关于其他:

1 PHP程序员从中级程序员阶段就开始分化,具体方向根据公司性质,工作条件,自己的兴趣等不一而同.因此需要擅长的详细技能也不太相同.

例如: 公司使用 joomla 构建网站, 这就要求程序员必须精通joomla. 如果公司使用自研CMS+discuz构建网站,这就要求程序员能够熟练进行DISCUZ的二次开发.强行要求程序员精通这精通那,意义不大.

到高级程序员开始.PHP程序员由于自己的职业经历.肯定会有自己的专攻方向,有人擅长大负载下程序开发优化,有人擅长项目快速开发.而到这个阶段,如果PHP程序员还需要看这篇文章规划自己的职业生涯.那么请自己列出自己擅长的PHP技术.并选择一种最擅长的技术专攻.

2 关于coder和programmar. 字面上理解第一个是编码员,第二个是程序员.实际因为国内名词的混乱.第一个大多以程序员称呼,第二个目前大多处于项目核心领导层面.故本文暂以工程师称呼.

coder 是进行少量创新的,大量重复工作的人.

programmar 是进行新技术摸索开发,并实际领导/带领大中型项目开发的人.

3 关于 C++ . PHP初期的语法(php3/4时代)和C几乎一样.我当初就是看一下午PHP速成+php手册入的门.但到一定深度之后.有些PHP的特性需要实际阅读PHP源码才能理解(相关文档不全或者不好找到).有些实际项目功能使用C++开发远比PHP效率高.比如我现在做的项目需要爬虫持续海量抓取,当带宽足够的情况时,纯使用PHP实现效率不高.所以必须使用C++. 所以C++到需要用的时候自然而然的就要用了.不过如果有C/C++的基础,学习PHP要轻松很多.

4 关于面向对象.面向对象还是很帅的,小型工程上使用意义不大,大中型工程可以极大的提升开发效率.在php4的时代对面向对象基本没有什么要求,但是现在需要完整掌握面向对象.

5 关于JAVA/Delphi 他们和php有关么? 我孤陋寡闻.请牛人指教.谢谢

6 关于软件工程. 软件工程是一个实际使用中才能学懂的学科.我才疏学浅,在大学的时候楞没学懂.等实际领导项目了.才慢慢的明白其中的含义与奥妙.

8 关于开发模式. 开发模式的好坏直接关系这项目开发的速度与项目的质量.初期死抠模式意义不大.建议有一定积累了再说.

9 关于名气. 嗯...怎么说呢?高端PHP圈子很小,也就那么些人.水平到了,自然就认识那些人了.

10 关于第三方库,初期学习掌握一些,比如smarty.到一定阶段需要决定到底是精通第三方库还是使用自行积累开发的库.总的来说,由于第三方库大多是外国人开发,所以国内想要时刻紧跟比较被动,phpBB中文的没落便是一例.如果使用自行积累开发的库,难度较大,要注意通用性和可扩展性.

11 关于英文. 这个是废话.最低要求是流畅阅读英文文档.

php书籍推荐

关注PHP的人越来越多了,可惜国内PHP5方面的好书还非常少,几乎可以说没有。

PHP4即将是明日黄花,所以学PHP最好直接学PHP5。下面是我认为比较好的PHP5书籍:

1. Core PHP Programming, 3rd Edition

这本书是PHP专家Leon Atkinson和PHP创始人之一Zeev Suraski合著的。国内有

第2版,讲PHP4的,但这本第3版还买不到。学校图书馆有一本原版,可惜只有一本

(现在在我手里,咔咔)。讲得非常全面,做为Web编程方面的知识,几乎全部包括

了。最有价值的是Part 4,讲Software Enginerring的,介绍了设计、效率与调试,

还介绍了四种最常用的设计模式,非常有参考价值。可惜毕竟是03年的书,那时候

PHP5还在开发中,所以里面有一些内容并不完全适合现在的PHP5,比如名字空间(

PHP5并不支持名字空间)。不过瑕不掩瑜,做为PHP5的一本综合书籍,这本书非常

经典,可以用于入门,也可以用于提高。

2. PHP5 Power Programming

这本书是PHP的另一创始人Andi Gutmans写的,专门针对PHP5。个人感觉这本书

不适合学习,但很适合提高时参考。里面花了大量篇幅讲述PHP5的面向对象机制,

不过基本上跟Core PHP Programming重复,所以看过Core后再看这些将很快,可以

当成温故一遍。还有一章介绍了PHP5里的高级面向对象特性,如迭代器,反射API(

Reflection API,在其它面向对象语言里称自省),也介绍了设计模式。

可惜的是,跟上面一本书一样,都是只讲PHP特性的书,具体到PHP高级应用的

实战讲得感觉比较欠缺,像MVC模式,两本书都没讲到,而这些对PHP高级编程来说是

非常重要的。比较令人安慰的是这本书还介绍了很多PHP高级特性,像PEAR包,APC,

APD,Xdebug,还有Zend Studio的使用,等等,这些还是非常有价值的。

总之,这是一本很适合提高时使用的书籍,跟Core一样,也是PHP书籍中的经典。

3. PHP and MySQL Web Development, 3rd Edition

这是国内唯一能买到的PHP5书籍,中文翻译,但翻译质量不怎么样,有些句子

读起来莫名其妙。这本书比较适合初中级的PHP学习,而且非常实际,有很多基本应

用的实例,很适合入门。除了数据库知识很不错外,里面也讲到了使用PHP和MySQL

开发中等项目时所需要考虑到的问题,介绍了很多基本的软件项目管理方法,非常

实用。后面几章是一些实例,介绍了购物车(我最不喜欢这东西),邮件列表,内容

管理系统和论坛的编写,不过都只是基础,没有高级技巧,所以看起来会觉得很不舒

服,呵呵。

里面有一张泛泛地讲到了电子商务安全,可以参考下。个人感觉相当不错的内容

是MySQL部分,基本涵盖了数据库基础和MySQL基础及高级特性,但限于篇幅,没有去

讲得很深入,权当是入门指引了。

因为是国内能买到的,所以很多人可能会喜欢从这本书开始学PHP5,我觉得也不

错。总之很推荐这本书。

4. Essential PHP Security

这是一本讲述PHP编码安全的书,非常需要引起PHP开发人员的重视。我觉得这是

一本必读书籍,读过后会让你冒冷汗。现在注重安全编码的人实在太少了,对于一个

专业的PHP程序员,PHP安全特性绝对要烂熟于胸,而这本书就提供了一个非常好的视

角。

5. PHP Architect's Guide to PHP Design Patterns

这本书我正在看,对于PHP5面向对象的学习绝对非常有帮助。里面介绍了非常多

的设计模式,直接以PHP语言实现出来,可以让你一步到位使用模式思想。第17章介

绍了PHP里的MVC模式,可以说是带了个好头,很有参考价值。

由于还没看完,所以不敢多评价,但可以肯定的是,这本书对于学PHP5面向对象

高级编程的人来说是绝对必备的。

国内有中文版,phpchina社区翻译的,可以下载过来参考下。另外,好像关于

PHP设计模式的书又出了一本,叫做《PHP5: Objects, Patterns and Practice》,

可惜我Google了半天也找不到下载地址,只能作罢了,希望以后能找到。可以肯定这

又将是一本让人振奋的书。

又将是一本让人振奋的书。

最后想说明的是,Oreilly的PHP书就不用看了,包括PHP创始人Rasmus Lerdorf写的

《Programming PHP》(现在好像出第2版了),讲得东西基本上全是PHP手册里的东

西,没必要重复浪费时间。像《Learning PHP5》,《PHP Cookbook》之类,说实话

我个人感觉真的只是PHP手册的子集。最近好像又出了本同样可以看成是子集的书,

书名是《Learning PHP and MySQL》,看了一眼就没看了。不是对Oreilly有偏见,

只是因为它的书全是入门级的,没什么含金量,属于看过就扔的那种。想想KR的

《The C Programming Language》吧,呵呵。

最最后想说明的是,PHP手册,一定要反复看!这个是学PHP最重要的参考资料,每个

人都应该有一本以备不时之需。有中文翻译版的,不过里面的链接有错误,看起来不

是很方便,但多摸索几次就能把链接弄对了。

大概就讲这些了,只是我个人观点,希望大家指点批评,共同进步。

如何最快速的学习PHP

1,必须先了解php是干什么的,了解html,css,js

2,了解完后就要先学习html,css,js,可以去W3school上看,或者慕课网上看,关键的是要勤动手。

3,把html,css,js熟练后,就可以学习php了,这里要知道php最重要的地方其实就是把数据库的资源和页面做交互的作用,以这个作为中心点去学习。

4,学习中要边学边做,再简单的例子都要自己动手敲一遍,建议使用慢慢的使用比较轻便的编辑器,比如subline,notepad++等,建议尽量少使用鼠标,以后就会明白为什么要这样。

5,要深入理解MVC,面向对象,数据库

6,学习一款框架

做完上面的东西,你就是一个初级的php程序员了,中级的话就是做了很多的项目,对上面的知识运用熟练,精通。到高级的话就是可以做到不用框架也能把一个项目做得好,做得快,安全高效。

学php如何?有前途吗,去哪里学好?

首先回答你第一个问题:学PHP挺好的,因为现在APHP开发技术让APHP成为了2017年移动互联网追逐的热点。也引得很多领域外的人才纷纷转投于APHP发领域。

关于有没有前途那就要看你学的怎么样了,学好了自然前途无量。学习PHP首先你需要了解PHP的学习需要你了解一定的HTML和CSS,当然,如果想要好工作,那么JS也是要了解的。其本身并不算难事,掌握逻辑和概念之后,就可以通过实例来获取大量的PHP开发经验。能影响你学习成果的最重要的就是学习平台,在这里说说口碑和就业名列前茅的扣丁学堂。在这里毕业的学员一般初级大约6K—10K,中级10K—20k。高级开发人员一般都是拿年薪或是股份了。前景很好。

最后是去哪学的问题:线下学习费用高昂、地域限制,建议选择线上平台。如今线上学习无论是就业还是教学均已完善。扣丁学堂具有完整系统的APHP开发培训视频教程,顶级行内大牛为学员们设定了可视化的学习线路直通车,让没有学习方向的学子一目了然,最快的进入APHP领域大门。

关于服务器架构问题

初级篇:(单机模式)

假设配置:(Dual core 2.0GHz,4GB ram,SSD)

基础框架:apache(PHP) + Mysql / IIS + MSSQL

(最基础框架,处理一般访问请求)

进阶1:替换Apache为Nginx,并在数据库前加上cache层【数据库的速度是最大的瓶颈】

Nginx(PHP) + Memcache + Mysql

(此时已经具备处理小型访问量的能力)

进阶2:随着访问量的上涨,最先面临的问题就来了:CGI无法匹配上Nginx的高IO性能,这时候可以通过写扩展来替代脚本程序来提升性能,C扩展是个好办法,但是大家更喜欢用简单的脚本语言完成任务,Taobao团队开源了一个Nginx_lua模块,可以用lua写Nginx扩展,这时候可处理的并发已经超越进阶1 一个档次了。

Nginx(nginx_lua or C) + Memcache + Mysql

(此时处理个同时在线三四千人没有问题了)

进阶3:随着用户的增多,Mysql的写入速度成了又一大瓶颈,读取有memcache做缓存,但写入是直接面对Mysql,性能受到了很大阻碍,这时候,要在Nginx和Mysql中间加入一层写缓存,队列系统就出场了,就以RabbitMQ为例,所有写入操作全部丢到这只兔子的胃里面,然后屁股后面写个接应程序,一条条的拉出来再写入mysql。而RabbitMQ的写入效率是Mysql的N倍,此时架构的处理能力又上一阶层。

|----write------RabbitMQ--------

Nginx(lua or c)----- |---------Mysql

|----read------Memcache--------

(此时的并发吞吐能力已经可以处理万人左右在线)

中级篇:(分而治之)

此时我们在单机优化上已经算是达到极限,接下来就要集群来显示作用了。

数据库篇: 数据库总是在整个环节中是吞吐能力最弱的,最常见的方法就是sharding。

sharding可以按多种方法来分,没有定式,看情况。可以按用户ID区段分,按读写分等等,可用参考软件:mysql proxy(工作原理类似lvs)

缓存篇:memcache一般采用的是构建memcache pool,将缓存分散到多台memcache节点上,如何将缓存数据均匀分散在各节点,一般采用将各节点顺序编号,然后hash取余对应到各个节点上去。这样可以做到比较均匀的分散,但是有一个致命点就是,如果节点数增加或减少,将会带来几乎80%的数据迁移,解决方案我们在高级篇再提。

WEB服务器篇: web服务器集群的建设,最常见的就是lvs方式(memcache pool同样可以如此组建),lvs的核心就是调度节点,调度节点负责将流量通过算法分散到各个节点上,因调度所耗资源很少,所以可以产生很高的吞吐率,后台节点数量可以任意增删,但此法弊病就是如果调度节点挂了,则整个集群都挂了,解决方案我们在高级篇提。

高级篇:(高可用性+高可扩展性的集群)

单点调度故障解决:

集群的好处显而易见,但是有一个弊端就是单节点进行调度,如果节点出现故障,则整个集群全部都无法服务,对此的解决方案,我们使用keepalived来解决。Keepalived for Linux

keepalived是基于VRRP协议(VRRP协议介绍)的,请一定先了解VRRP协议后再进行配置。

keepalived可以把多台设备虚拟出一个IP,并自动在故障节点与备用节点之间实现failover切换。这样我们配置两台货多台lvs调度节点,然后配置好keepalived就可以做到lvs调度节点出现故障后,自动切换到备用调度节点。(同样适用于mysql)

memcache集群扩展解决:

memcache因为我们一般采用的都是hash后除以节点数取余,然后分配到对应节点上,如果节点数出现变化,以前的缓存数据将基本都不能命中。

高手帮忙

随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。

SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。

但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。

根据国情,国内的网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。在本文,我们从分入门、进阶至高级讲解一下ASP注入的方法及技巧,PHP注入的文章由NB联盟的另一位朋友zwell撰写,希望对安全工作者和程序员都有用处。了解ASP注入的朋友也请不要跳过入门篇,因为部分人对注入的基本判断方法还存在误区。大家准备好了吗?Let's Go...

入 门 篇

如果你以前没试过SQL注入的话,那么第一步先把IE菜单=工具=Internet选项=高级=显示友好 HTTP 错误信息前面的勾去掉。否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。

第一节、SQL注入原理

以下我们从一个网站开始(注:本文发表前已征得该站站长同意,大部分都是真实数据)。

在网站首页上,有名为“IE不能打开新窗口的多种解决方法”的链接,地址为:,我们在这个地址后面加上单引号’,服务器会返回下面的错误提示:

Microsoft JET Database Engine 错误 '80040e14'

字符串的语法错误 在查询表达式 'ID=49'' 中。

/showdetail.asp,行8

从这个错误提示我们能看出下面几点:

1.网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。

2.程序没有判断客户端提交的数据是否符合程序要求。

3.该SQL语句所查询的表中有一名为ID的字段。

从上面的例子我们可以知道,SQL注入的原理,就是从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取你想到得到的资料。

第二节、判断能否进行SQL注入

看完第一节,有一些人会觉得:我也是经常这样测试能否注入的,这不是很简单吗?

其实,这并不是最好的方法,为什么呢?

首先,不一定每台服务器的IIS都返回具体错误提示给客户端,如果程序中加了cint(参数)之类语句的话,SQL注入是不会成功的,但服务器同样会报错,具体提示信息为处理 URL 时服务器上出错。请和系统管理员联络。

其次,部分对SQL注入有一点了解的程序员,认为只要把单引号过滤掉就安全了,这种情况不为少数,如果你用单引号测试,是测不到注入点的

那么,什么样的测试方法才是比较准确呢?答案如下:

② and 1=1

③ and 1=2

这就是经典的1=1、1=2测试法了,怎么判断呢?看看上面三个网址返回的结果就知道了:

可以注入的表现:

① 正常显示(这是必然的,不然就是程序有错误了)

② 正常显示,内容基本与①相同

③ 提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof时)、或显示内容为空(程序加了on error resume next)

不可以注入就比较容易判断了,①同样正常显示,②和③一般都会有程序定义的错误提示,或提示类型转换时出错。

当然,这只是传入参数是数字型的时候用的判断方法,实际应用的时候会有字符型和搜索型参数,我将在中级篇的“SQL注入一般步骤”再做分析。

第三节、判断数据库类型及注入方法

不同的数据库的函数、注入方法都是有差异的,所以在注入之前,我们还要判断一下数据库的类型。一般ASP最常搭配的数据库是Access和SQLServer,网上超过99%的网站都是其中之一。

怎么让程序告诉你它使用的什么数据库呢?来看看:

SQLServer有一些系统变量,如果服务器IIS提示没关闭,并且SQLServer返回错误提示的话,那可以直接从出错信息获取,方法如下:

and user0

这句语句很简单,但却包含了SQLServer特有注入方法的精髓,我自己也是在一次无意的测试中发现这种效率极高的猜解方法。让我看来看看它的含义:首先,前面的语句是正常的,重点在and user0,我们知道,user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQLServer的出错提示是:将nvarchar值 ”abc” 转换数据类型为 int 的列时发生语法错误,呵呵,abc正是变量user的值,这样,不废吹灰之力就拿到了数据库的用户名。在以后的篇幅里,大家会看到很多用这种方法的语句。

顺便说几句,众所周知,SQLServer的用户sa是个等同Adminstrators权限的角色,拿到了sa权限,几乎肯定可以拿到主机的Administrator了。上面的方法可以很方便的测试出是否是用sa登录,要注意的是:如果是sa登录,提示是将”dbo”转换成int的列发生错误,而不是”sa”。

如果服务器IIS不允许返回错误提示,那怎么判断数据库类型呢?我们可以从Access和SQLServer和区别入手,Access和SQLServer都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统表[msysobjects]中,但在Web环境下读该表会提示“没有权限”,SQLServer是在表[sysobjects]中,在Web环境下可正常读取。

在确认可以注入的情况下,使用下面的语句:

and (select count(*) from sysobjects)0

and (select count(*) from msysobjects)0

如果数据库是SQLServer,那么第一个网址的页面与原页面是大致相同的;而第二个网址,由于找不到表msysobjects,会提示出错,就算程序有容错处理,页面也与原页面完全不同。

如果数据库用的是Access,那么情况就有所不同,第一个网址的页面与原页面完全不同;第二个网址,则视乎数据库设置是否允许读该系统表,一般来说是不允许的,所以与原网址也是完全不同。大多数情况下,用第一个网址就可以得知系统所用的数据库类型,第二个网址只作为开启IIS错误提示时的验证。