Linux VPS Nginx+PHP 安装ionCube
今天下载了一个whmcs,在自己的VPS上测试一下,但是提示:Site error: the file /home/test/whmcs/index.php requires the ionCube PHP Loader ioncube_loader_lin_5.2.so to be installed by the site administrator.
上面的提示是没有安装ionCube的原因。
首先,执行uname -a 查看系统是32位还是64位,打开http://www.ioncube.com/loaders.php页面根据Linux是32位还是64位下载适当的软件包,比如我的是32位的,切换到/usr/local/目录,执行cd /usr/local ,wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz 下载,再执行tar zxvf ioncube_loaders_lin_x86.tar.gz 解压软件包。
修改/usr/local/php/etc/php.ini 在文件尾部添加如下代码:
[ionCube Loader]
zend_extension="/usr/local/ioncube/ioncube_loader_lin_5.2.so" (全文 ...)
简单总结echo()和print()、require()和include()等易混淆函数的区别
1.echo和print的区别
PHP中echo和print的功能基本相同(输出),但是两者之间还是有细微差别的。echo输出后没有返回值,但print有返回值,当其执行失败时返回flase。因此可以作为一个普通函数来使用,例如执行下面的代码后变量$r的值将为1。
$r = print "Hello World";
这意味着print可用在一些复杂的表达式中,而echo则不行。但是,因为echo语句不要求返回任何数值,所已在代码中echo语句的运行效率要略微快于print语句。
2.include与require的区别
include()与require()的功能也基本相同(包含),但在用法上也有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。例如在下面代码中,如果变量$a为真,则将包含文件a.php:
if($a){
include("a.php");
}
而require()则和include()不同,不管$a取何值,下面的代码将把文件a.php包含进文件里:
if($a){
require("a.php");
}
在错误处理方面,使用include语句,如果发生包含错误,程序将跳过include语句,虽然会显示错误信息但是程序还是会继续执行!但requre却会给你来个致命错误。
当然,从字面意思上我们也可以理解七分:requre是很强硬的请求、要求的意思。
3.require_once()和include_once()语句
题外话了,因为长的像,简单require_once()和include_once()语句分别对应于require()和include()语句。require_once() 和include_once()语句主要用于需要包含多个文件时,可以有效地避免把同一段代码包含进去而出现函数或变量重复定义的错误。
4.空字符串('')和NULL的区别
PHP中空字符串和NULL都是以值为0存储的,但是他们的类型并不一样,你可以试一下echo gettype('');和echo gettype(NULL);你会发现他们打印出来的分别是string和NULL,当然还有0也容易混淆,你可以试试echo gettype(0);打印一下类型,会发现0的类型是integer(整型),可见字符串('')、NULL和0是“等值”但不等类型。
5.isset和 empty的区别
从字面意思上我们就可以明白:empty是判断一个变量是否为“空”,而isset 则是判断一个变量是否已经设置。但是这里有一点绝对要注意起来:当一个变量值为0,empty 认为这个变量同等于空,即相当于没有设置。比如当我们检测$id 变量的时候,当$id=0 ,用empty和isset来检测变量$id是否已经配置,两都将返回不同的值:empty 认为没有配置,isset 则能够取得 $id 的值,看下边例子:
$id=0;
emptyempty($id)?print "我是空的":print "我是$id ."; //结果:我是空的
!isset($id)?print "我是空的":print "我是$id .";//结果:我是0
6.==(等)和===(恒等)的区别
回顾上面第四条空字符串("")和NULL的区别,再来看一个例子:
'' == NULL;
'' === NULL;
运行之后你会发现第一个为true,而第二个则为false!可见==只是比较值是否相等,而===则不但比较值,还会比较类型,更为严格。
用穿越火线快速入门php面向对象
- <?php
- /*
- *用穿越火线快速入门php面向对象!
- *php目前已经成为国内的主流web developer的首选开发语言,其强大的面向对象容易使初学者找不到思绪,一头雾水!
- *,借助此文希望对初学者有所帮助,假设Crossfire用php来开发.
- * 1类与对象
- */
- class Crossfire
- {
- public $Category='1,2,3'; //枪械种类,3个选择武器类别
- public $Weapon='ak|awp|m4a1';//购买的武器,拥有的武器
- public $Flashlight=true;//是否购买闪光弹
- public $Bomb=false; //购买了闪光同等条件下不能再次购买手雷
- function attack()
- {
- //攻击的代码 $this->Weapon;使用武器
- }
- function repair()
- {
- //修理武器的代码
- }
- function destroy()
- {
- //武器坏了自动销毁代码
- }
- /*
- * 我们把cf看成是一个类,cf里面有主武器,副武器,枪械,刀类,弹物,防弹衣,喷图等等..
- * 以上都是类中的成员属性,假如武器坏了,那么我们就得维修,维修就是类的成员方法!
- * 每种枪械都有不同的威力,不同的子弹数量,大小不同但是都是武器类,这是类和对象的关系(类的实例化结果就是对象)。
- *
- */
- function __construct()
- {
- //武器维修 $this->repair();
- }
- function __destruct()
- {
- //武器超过耐久自动消失 $this->destroy();
- }
- private function buy()
- {
- //购买武器私有属性代码
- }
- private function __get()
- {
- //调用购买的武器代码
- }
- private function __set()
- {
- //给买的武器购买子弹数量代码
- }
- private function __isset()
- {
- //检查钱数是够购买子弹数
- }
- private function __unset()
- {
- //如果中途死亡自动掉落武器
- }
- }
- class role extends Crossfire
- {
- //个人角色继承cf的属性,角色可以使用购买,销毁上面的物品
- function attack()
- {
- Crossfire::attack();
- $this->Weapon='awm-a';
- //如果中途换枪,加入换枪的弹量,伤害!
- }
- final function vip()
- {
- //购买vip,final关键字是禁止方法和属性继承!vip是需要money购买,所以因此不能被继承!
- }
- public static $awm=100;//awm 伤害是固定的所以用静态
- public static function awm()
- {
- self::$awm;//awm攻击代码,self调用静态. 方法的重载
- }
- public function __toString()
- {
- return $this->repair(); //自动返回武器维修的费用
- }
- }
- interface map
- {
- //地图代码,一个子类只能继承一次父类,地图是每个玩家都要用的,显而意见继承是不能够满足需求的,接口为我们解决瓶颈!
- public function map1()
- {
- //黑色城镇
- }
- function map2()
- {
- //运输船
- }
- }
- interface vipmap extends map
- {
- //如果是会员就显示会员地图,继承接口总地图
- function _vipmap()
- {
- //vip建图颜色先是红色
- }
- function _vipmap1()
- {
- }
- }
- $cf=new Crossfire();
- echo $cf->Weapon;//输出拥有的武器!
- /*
- * $对象名称= new 类名称();
- 创建新类我们使用new,我们新创建了一个cf类,$cb就是Crossfire的对象!
- &nb sp; 多态的应用,抽象类没有讲,当然一个完整的游戏是不可能从此简单的,只是做个比喻!
- */
- $cf2=clone $cf; //克隆操作表示所有玩家都使用此类!
- ?>
让你成为PHP开发高手的五种方法
国外著名站长blog开发者指南developertutorials.com发表了一篇《5种方法让您成为php开发高手》,笔者简单翻译了一下,有错误请批评指教。原文地址http://www.developertutorials.co ... r-php-developer-36/
我们经常会在聊天室或论坛里遇到php初学者问各种各样的有关php的问题,如果问题过于简单,人们往往回复为“看手册”、“先学学PHP吧”、“我们可不能手把手教你”或者就一句“你应该学的差不多再来问”。怎样才能学的差不多?这篇帖子将教给初学者5种PHP的学习方法,可以提高效率,少写些代码,更佳的网络应用。用PHP开发程序总是要不断的学习:新的函数、新的框架、新的设计面版、新的代码文档样式。下面介绍一些最佳的PHP进阶方法。
1、读手册
我确实不太注重这个,因为手册中的东西实在是太多了。特别是字符串、数组函数。手册用起来比较方便,当你阅读手册时你常常会发现一些核心函数可以替代以前的程序做的很多无用功。手册是你的好伙伴。
2、浏览代码
PHP有很多的开放代码资源,为什么不利用呢?下载一个共享的PHP应用程序并读代码。可能越大的工程越好,因为有着更完整的体系和结构,同时也有完整的文档可供参考。如果你无从起步不妨查看www.sourceforge.net这个网站。
3、学习新的框架
PHP框架数不胜数,很多都是开源而且多数网上可以查到。可以先上最全面的网站www.phpframeworks.com,其中有一个很好的PHP框架列表。对PHP框架的应用很多,你的下一个程序可能就需要一个新的框架,你一定会发现它在工程有着广泛的应用。
4、研究
你一定听说过不少PHP术语,从OOP到MVC、KISS到DRY、YAML到INI、REST到XML-RPC,有数百科技概念与你的工作有关。你可能已经对他们有了一个基本的认识,可是你真的知道它们是什么或者对你有什么意义吗?花点时间研究一下,wikipedia是一个开始的好地方,一定可以让你学到一些新东西。
5、学习OOP
可能接下来的这些方法与以前的略显不同,但OOP确实比想象的还重要。你知道PHP5的OOP吗?举例来说,抽象类、关键词、静态和属性,“保护的”接口修改?即使是资深的PHP程序员可能都不懂这些。如果你能够应用OOP就可以节省很多开发的时间。
这就是5条简单易懂但是意味深长的成为一个出色PHP开发人员的方法。
Ajax+PHP简单基础入门教程
Ajax 由 HTML、JavaScript™ 技术、DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用程序。对于Ajax,最核心的一个对象是XMLHttpRequest,所有的Ajax操作都离不开对这个对象的操作。
首先我们来了解怎么在javascript中创建这个对象:
var xmlHttp = new XMLHttpRequest();
这行简单的代码在 Mozilla、Firefox、Safari、Opera 以及基本上所有以任何形式或方式支持 Ajax 的非 Microsoft 浏览器中,创建了 XMLHttpRequest 对象。但是对于市场占有率达到70%的IE来说,这种方法是不行的,而不同的IE版本还有不同的创建方法,所以我们需要在IE下面使用下面两种创建对象的办法:
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");//针对较新的浏览器
} catch (err) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//针对较老的浏览器
} catch (err2) {
xmlHttp = false;
}
}
即使这样,我们也无法预料有些浏览器可能无法创建这个对象,所以在创建不成功的情况下,我们还要加上一句:
if (!xmlHttp){
alert("无法创建 XMLHttpRequest 对象!");
}
结合起来就是:
var xmlHttp = false;
try {
xmlHttp = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
xmlHttp = false;
}
}
}
if (!xmlHttp){
alert("无法创建 XMLHttpRequest 对象!");
}
然后,让我们建立一个函数getInfo(),打开异步请求:
function getInfo() {
var num = document.getElementById("num").value;//获得表单的数据
var url = "/ajax/1.php?n=" + escape(num);
xmlHttp.open("GET", url, true);//这里的true代表是异步请求
}
一旦用 open() 配置好之后,就可以发送请求了。虽然可以使用 send() 发送数据,但也能通过 URL 本身发送数据。事实上,在大部分GET 请求中,用 URL 发送数据要容易得多,所以这里用null作为send()的参数就可以了。url地址里面的php文件是被请求来处理所需要数据的php文件,就像我们平时用PHP的时候一样,后面的参数可以加多个,并用&分隔开来。
xmlHttp.send(null);
在发送了数据之后,我们需要用回调方法来获得服务器的状态,所以就用到了onreadystatechange 属性。
xmlHttp.onreadystatechange = updatePage;
此语句已经要放在send()语句前面,这样才会有效,后面的updatePage是处理返回信息的一个函数。完整的getInfo()如下:
function getInfo() {
var num = document.getElementById("num").value;//获得表单的数据
var url = "/ajax/1.php?n=" + escape(num);
xmlHttp.open("GET", url, true);//这里的true代表是异步请求
xmlHttp.onreadystatechange = updatePage;
xmlHttp.send(null);
}
我们还需要在html里面来触发这个函数:
<input name="num" id="num" onblur="getInfo()" type="text" />
下面我们需要来编写updatePage()这个函数:
function updatePage(){
if (xmlhttp.readyState == 4) {
var response = xmlhttp.responseText;
document.getElementById("city").value = response;
}
}
上面这段代码里面的readyState是服务器返回的一个状态,4这个状态表示请求已经发送,并处理完毕。responseText是获得服务器返回的信息,然后通过javascript赋给ID为city的表单。
到此,一个简单的Ajax程序就完成了,完整的javascript代码如下:
var xmlHttp = false;
try {
xmlHttp = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
xmlHttp = false;
}
}
}
if (!xmlHttp){
alert("无法创建 XMLHttpRequest 对象!");
}
function getInfo() {
var num = document.getElementById("num").value;//获得表单的数据
var url = "/ajax/1.php?n=" + escape(num);
xmlHttp.open("GET", url, true);//这里的true代表是异步请求
xmlHttp.onreadystatechange = updatePage;
xmlHttp.send(null);
}
function updatePage(){
if (xmlhttp.readyState == 4) {
var response = xmlhttp.responseText;
document.getElementById("city").value = response;
}
}
这里还缺一个php文件,由于处理的方式不一样,写法也不一样,而且这不是Ajax的主要部分,所以这里就不放代码了。只要记住php是输出并返回所需要的数据就可以了。
这教程,对初学者挺适合.
最常用的25个PHP模板引擎
为了找到一个好的模板引擎,我在GOOGLE上进行搜索,对他们进行了整理,以便于大家比较选择:
Smarty
Smarty的特点是将模板编译成PHP脚本,然后执行这些脚本。很快,非常灵活。
Heyes Template Class
一个非常容易使用,但功能强大并且快速的模板引擎,它帮助你把页面布局和设计从代码中分离。
FastTemplate
一个简单的变量插值模板类,它分析你的模板,把变量的值从HTML代码中分离处理。
ShellPage
一个简单易用的类,可以让你的整个网站布局基于模板文件,修改模板就能改变整个站点。
STP Simple Template Parser
一个简单、轻量级并且易于使用的模板分析类。它可以从多个模板中组装一个页面,把结果页面输出到浏览器或者文件系统。
OO Template Class
一个你可以用在自己程序中的面向兑现的模板类。
SimpleTemplate
一个可以创建和结构化网站的模板引擎。它可以解析和编译模板。
bTemplate
短小但是快速的模板类,允许你把PHP逻辑代码从HTML修饰代码中分离。
Savant
一个强大且轻量级的PEAR兼容模板系统。它是非编译型的,使用PHP语言本身做为它的模板语言。
ETS - easy template system
可以使用完全相同数据重组模板的模板系统。
EasyTemplatePHP
适用于你的站点的一个简单但是强大的模板系统。
vlibTemplate
一个快速、全能的模板系统,它包含一个缓存和调试类。
AvanTemplate
多字节安全的模板引擎,占用很少系统资源。它支持变量替换,内容块可以设置显示或隐藏。
Grafx Software’s Fast Template
一个修改版本的Fast Template系统,它包括缓存功能,调试控制台以及沉默去除为赋值块。
TemplatePower
一个快速、简单、功能强大的模板类。主要功能有嵌套的动态块支持,块/文件包含支持以及显示/隐藏未赋值的变量。
TagTemplate
这个库的功能被设计来使用模板文件,同时允许你从HTML文件检索信息。
htmltmpl: templating engine
一个适用于Python和PHP的模板引擎。它面向希望在项目中分离代码和设计的web应用开发人员。
PHP Class for Parsing Dreamweaver templates
一个分析Dreamweaver模板的简单类,被用于Gallery 2 和WordPress的自定义模块中。
MiniTemplator (Template Engine)
针对HTML文件的一个紧凑型模板引擎。对于模板变量和块定义它具有简单的语法。其中块可以嵌套。
Layout Solution
简化网站开发和维护。它拥有常用的变量和页面元素使你不需要重复做页面布局工作。
Cached Fast Template
它已经纳入 FastTemplate ,允许你缓存模板文件,甚至可以在分离的块内容上缓存不同的规格。
TinyButStrong
一个支持MySQL, Odbc, Sql-Server和ADODB的模板引擎。它包含7个方法和两个属性。
Brian Lozier’s php based template engine
只有2K大小,非常快并且是面向对象设计。
WACT
一个从设计中分离代码的模板引擎。
PHPTAL
一个PHP下面的XML/XHTML模板库。
国内好像在这方面发展的不够,相信通过一段时间的发展,国内的LAMP
php基础测试
如何改进以下的这行php代码?这段代码可以被用来测试php工程师应聘者。
< ?
echo(”Search results for query: ” .$_GET[’query’] . “.”);
? >
这段代码非常适合用来测试一个php开发人员是否合格。因为这段代码并没有要求太多记忆上的东西(例如函数的记忆),但是对安全,性能,兼容性上都做了考察。
参考答案:
< ?php
if (isset($_GET[’query’]))
{echo ‘Search results for query: ‘,
htmlspecialchars($_GET[’query’], ENT_QUOTES), ‘.’;}
? >
改进的地方有 :
* 把php短标签(< ?)换成了长标签(< ?php),因为并非所有php环境都支持短标签
* 增加判断该全局变量是否存在,防止在某些环境下出现notice错误,而且在当前的例子里如果query无则没必要输出
* 把echo的”(”去掉,echo不是一个函数,没必要使用“(”
* 把字符串两边的双引号换成了单引号,提高了性能。因为双引号里的内容会被尝试进行变量和转义字符的解析。
* 对query这个get变量进行html过滤。防止输出html,这可能会带来包括xss在内的一些危险
* echo后面的字符串之间的间隔使用逗号而不是句号。因为句号之间的字符串会先被连接起来然后再输出,而,号只是按顺序输出。在这个例子里显然不需要先连接字符串。
我说PHPer的水平区分
说句实话,写这个真够无聊的.本来看了某位大虾的类似文章,腹诽了几句也就算了.但是昨天晚上有个客户拿着这篇文章问我: 你丫的自己做
外包,你算几段PHPer?遂感觉那篇文章对某些半通不通之人的误导之深.无法,只有写此文章表明我对PHPer的水平区分的立场.
关于具体收入水平,总的来说因为这几年PHP培训班的加多,大量PHP新手开始搞乱市场,所以很难说清.在此贸然写出有误导之嫌.而且收入水平和所在地区有很大的关系,例如重庆的同水平PHPer肯定比北京的工资低.但在重庆省着点花钱反而比北京剩的工资多.
不过,PHP的市场确实在逐步混乱,目前因为培训班/大学选修课等原因,初级PHPer大量增加.故初级PHPer的工资市场有步asp呈现白菜价的趋势
.但高级PHPer仍然极为缺乏.
但我认为:工资水平和实际技术水平基本成正比,目前业界信息透明,且到目前位置高端PHPer的圈子仍然极小.大家交换信息极为方便.如果PHP水平不高,但拿到高工资的概率不高.即使PHP技术差能拿到高工资也不能长久.
以下观点属于我的一家之言,您不赞同可以拍砖,可以给我发信讨论,我的mail是 jstel && 126.com (&& 换成 @) Arain收 . qq : 155313 7 2 4 . 目前我职业做网站项目外包,也就是大家所说的自由职业者.欢迎大家有网站/crm等活发包给我.
0 : 我对PHPer的定义: PHPer是工作/程序以编写PHP程序为主,其他方面略有涉猎的人.部分由C/C++ 转来的人,虽然也做php程序,但工作重点仍是C/C++.不能说是PHPer或者不能说是纯粹的PHPer.
1 : 对PHPer的划分,我对PHPer划分为以下几个阶段.
a: PHP 爱好者 (半个PHPer)
b: PHP 初学者 (PHP Beginner)
c: PHP 初级程序员 (Primary PHP Coder)
d: PHP 中级程序员 (Junior PHP Coder)
e: PHP 高級程序员 (Senior PHP Coder)
f: PHP 工程师 (PHP Programmar)
以下是对PHPer划分的具体描述:
X: PHPer的共同特点:
0: 会电脑,能上网.
1: 知道w3c标准,
2: 会html,会JS,会PHP.会MySQL.
3: 知道linux.见过linux运行.
不满足以上内容者别说自己是PHPer.
以下对不同阶段的描述, 每一个高级阶段都需要掌握低级阶段的技能 . 他们之间具有继承关系. 在初级阶段,由于目前国内的情况.经常需要PHPer兼美工/网管的功能.所以也写了一部分其他技能.
a: PHP 爱好者
定义: 以PHP程序为业余爱好,建有或正维护着一个或几个使用PHP技术实现的网站/程序的人是PHP 爱好者.
描述: 这些人一般不以PHP为谋生手段,他们的分布以网站站长及在校学生为主.
特征: 1: 会用dreamweaver/frontpage等工具制作网页.
2: 可以对现成PHP程序进行修改.
3: 爱好PHP.
技术要求: 无.
b: PHP 初学者 (PHP Beginner)
定义: 准备以PHP程序谋生,准备建设或正在维护一个或几个使用PHP技术实现的网站/程序的人是PHP 初学者 (PHP Beginner).
描述: 这些人已经或即将以PHP为主要谋生手段,他们的分布以即将毕业的大学生及刚刚加入PHP 程序员行列的人为主
特征: 1: 能够简单维护/操作/优化linux.
2: 能够编写PHP程序.
3: 会MySQL.
4: 会html/js.
5: 能够构建符合W3C标准的页面.
6: 能够胜任简单的服务器维护工作.
技术要求:
1: 服务器运行系统:
a: linux:
I: 能够安装Linux系统、熟练使用Linux常用命令、知道Vim文本编辑器,会软件包管理.
II: 能够实际操作用户管理、进程管理、文件系统管理、权限管理功能
III: 知道并会使用Linux网络配置相关文件、基本配置命令、DHCP、VNC、DNS服务器、Samba服务器. 能成功配置并使以下服务平稳运行.SSH、FTP、Apache,站点登录控制、日志管理.
IV: 能够使用shell对服务器进行维护.
V: 能够进行Linux系统安全配置、Iptables、syslog日志管理
b: windows:
仅为初学者和初级程序员要求.
I: 能够安装windows、熟练使用windows、能够对IIS进行优化.
II: 能够正确配置防火墙、对服务器进行管理维护.
III: 能够抵御普通的网络攻击.
2 web页面技术及相关:
其实这不应该算是PHP的技术.但实际工作中,大部分PHP初学者都需要兼前台/后台/网管的角色.故在此提出,仅供参考.
I: 熟练掌握HTML, Dreamweaver、常用标签、图象地图、表格、分桢框架、表单,Header处理,CSS, 样式表的分类、样
式则规器使用,常用的样式、层标签,JavaScript
II: 各种事件及事件处理程序的应用、window对象、document对象、location对象、body对象、form对象、form表单字段元素对象
III: ajax及其相关技术.能完成常见ajax页面制作
3 MySQL技术
I: 熟练掌握SQL语句.
II: 熟练掌握MySQL的常用操作.包括安全、访问控制和权限、备份和恢复,复制、导入和导出记录.
III: 熟练掌握 phpMyAdmin或任意一种MySQL管理维护工具.
4 PHP技术
I: 熟练掌握PHP语法,常用函数.
II: 熟悉PHP的面向对象编程.并能实际使用面向对象思想进行程序写作.
III: 熟悉PHP常用库.
c: PHP 初级程序员 (Primary PHP Coder)
定义: 正在以PHP程序谋生,正在建设或维护一个或几个使用PHP技术实现的网站/程序的人,PHP经验有限的人是PHP初级程序员.
描述: 这些人已经以PHP为主要谋生手段,他们的分布以刚刚加入PHP 程序员行列的人为主,也有部分加入PHP行列若干年的人.
特征: 1: 能够维护/操作/优化linux.
2: 熟练编写PHP程序.
3: 熟练掌握MySQL.
4: 会html/js.
5: 能够快速构建符合W3C标准的页面.
6: 能够胜任大部分服务器维护工作.
技术要求:
1: 服务器运行系统:
a: linux:
I: 熟练安装Linux系统、熟练使用Linux常用命令和某些日常使用的命令、掌握软件包管理.
II: 能够熟练操作用户管理、进程管理、文件系统管理、权限管理功能
III: 能够熟练使用Linux网络配置相关文件、基本配置命令、DHCP、VNC、DNS服务器、Samba服务器. 能快速的配置并使
以下服务平稳运行.SSH、FTP、Apache,站点登录控制、日志管理.
IV: 能够对MySQL和Apache进行一定的优化以提升网站性能.
V: 能够使用shell对服务器进行维护.熟练使用常用的维护工具.
VI: 能够进行Linux系统安全配置、Iptables、syslog日志管理
b: windows:
仅为初学者和初级程序员要求.
I: 能够安装windows、熟练使用windows、能够对IIS进行优化.
II: 能够正确配置防火墙、对服务器进行管理维护.
III: 能够抵御普通的网络攻击.
2 web页面技术及相关:
其实这不应该算是PHP的技术.但实际工作中,大部分初级PHP程序员在公司里都需要兼前台/后台/网管的角色.故在此提出,仅供参考.
I: 熟练掌握HTML, Dreamweaver、常用标签、图象地图、表格、分桢框架、表单,Header处理,CSS, 样式表的分类、样式则规器使用,常用的样式、层标签,JavaScript
II: 各种事件及事件处理程序的应用、window对象、document对象、location对象、body对象、form对象、form表单字段元素对象
III: ajax及其相关技术.能完成常见ajax页面制作.
IV: 会photoshop在内的一种或多种图片编辑软件
3 MySQL技术
I: 熟练掌握SQL语句.
II: 熟练掌握MySQL的操作.包括安全、访问控制和权限、备份和恢复,复制、导入和导出记录.
III: 熟练掌握 phpMyAdmin或任意一种MySQL管理维护工具.
IV: 知道MySQL常见性能瓶颈的原因及解决方法.并能实际解决.
4 PHP技术
I: 熟练掌握PHP语法,常用函数.
II: 熟悉PHP的面向对象编程.并能实际使用面向对象思想进行程序.
III: 熟悉php面向对象的特性.能够根据实际运行环境选择开发方法.
IV: 熟悉PHP常用库.能够使用常用的php库进行项目开发.
V: 拥有良好的编码格式习惯,可以规范的进行代码编写.
5 项目相关
I: 实际完成过PHP项目.或全程参与过php网站开发与建设.
II: 能够较为快速的进行项目开发.
d: PHP 中级程序员 (Junior PHP Coder)
定义: 正在以PHP程序谋生,正在建设或维护一个或几个使用PHP技术实现的网站/程序的人,有几年PHP经验但是尚未积累必要的代码库和快速开发工具的人是PHP 中级程序员 .
描述: 这些人已经以PHP为主要谋生手段,他们的分布以加入PHP 程序员行列5年内的人为主,也有部分加入PHP行列更多年的人.
特征:
1: 能熟练维护/操作/优化linux.
2: 快速编写结构清晰,代码格式优美的PHP程序.
3: 熟练掌握MySQL的操作和常用优化.
4: 熟悉程序性能的出现瓶颈的常见原因,并能在实际编写过程中避免出现性能瓶颈.
5: 能够使用某些框架/类库加速项目开发进度.
6: 能够胜任大部分服务器维护工作.
技术要求:
1: 服务器运行系统:
a: linux:
I: 熟悉操作一种版本linux,并能对此版本的linux进行一些调整优化
II: 能够进行不停机维护升级.
III: 能够熟练使用Linux命令行下操作.
IV: 能够对MySQL和Apache进行优化以提升网站性能.
V: 能够配置小型服务器集群(双服务器或三服务器).
VI: 能够进行Linux系统安全配置、Iptables、syslog日志管理
2 web页面技术及相关:
到中级程序员,一般公司都有专门的美工和前台程序员配合工作.故页面制作技术要求同初级程序员.
I: 熟悉常见的通信标准.可以根据手册编写出符合通信标准的程序.
3 MySQL技术
I: 熟练掌握SQL语句.
II: 熟练掌握MySQL的操作.包括安全、访问控制和权限、备份和恢复,复制、导入和导出记录.
III: 熟练掌握 phpMyAdmin或任意一种MySQL管理维护工具.
IV: 知道MySQL性能瓶颈的原因及解决方法.并能实际解决.
4 PHP技术
I: 熟练掌握PHP语法,常用函数.
II: 熟悉PHP的面向对象编程.并能实际使用面向对象思想进行程序.
III: 熟悉php面向对象的特性.能够根据实际运行环境选择开发方法.
IV: 熟悉PHP常用库.能够使用常用的php库进行项目开发.
V: 拥有良好的编码格式习惯,可以规范的进行代码编写.
5 项目相关
I: 实际完成过PHP项目.或全程参与过php网站开发与建设.
II: 能够较为快速的进行项目开发.
III: 有自己的代码库.可以在项目中进行复用
IV: 形成了良好的编码习惯,编写的程序代码清晰,注释清楚.
V: 能够对项目中的难点与新技术进行攻关.
e: PHP 高級程序员 (Senior PHP Coder)
定义: 正在以PHP程序为主要工作,建设过多个PHP项目,正在建设或维护一个或几个使用PHP技术实现的网站/程序的人,有多年PHP经验,有自己的代码库和快速开发工具的人是PHP 高级程序员.
描述: 这些人已经以PHP为主要谋生手段,他们的分布以加入PHP 程序员行列5年以上的人为主.高级程序员是PHP项目的核心力量.
特征:
1: 能熟练维护/操作/优化linux.
2: 快速编写结构清晰,代码格式优美的PHP程序.
3: 熟练掌握MySQL的操作/优化和多数据库.
4: 能够快速查出程序性能的出现瓶颈的原因,并能根据实际情况进行调整.
5: 能够使用框架/类库加速项目开发进度.
6: 有自己的代码库.
7: 能够胜任大部分服务器维护工作.
技术要求:
1: 服务器运行系统:
a: linux:
I: 熟悉操作一种版本linux,并能对此版本的linux进行一些调整优化
II: 能够进行不停机维护升级.
III: 能够熟练使用Linux命令行下操作.
IV: 能够对MySQL和Apache进行优化以提升网站性能.
V: 能够配置和优化服务器集群.
VI: 能够进行Linux系统安全配置、Iptables、syslog日志管理
2 MySQL技术
I: 精通SQL语句.
II: 熟练掌握MySQL的操作.
III: 熟练掌握 phpMyAdmin或任意一种MySQL管理维护工具.
IV: 能够根据实际运行情况对数据库瓶颈进行调整,并适时改变开发方法.
4 PHP技术
I: 精通PHP语法,常用函数.并有自己专注的方向.
II: 熟练使用PHP的面向对象编程.并能实际使用面向对象思想进行程序.
III: 熟悉php面向对象的特性.能够根据实际运行环境选择开发方法.
IV: 实际使用工厂化开发等开发方法进行项目开发.能够使用PHP的特性提升开发速度和程序运行速度.
V: 有自己的代码库,有自己熟悉兵精通的某些共用类库.
VI: 拥有良好的编码格式习惯,可以规范的进行代码编写.
5 项目相关
I: 实际完成过多个不同方面的PHP项目.
II: 能够快速的进行项目开发.
III: 有自己的代码库.可以在项目中使用代码库进行快速开发.
IV: 形成了良好的编码习惯,编写的程序代码清晰,注释清楚.
V: 能够领导程序员对项目中的难点与新技术进行攻关.
VI: 熟悉软件工程,能够根据实际情况选用适当的开发模式.
f: 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 关于英文. 这个是废话.最低要求是流畅阅读英文文档.
其他:
鸣谢: 国内某培训机构的资料.我引用里你们的3月速成PHP工程师的标准作为PHP初学者的标准.谢谢.因为我也没稿费得.所以就不给你们稿费了.
版权: 老习惯 ,共创协议,非商业性/姓名标示/禁止修改. 谢谢
一家之言,欢迎大家讨论.本文废话颇多.寒一个. 我的联系方式 : jstel && 126.com (&&换成 @) .Arain 收 qq: 155313 7 24. 有任何不同意见可以来信讨论.
感谢 : 姜运涛 指出文中若干错误.
用PHP输出静态页面的两种方法
用PHP输出静态页面的方法,就我所知道的,有2种,一种是利用模板技术,另一种是用ob系列函数。两种方法,看起来都差不多,但是实际上,却是不同的。
第一种:利用模板。目前PHP的模板可以说是很多了,有功能强大的smarty,还有简单易用的smarttemplate等。它们每一种模板,都有一个获取输出内容的函数。我们生成静态页面的方法,就是利用了这个函数。用这个方法的优点是,代码比较清晰,可读性好。
这里我用smarty做例子,说明如何生成静态页
<?php
require('smarty/Smarty.class.php');
$t = new Smarty;
$t->assign("title","Hello World!");
$content = $t->fetch("templates/index.htm");
//这里的 fetch() 就是获取输出内容的函数,现在$content变量里面,就是要显示的内容了
$fp = fopen("archives/2005/05/19/0001.Html", "w");
fwrite($fp, $content);
fclose($fp);
?>
第二种方法:利用ob系列的函数。这里用到的函数主要是 ob_start(), ob_end_flush(), ob_get_content(),其中ob_start()是打开浏览器缓冲区的意思,打开缓冲后,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区,直到你使用了ob_end_flush().而这里最重要的一个函数,就是ob_get_contents(),这个函数的作用是获取缓冲区的内容,相当于上面的那个fetch(),道理一样的。代码:
<?php
ob_start();
echo "Hello World!";
$content = ob_get_contents();//取得php页面输出的全部内容
$fp = fopen("archives/2005/05/19/0001.html", "w");
fwrite($fp, $content);
fclose($fp);
?>













