多数大学生出来选择的工作和专业无关
首页 > 专业知识

PHP执行速率优化技巧小结

时间:2018-05-21 18:10:20 [来源]:郑州PHP培训学校

   PHP执行速率优化技巧小结

  1.在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;2.尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;3.优化SELECT SQL语句,在可能的情况下尽量少的进行INSERT、UPDATE操作(在UPDATE上,我被恶批过);4.尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);5.循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);6.多维数组尽量不要循环嵌套赋值;7.在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;8.foreach效率更高,尽量用foreach代替while和for循环;9.用单引号替代双引号引用字符串;10.用i+=1代替i=i+1。符合c/c++的习惯,效率还高;11.对global变量,应该用完就unset()掉;静态调用的成员一定要定义成static (PHP5 ONLY)Tips: PHP5引入了静态成员的概念,作用和PHP4的函数内部静态变量一致,但前者是作为类的成员来使用。静态变量和Ruby的类变量(class variable)差不多,所有类的实例共享同一个静态变量。静态地调用非static 成员,效率会比静态地调用 static 成员慢 50-60%。主要是因为前者会产生 E_STRICT 警告,内部也需要做转换。
  <?php
  class foo {
  function bar() {
  echo 'foobar';
  }
  }
  $foo = new foo;
  // instance way
  $foo->bar();
  // static way
  foo::bar();
  ?>
  使用类常量(PHP5 ONLY)
  Tips: PHP5新功能,类似于C++的const。
  使用类常量的好处是:
  - 编译时解析,没有额外开销
  - 杂凑表更小,所以内部查找更快
  - 类常量仅存在于特定「命名空间」,所以杂凑名更短- 代码更干净,使除错更方便(暂时)不要使用 require/include_oncerequire/include_once 每次被调用的时候都会打开目标文件!
  - 如果用绝对路径的话,PHP 5.2/6.0 不存在这个问题- 新版的 APC 缓存系统已经解决这个问题文件 I/O 增加 => 效率降低如果需要,可以自行检查文件是否已被 require/include。
  php 常用字符串函数总结
  1.格式化输出
  chop 是rtrim()的别名;
  ltrim()
  trim()
  nl2br()将\n转换成<br>
  print,echo,printf(),sprintf():
  echo()不是函数,print()是函数,有返回值,boolen,false,true;printf()格式化输出--函数,把文字格式化以后输出,直接调用系统调用进行IO的,他是非缓冲的。如:
  $name="hunte";
  $age=25;
  printf("my name is %s, age %d", $name, $age);sprintf()格式化字符串,然后赋给一个变量,但是不输出,类似于c了<?phpecho nl2br("foo isn't\n bar");
  echo "foo isn't\n bar";
  ?>
  --跟printf相似,但不打印,而是返回格式化后的文字,其他的与printf一样。如:
  char sql[256];
  sprintf(sql,"select * from table where no = '%s'",bankno);它的功能只是把""里面的语句赋给了变量sql。
  strtolower
  strtoupper
  ucwords
  ucfirst
  2.字符串的连接和分割
  (1)array explode(string input ,string separator , int limit)使用一个字符串分割另一个字符串<?php
  // 示例 1
  $pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";$pieces = explode(" ", $pizza);echo $pieces[0]; // piece1
  echo $pieces[1]; // piece2
  // 示例 2
  $data = "foo:*:1023:1000::/home/foo:/bin/sh";list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);echo $user; // fooecho $pass; // *
  ?>
  例子 2. limit 参数示例
  <?php
  $str = 'one|two|three|four';
  // 正数的 limit
  print_r(explode('|', $str, 2));
  // 负数的 limit
  print_r(explode('|', $str, -1));
  ?>
  string strtok( string input ,string separator)<?php$string = "This is\tan example\nstring";
  /* Use tab and newline as tokenizing characters as well          */$tok = strtok($string, " \n\t");//拿着空格,\n,\t作为令牌分割字符串
  while ($tok !== false) {
  echo "Word=$tok<br />";
  $tok = strtok(" \n\t");
  }
  ?>
  结果:
  Word=This
  Word=is
  Word=an
  Word=example
  Word=string
 
  php下使用SMTP发邮件的代码
  最近一个项目需要用到SMTP发送邮件,之前的库类不存在了,又不喜欢安装pear或者使用pear的net/smtp类,感觉太复杂了。就直接从discuz中抽取出核心稍微修改了下。
  从协议分析网上,查找到SMTP协议的命令和应答,SMTP协议在发送SMTP和接收SMTP之间的会话是靠发送SMTP的SMTP命令和接收SMTP反馈的应答来完成的。常用的命令如下:
  HELLO<domain><CRLF>识别发送方到接收SMTP的一个HELLO命令MAIL FROM:<reverse-path><CRLF><reverse-path>为发送者地址。此命令告诉接收方一个新邮件发送的开始,并对所有的状态和缓冲区进行初始化。此命令开始一个邮件传输处理,最终完成将邮件数据传送到一个或多个邮箱中。
  RCPT TO:<forward-path><CRLF><forward-path>标识各个邮件接收者的地址DATA<CRLF>
  接收SMTP将把其后的行为看作邮件数据去处理,以<CRLF>.<CRLF>标识数据的结尾。
  REST<CRLF>退出/复位当前的邮件传输
  NOOP<CRLF>要求接收SMTP仅做OK应答。(用于测试)QUIT<CRLF>要求接收SMTP返回一个OK应答并关闭传输。
  VRFY<string><CRLF>验证指定的邮箱是否存在,由于安全因素,服务器多禁止此命令。
  EXPN<string><CRLF>验证给定的邮箱列表是否存在,扩充邮箱列表,也常禁止使用。
  HELP<CRLF>查询服务器支持什么命令
  注:<CRLF>为回车、换行,ASCII码分别为13、10(十进制)。
  另外,可以在command下,使用telnet来进行简单的手工使用SMTP。
  比如:
  telnet smtp.263.net 25
  Trying 211.150.96.25...
  Connected to smtp.263.net.
  Escape character is '^]'.
  220 Welcome to coremail System(With Anti-Spam) 2.1 for 263(040326)HELO weiqiong@cctk.net
  250 smtp.263.net
  mail from:weiqiong@cctk.net
  250 Ok
  rcpt to:g2_t1@263.net
  250 Ok
  data
  354 End data with <CR><LF>.<CR><LF>
  haha
  .
  250 Ok: queued as B9E452FF3E
  quit
  221 Bye
  Connection closed by foreign host.
 

上一篇:PHP实现文件上传的思路及实例

下一篇:如何判定PHP运算符优先级别