50个提高PHP程序运行效率的方法

0、用单引号代替双引号来包含字符串,这样做会更快一些。因为 PHP 会在双引号包围的 字符串中搜寻变量,单引号则不会,注意:只有 echo 能这么做,它是一种可以把多个字符 串当作参数的“函数”(译注:PHP 手册中说 echo 是语言结构,不是真正的函数,故把函数 加上了双引号)。
1、如果能将类的方法定义成 static,就尽量定义成 static,它的速度会提升将近 4 倍。 2、$row[’id’] 的速度是$row[id]的 7 倍。
3、echo 比 print 快,并且使用 echo 的多重参数(译注:指用逗号而不是句点)代替字符串 连接,比如 echo $str1,$str2。
4、在执行 for 循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用 foreach 代替。 5、注销那些不用的变量尤其是大数组,以便释放内存。
6、尽量避免使用__get,__set,__autoload。
7、require_once()代价昂贵。
8、include 文件时尽量使用绝对路径,因为它避免了 PHP 去 include_path 里查找文件的速 度,解析操作系统路径所需的时间会更少。
9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用 $_SERVER[‘REQUEST_TIME’] 要好于 time()
10、函数代替正则表达式完成相同功能。
11、str_replace 函数比 preg_replace 函数快,但 strtr 函数的效率是 str_replace 函数的四 倍。 12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么 可以考虑额外写一段替换代码, 使得每次传递参数是一个字符, 而不是只写一行代码接受数 组作为查询和替换的参数。
13、使用选择分支语句(译注:即 switch case)好于使用多个 if,else if 语句。
14、用@屏蔽错误消息的做法非常低效,极其低效。
15、打开 apache 的 mod_deflate 模块,可以提高网页的浏览速度。
16、数据库连接当使用完毕时应关掉,不要用长连接。
17、错误消息代价昂贵。
18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。
19、递增一个全局变量要比递增一个局部变量慢 2 倍。
20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢 3 倍。
21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢 9 至 10 倍。
22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局 部变量)。PHP 大概会检查看是否存在全局变量。
23、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了 10 个方法,但性能上没有变化。
24、派生类中的方法运行起来要快于在基类中定义的同样的方法。
25、调用带有一个参数的空函数,其花费的时间相当于执行 7 至 8 次的局部变量递增操作。 类似的方法调用所花费的时间接近于 15 次的局部变量递增操作。
26、Apache 解析一个 PHP 脚本的时间要比解析一个静态 HTML 页面慢 2 至 10 倍。尽量 多用静态 HTML 页面,少用脚本。
27、除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套 PHP 缓存机制通常 可以提升 25%至 100%的性能,以免除编译开销。
28、尽量做缓存,可使用 memcached。memcached 是一款高性能的内存对象缓存系统, 可用来加速动态 Web 应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使 得脚本不必为每个请求做重新编译。
29、 当操作字符串并需要检验其长度是否满足某种要求时, 你想当然地会使用 strlen()函数。 此函数执行起来相当快,因为它不做任何计算,只返回在 zval 结构(C 的内置数据结构,用 于存储 PHP 变量)中存储的已知字符串长度。但是,由于 strlen()是函数,多多少少会有些 慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP 不区分函 数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用 isset() 技巧加速执行你的代码。 (举例如下) if (strlen($foo) < 5) { echo “Foo is too short”$$ } (与下面的技巧做比较) if (!isset($foo{5})) { echo “Foo is too short”$$ } 调用 isset()恰巧比 strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它 的执行不需要函数查找和字母小写化。 也就是说, 实际上在检验字符串长度的顶层代码中你 没有花太多开销。
30、当执行变量$i 的递增或递减时,$i++会比++$i 慢一些。这种差异是 PHP 特有的,并不 适用于其他语言, 所以请不要修改你的 C 或 Java 代码并指望它们能立即变快, 没用的。 ++$i 更快是因为它只需要 3 条指令(opcodes),$i++则需要 4 条指令。后置递增实际上会产生一 个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的 一种,正如 Zend 的 PHP 优化器所作的那样。牢记这个优化处理不失为一个好主意,因为 并不是所有的指令优化器都会做同样的优化处理, 并且存在大量没有装配指令优化器的互联 网服务提供商(ISPs)和服务器。 31、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很 多内存。
32、并非要用类实现所有的数据结构,数组也很有用。
33、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?
34、当你需要时,你总能把代码分解成方法。
35、尽量采用大量的 PHP 内置函数。
36、如果在代码中存在大量耗时的函数,你可以考虑用 C 扩展的方式实现它们。
37、 评估检验(profile)你的代码。 检验器会告诉你, 代码的哪些部分消耗了多少时间。 Xdebug 调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。
38、mod_zip 可作为 Apache 模块,用来即时压缩你的数据,并可让数据传输量降低 80%。
39、在可以用 file_get_contents 替代 file、fopen、feof、fgets 等系列方法的情况下,尽量 用 file_get_contents,因为他的效率高得多!但是要注意 file_get_contents 在打开一个 URL 文件时候的 PHP 版本问题;
40、尽量的少进行文件操作,虽然 PHP 的文件操作效率也不低的;
41、优化 Select SQL 语句,在可能的情况下尽量少的进行 Insert、Update 操作(在 update 上,我被恶批过);
42、尽可能的使用 PHP 内部函数(但是我却为了找个 PHP 里面不存在的函数,浪费了本可 以写出一个自定义函数的时间,经验问题啊!);
43、 循环内部不要声明变量, 尤其是大变量: 对象(这好像不只是 PHP 里面要注意的问题吧?); 44、多维数组尽量不要循环嵌套赋值;
45、在可以用 PHP 内部字符串操作函数的情况下,不要用正则表达式;
46、foreach 效率更高,尽量用 foreach 代替 while 和 for 循环;
47、用单引号替代双引号引用字符串;
48、“用 i+=1 代替 i=i+1。符合 c/c++的习惯,效率还高”
49、对 global 变量,应该用完就 unset()掉;

每个Web开发者必备的9个软技能

 

对于一份工作,你可能专注于修炼自己的内功,会在不自觉中忽视软技能。硬技能决定你是否能得到工作,而软技能能够表明你是否适合这份工作和适应工作环境等。所有的公司都有属于自己的文化,并努力将这些文化传承下去,所以他们必须确保每一位新员工能够适应这个环境。

许多硬技能很容易获得并可很快的提高,而软技能由于和你性格等联系紧密,可想要改变他们是一件很困难和缓慢的事情。这里有七个核心的软技能,适用于大多数的企业,它们不分行业,但作为Web开发者不应该忽视其中的任何一个。但是,有两个软技能不仅有利于Web开发者,还适用于所有的开发者,那就是往往被企业和员工忽视的:批判性思维和自负管理。

1. 交流

现代科技发展得很快,移动通信的发达,你必须确保自己能够熟练运用这些。

  • 电话或手机
  • 电子邮件
  • 在线聊天
  • 社交
  • 各种即时消息应用

而这些也只是简单的工作,你真正需要做到的是必须提高沟通技巧。作为一名Web开发者更需要自信和有效地进行相关的远程交流,对象包括:上司、同事、用户和其它开发者。

与用户沟通是一件非常困难的事情,因为你不得不向非技术人员解释技术性很强的概念。你在平时与同事交流中可以习惯性的使用一些行业术语,但不要指望用户能够理解这些术语。

另外,沟通的关键是要把握好细节,俗话说:“伟大的产品微末。”那么,你与人沟通时会使用正式的还是轻松的言语呢?不同人之间都有很大的差异。也许最关键的是,你得知道如何接受他们的批评并在批评中学习。

2. 倾听

倾听和交流是紧密相连的,但对于Web开发者需要单独拿出来讨论。

通常你会被很多杂事包围,谁也逃避不了。若是你有电话过来,请打开手机的扬声器,然后继续回到屏幕做你该做的事情,你只需要听对方说的什么,并甄选出极其重要的信息即可。如果有不明白的地方,直接说出来。例如,对于一些代码的修改或者功能的讨论,用扬声器是一个非常好的方式。

3. 适应能力

适应能力是Web开发者的一个重要技能,作为一名Web开发者,你应该学会适应各种不同的环境,看看互联网在近八年的惊人变化你就应该知道是为什么了。你至少需要适应以下几种情况:

  • 不得不学习新的技能
  • 不得不承担额外的责任
  • 你负责的项目会被突然取消
  • 工作时间会有很大的变化
  • 办公室的变化或公司搬迁到新的城市
  • 公司被合并或被收购

随着社会的发展,行业的竞争,你可能会同时面临好几个上述的问题,如果你出生在1980年~2000年,更需要以一个开放、积极去的心态来处理各种艰难的困境。

4. 合作

你永远不可能一个人完成繁杂的事情,你必须要有一个团队,而谁也不愿意不被团队成员所接纳。你需要关心每一位同事,了解他们的优缺点,有则改之无则加勉。同时,你若是遇到一个很难找到和解决的Bug,你至少可以明确地知道求助谁。如果你突然成为一个新项目组的Leader,需要按照每一个团队成员的具体情况进行有效地分配任务。

5. 态度

前面讨论了团队合作的重要性,如果没人愿意花时间和你一起愉快的玩耍,说明你真的不擅长团队合作。可以通过以下几个方法来提升这个技能:

  • 主动问候对方
  • 少抱怨
  • 提供建议,而不仅是批评
  • 不要偏激

有一个积极的态度不仅可以让你更轻松的面对挑战,也会让你的同事更乐于帮助你。

6. 职业道德

你是一个非常有原则的人吗?你是一个诚实和真诚的人吗?你是一个有道德的人吗?具备良好的职业道德,关乎着你的诚信。

你需要保持自己不被卷入企业之间的间谍活动或内幕交易,以及不要经常抱怨领导和同事、表现出负面情绪,这只能凸显出你的不诚信。如果你能够做到这些,那么你一定会被公司永远地评为“本月最佳员工”。

7. 判断/辨别

这是一个概念性的总称,包含了技术到常识的决策能力。对于上级和同事采取什么样的态度呢?在和外界沟通时,你得知道可以谈的内容尺度,什么是机密、什么是个人隐私等。具备一个良好的判断力,能够为你的职业生涯保驾护航。例如,你在发布Facebook或Twitter时需要有分寸。

8. 批判性思维

批判性思维有很多学术定义,这里只来探讨应用到工作中方法。

问题:我经常上班迟到怎么办?最简单的解决方案就是:早点去公司。

如果针对这个问题进行批判性思维,涉及到评估和分析。你需要寻找所有上班迟到可能的原因,然后评估和分析出每个原因的解决方案,每个解决方案可能会导致新的问题,需要接着进行综合的分析,最后再总结出能得到一个积极结果的方案。

作为一名Web开发者,你有时候会面临一个问题的多个解决途径,都能实现相同效果,批判性思维可以让你快速、有效地分析出最优的方法。

9. 自负管理

自负会对你的职业发展带来不可预知的积极或消极的影响。作为一名Web开发者,不管你写的代码多么出色,你也不是神、明星,充其量只能算是一个D-list 上的一员。如果你不知道如何管理自负,不妨看下以下几个方法:

  • 向他人学习。总有值得你学习人,并积极接受别人的建议。
  • 愿意分享和教别人。不要以居高临下的姿态,学会谦和地分享自己的心得和体会。
  • 提供具有建设性的批评意见而非单纯的批评。最好别说:你的代码很吓人、有点烂,而应该说:如果你这样做,你的代码会更好。建设性的批评目的是帮助别人,而不是体现出你多么的伟大。

你在团队里是为了和他人合作并一同进步,而不鼓励孤立自己或试图掌控团队。
原文地址: http://www.php100.com/html/it/focus/2014/0402/6740.html

Thinkphp实现站点静态化的方法

thinkphp提供了一个有效的生成静态页的方法,(在tp2.0的手册上有说明,3.0的手册上没有说明了,不过3.0方法还是存在的。)
$this->buildHtml('静态文件', '静态路径','模板文件');
稍微说明下参数,有些朋友问我这个参数和具体如何使用。
参数一:静态文件,是指生成后的静态文件名,文件保存路径完整的就是:静态路径/静态文件。例如静态文件设置a/index.那么保存的路径就是项
目路径/Html/a/index.html(默认的静态路径在项目路径的Html文件夹下,没有可以自己创建)
参数二:静态路径,上面已经说明了默认的路径,3.0中可以在入口文件里加入参数来更改静态路径。
define(‘HTML_PATH’, ‘./’);(将静态路径义为网站根目录)
参数三:模板文件,我感觉官方这个描述是不正确的,准确的来说应该是目标模块,就是需要生成静态文件的模块。格式:模块名:操作。比如要生成Index下的a方法为静态文件,那就是Index:a。如果为空则默认生成当前操作的静态文件。
例子:
class IndexAction extends Action {
    public function index(){
        $this->buildHtml("index",'',"");
        $this -> display();
    }
}
其实
$this->buildHtml("index",'',"");
$this->buildHtml("index",'',"Index:index");
$this->buildHtml("index",'',"index");
这样三个格式等效的
下面是静态化的实现,就两种方法
可以在当前模块下加如上述语句,那么只要运行该模块就会产生指定的目录下的”模块.html”文件,通常的做法就是站点建设好以后,专门写一个方法,然后让其执行,使整个站点一次性生成静态文件,注意:如果站点有编辑或调整那么必须清理缓存一次,就是项目下的Runtime文件夹必须清空

MySQL动态添删改列字段

动态增加列字段
alter table TableName drop column field_id;

动态删除列字段
alert TABLE table_name change old_field_name new_field_name field_type;

动态修改列字段
alert TABLE table_name change old_field_name new_field_name field_type;

thinkphp模板中对时间戳的转换

在thinkphp中前台静态html文件需要解析一个时间戳。则需要转换成时间段。

{$vo.create_time|date=’Y-m-d H:i:s’,###}

这样就可以把一个时间戳转换成我们熟悉的时间段了。

OpenERP 7.0 打印PDF报表 中文 乱码问题的解决方案

内容提要:OpenERP 7.0 打印PDF报表 中文 乱码问题的解决方案

网上的解决方案基本上以替换字体和安装上海先锋科技开发的软件包配置两种方案,替换字体的方案尝试了几次都么有成功,安装软件包的方案成功。

软件环境:Windows 7

第一步:先到http://apps.openerp.com/addon/get_module_as_zip/6647/oecn_base_fonts.zip这里下载oecn_base_fonts这个软件包。
第二步:…./openerp/addons文件夹下,最后形成的目录一定是这样的:…/openerp/addons/oecn_base_fonts

第三步:采用管理员账号登陆OPENERP系统,将Administrator用户的权限中的技术特性勾选。

第四步:在设置里面,点击更新模块列表。

第五步:更新完成过后,在可安装的模块中筛选“oecn”即可找到该模块,选择安装即可。

第六步:重新启动OPENERP服务

软件环境:Ubuntu Server 12.04

第一步:先到http://apps.openerp.com/addon/get_module_as_zip/6647/oecn_base_fonts.zip这里下载oecn_base_fonts这个软件包。

第二步:解压放到/usr/lib/pymodules/python2.7/openerp/addons文件夹下,最后形成的目录一定是这样的:/usr/lib/pymodules/python2.7/openerp/addons/oecn_base_fonts

第三步:采用管理员账号登陆OPENERP系统,将Administrator用户的权限中的技术特性勾选。

第四步:在设置里面,点击更新模块列表。

第五步:更新完成过后,在可安装的模块中筛选“oecn”即可找到该模块,选择安装即可。

第六步:重新启动OPENERP服务

PHPnow-1.5.4使用教程(图文) 转载

搭建 PHP 其实不很难,只是有点繁琐。要是自己搭建一次 PHP + MySQL 环境很是费时。更糟的是,很多新手在配置 PHP 时常常出现这样那样的问题。诸如 mysql 扩展、zend 安装失败等等问题。这时,我们需要一个快速、标准且专业的 PHP 套件包。PHPnow 就这样应运而生,为你快速搭建专业的虚拟主机。
与 PHPnow 的名字一样,让我们一起 PHPNow!
首先下载 最新版 PHPnow。PHPnow 有两种封装,一是 exe 自解压版(推荐,本文针对此版Setup),二是纯 7z 档案(没有 exe 自解压)。
将整个PHPnow-1.5.4包解压,随便放在一个目录下,本人放在  F:\ 下
进入解压包 执行Setup.exe 出现下图所示。版本可随便选择
PHPnow-1.5.4使用教程(图文) - The Wind - I AM THE WIND

 

PHPnow-1.5.4使用教程(图文) - The Wind - I AM THE WIND

图-1:解压对话框

在自动解压完毕后,请选择 Init.cmd 进行初始化动作 输入y

如 图-2 示:
期间可能出现防火墙提示,请允许。

PHPnow-1.5.4使用教程(图文) - The Wind - I AM THE WIND

此时请设定数据库的管理员用户名和密码

图-2:Init.cmd 过程

PHPnow-1.5.4使用教程(图文) - The Wind - I AM THE WIND

图-3:解除防火墙

Init.cmd 十秒钟即可完成。全部完成后,将自动打开默认页。
(如果没有,试试手动打开 http://127.0.0.1)

PHPnow-1.5.4使用教程(图文) - The Wind - I AM THE WIND

图-4:搭建成功

多站点搭建

 

如果你只想搭建一个网站,上面的环境已经足够。很都时候我们需要开设多个独立的网站并且每个站点都在单独的相应的根目录。例如论坛和主页分开、和朋友共享服务器等等。这时就要用到 虚拟主机 了。

 

下面说说 PHPnow 虚拟主机的使用。很简单。

 

首先要建立虚拟机

 

双击执行F:\PHPnow-1.5.4\PnCp.cmd (可能你的安装路径不同),输入 0 (添加虚拟主机)后回车。

PHPnow-1.5.4使用教程(图文) - The Wind - I AM THE WIND

按照提示输入新建虚拟主机信息。如 图-5 所示

注释:主机名 以127.0.0.100  网站目录:htdocs2

PHPnow-1.5.4使用教程(图文) - The Wind - I AM THE WIND

图-5:开设虚拟主机

输入完信息回车后,将自动重启 Apache 以便生效。此时你会发现在htdocs目录旁多了一个htdocs2目录
然后访问刚才添加的域名或者(本机)127.0.0.100,注意事先解析好域名指向你的服务器 IP,便可成功!

如果没有域名或者不会用,可以通过编辑 C:\WINDOWS\system32\drivers\etc\hosts 来使用“虚拟域名”。
本例中的 bbs.test.com 就是在 “127.0.0.1 localhost” 的下一行添加一行 “127.0.0.100 bbs.test.com” 实现的。

很多朋友也许会遇到这种情况:

有多个网站, 现在每次都要把另一个站点的程序拷到根目录下才能访问. 有没有办法可以建立多个目录,并用不同端口代表不同站点进行指向, 比如127.0.0.1访问的是A站点, 127.0.0.2访问B站点, A和B两站点位于不同目录

上面这种情况可通过phpnow的增加虚拟主机得到实现

 

PHPnow-1.5.4使用教程(图文) - The Wind - I AM THE WIND

图-6:虚拟主机开设成功

可能你还需要为每个虚拟主机分配 MySQL 数据库,下面介绍下如何使用 phpmyadmin 分配用户和数据库。

打开 http://127.1/phpMyAdmin;用 root 登陆。
然后点击 “权限”再点击 “添加新用户”。
填写好新的 用户名 和 密码;
选择第二项 “Create database with same name and grant all privileges”。
其他的保持默认;需要提的是,全局权限可不要选,除非必要,否则全不选。
点击 [执行] 即可完成。难明白就看看图吧。

PHPnow-1.5.4使用教程(图文) - The Wind - I AM THE WIND

图-7:添加数据库用户。

把刚才添加的用户名和密码交给用户即可。注意 root 拥有最高权限,不要轻易把密码交给别人。

好了!你现在拥有了一个专业的 PHP 服务器环境。什么 Discuz! 6.0、PHPWind、DeDe、PHPCms 全不是问题,马上开始你的建站旅程。http://fp1588.blog.163.com/blog/static/102495022011822105929807/