月度归档:2011年07月

Extjs错误:uncaught exception: No center region defined in BorderLayout …

 1 使用Border布局的容器必须 有一个子件在’中心’区域(region:’center’)。中心区域的子件将会自动改变尺寸来填充Border布局中没有被使用的其他区域的空间。 (如果不指定会报uncaught exception: No center region defined in BorderLayout XXX 异常) 

  2 任何west或east区域的子件都必须定义宽度(一个整数代表该区域占用的像素)(如果不指定布局不起作用,并且还会报col is null 的错) 

  3 任何north或south区域的子件都必须定义高度 

  4 Border布局的所有区域在被渲染时以及此之后就固定了,其子组件可能无法删除或添加。 

  5 要添加/删除Border布局内的组件,它们必须是被一个额外的由Border布局直接管理的容器所封装。如果该区域是可收起的(collapsible:true),Border布局管理器直接使用的容器应该是一个Panel。

批量删除指定目录

 各路仙人各显神通:

直接通过Windows右键解决之

用DOS命令For来做处理。

建立一个.reg文件,然后写入下面内容。

DOS代码
  1. Windows Registry Editor Version 5.00  
  2. [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]  
  3. @="Delete SVN Folders"  
  4. [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]  
  5. @="cmd.exe /c \"TITLE Removing SVN Folders in %1 && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" \""  

运行这个reg文件后,要处理的文件夹下点击右键,选择Delete SVN Folders就可以了。

Java版本

Java代码
  1. // 我也来一段java的删除指定目录下的指定文件或目录,其中部分代码为网上剽窃,原作者不知在哪了。。。。  
  2. // 传参:1.目录,2.要删除的文件夹名、文件名、文件后缀   
  3. public class DelFile {  
  4.   
  5.     public static void main(String[] args) {  
  6.         scanAllFile(new File("E:/工作目录/版本基线/保监会对接系统/bjhsrv/src/com"), ".svn");  
  7.         System.out.println("delete success!");  
  8.     }  
  9.   
  10.     /** 
  11.      * @author xulu 
  12.      * @function 扫描待删除的目录或文件 
  13.      * @root 待扫描的根目录 
  14.      * @suffix 待删除的目录或文件(扩展名匹配) 
  15.      */  
  16.     public static void scanAllFile(File root, String… suffix) {  
  17.         for (File file : root.listFiles()) {  
  18.             if (isMatch(file.getName(), suffix)) {  
  19.                 delAllFile(file);  
  20.             } else if (file.isDirectory()) {  
  21.                 scanAllFile(file, suffix);  
  22.             }  
  23.         }  
  24.     }  
  25.   
  26.     // 判断是否为待删除的目录或文件  
  27.     public static boolean isMatch(String name, String… suffix) {  
  28.         for (String s : suffix) {  
  29.             if (name.endsWith(s)) {  
  30.                 return true;  
  31.             }  
  32.         }  
  33.         return false;  
  34.     }  
  35.   
  36.     // 删除指定的目录或文件  
  37.     public static void delAllFile(File file) {  
  38.         if (file.isDirectory()) {  
  39.             for (File f : file.listFiles()) {  
  40.                 if (!f.delete()) {  
  41.                     delAllFile(f);  
  42.                 }  
  43.             }  
  44.         }  
  45.         file.delete();  
  46.         System.out.println("delete : " + file.getAbsolutePath());  
  47.     }  
  48. }  

删除一个Java目录,最简单的方法就是用 commons-io 包,

代码:FileUtils.forceDelete("D:\\test");

Java代码
  1. public static void delete(File path, final String pattern) throws IOException {  
  2.     path.listFiles(new FileFilter(){  
  3.         @Override  
  4.         public boolean accept(File pathname) {  
  5.             try {  
  6.                 if(pathname.getName().equalsIgnoreCase(pattern)){  
  7.                         FileUtils.forceDelete(pathname);  
  8.                 }  
  9.                 else if(pathname.isDirectory())  
  10.                     delete(pathname, pattern);  
  11.             } catch (IOException e) {}  
  12.             return true;  
  13.         }  
  14.     });       
  15. }  

VB版,带界面哦,赞一个!

ASP/Visual Basic代码
  1. VERSION 5.00  
  2.   
  3. Begin VB.Form DELSVNFILE   
  4.   
  5.     Caption         =   "Form1"  
  6.     ClientHeight    =   3090  
  7.     ClientLeft      =   60  
  8.     ClientTop       =   450  
  9.     ClientWidth     =   4680  
  10.     LinkTopic       =   "Form1"  
  11.     ScaleHeight     =   3090  
  12.     ScaleWidth      =   4680  
  13.     StartUpPosition =   3  ‘Windows Default  
  14.   
  15.     Begin VB.TextBox TxtPath   
  16.         Height          =   615  
  17.         Left            =   720  
  18.         TabIndex        =   1  
  19.         Text            =   "Path"  
  20.         Top             =   720  
  21.         Width           =   2655  
  22.     End  
  23.   
  24.     Begin VB.CommandButton DelFile   
  25.         Caption         =   "删除"  
  26.         Height          =   615  
  27.         Left            =   720  
  28.         TabIndex        =   0  
  29.         Top             =   1680  
  30.         Width           =   2655  
  31.     End  
  32.   
  33. End  
  34.   
  35. Attribute VB_Name = "DELSVNFILE"  
  36. Attribute VB_GlobalNameSpace = False  
  37. Attribute VB_Creatable = False  
  38. Attribute VB_PredeclaredId = True  
  39. Attribute VB_Exposed = False  
  40.   
  41. Private fs As Object  
  42.   
  43. Private Sub DelFile_Click()  
  44.   
  45. On Error GoTo err  
  46.   
  47.     Dim sPath As String  
  48.   
  49.     If Len(TxtPath.Text) = 0 Then  
  50.         MsgBox "请输入路径"  
  51.         Exit Sub  
  52.     Else  
  53.         sPath = TxtPath.Text  
  54.     End If  
  55.   
  56.     Set fs = CreateObject("Scripting.FileSystemObject")  
  57.   
  58.     Dim fol As Object  
  59.   
  60.     Set fol = fs.GetFolder(sPath)  
  61.   
  62.     DelSVN fol  
  63.   
  64.     If fs.FolderExists(sPath & "\ .svn"Then  
  65.         tmp.DeleteFolder sPath & "\ .svn"True  
  66.     End If  
  67.   
  68.     MsgBox "删除完成"  
  69.   
  70.     Exit Sub  
  71.   
  72. err:  
  73.   
  74.     MsgBox "删除文件错误,检查路径是否准确"  
  75. End Sub  
  76.   
  77. Private Sub DelSVN(ByVal fol As Object)  
  78.     For Each SubFol In fol.SubFolders  
  79.         If SubFol.Name = ".svn" Then  
  80.             fs.DeleteFolder SubFol.Path, True  
  81.         Else  
  82.             DelSVN SubFol  
  83.         End If  
  84.     Next  
  85. End Sub  

Shell + Bash脚本指令,Linux常用

代码
  1. # 此为随手抒情版,有一定风险,用前须做好防护措施  
  2. find <target_path> -name <file_or_dir_to_delete> -exec rm -rvf {} \;  

补充附上安全版本:

代码
  1. #!/bin/bash  
  2.   
  3. if [ $# -ne 2 ]   
  4. then  
  5.   echo "Usage: `basename $0` <target_path> <file_to_delete>"  
  6.   exit  
  7. fi  
  8.   
  9. if [ ! -d $1 ]  
  10. then  
  11.   echo "$1 is not a directory."  
  12.   exit  
  13. fi  
  14.   
  15. list=`find $1 -name $2`  
  16.   
  17. if [ ${#list} -eq 0 ]   
  18. then  
  19.   echo "No $2 found under $1"  
  20.   exit  
  21. fi  
  22.   
  23. echo Trying to delete $list, are you sure? \(yes/no\)  
  24. read answer  
  25.   
  26. if [ $answer = ‘yes’ ]  
  27. then  
  28.   rm -rf $list  
  29.   echo "done."  
  30. fi  

个人PHP版

最近一个小网站发布,由于我耍懒,让伙伴传FTP更新,结果不慎将.svn的文件统统上传之。时间也到这会了,现在都5点多了,而且.svn是十分纠结的一个家伙,层层目录都有,尤其对于php这种基于目录结构的脚本语言,手动删除,简直要人命了。遂劝伙伴先睡去,再捣鼓出以下代码。

诸位若是碰到.svn或者类似的纠结问题,可同处之。

PHP代码
  1. <?php  
  2. // $entry       传入初始的路径,是全路径名,要用realpath  
  3. // $target      要找出的目标,不用全路径名,注意只支持单项查找。  
  4. // &$holder     任意数组,这里是传引用,不过用的人不用操心了  
  5. // $isDir       目标是不是一个目录  
  6. // $filter      豁免名单,使用半角逗号隔开,注意别加空格  
  7. // 由于我实在太懒,所以就不检查linux的服务器权限了,  
  8. // 其实$filter就是为了避开那些无权限操作的目录的,那些不是我们关心的重点^_^  
  9.   
  10. function dirAndFindTargetByName($entry$target, &$holder$isDir = true, $filter = null) {  
  11.     $d = dir($entry);  
  12.     if ($filter != null)  
  13.         $filter = ‘,’ . trim($filter‘,’) . ‘,’;  
  14.     while(false !== ($v = $d->read())) {  
  15.         if($v == "." || $v == "..")  
  16.             continue;  
  17.         $file = $d->path.‘/’.$v;  
  18.         $isIt = false;  
  19.         if ($isDir && $v == $target && is_dir($file))  
  20.             $isIt = $file;  
  21.         else if ($v == $target && is_file($file))  
  22.             $isIt = $file;  
  23.           
  24.         if ($isIt)  
  25.             $holder[] = $file;  
  26.         else if (is_dir($file) && $filter != null && stripos($filter‘,’ . $v . ‘,’) === false)  
  27.             dirAndFindTargetByName($file$target$holder$isDir$filter);  
  28.     }  
  29. }  
  30.   
  31.   
  32. // 老实交代,这是从某网站扒的,因为以前也扒过,请原谅我的懒惰。  
  33. // 出处:http://blog.penner.cn/2004/11/15/use-php-delete-directory.html  
  34. // 懒归懒,原作者的创作还是要尊重的  
  35. function removeDir($dirName)  
  36. {  
  37.     $result = false;  
  38.     if(! is_dir($dirName))  
  39.     {  
  40.         trigger_error("目录名称错误", E_USER_ERROR);  
  41.     }  
  42.     $handle = opendir($dirName);  
  43.     while(($file = readdir($handle)) !== false)  
  44.     {  
  45.         if($file != ‘.’ && $file != ‘..’)  
  46.         {  
  47.             $dir = $dirName . DIRECTORY_SEPARATOR . $file;  
  48.             is_dir($dir) ? removeDir($dir) : unlink($dir);  
  49.         }  
  50.     }  
  51.     closedir($handle);  
  52.     $result = rmdir($dirName) ? true : false;  
  53.     return $result;  
  54. }  
  55.   
  56. $currentPath = realpath(‘.’);  
  57. $target = ‘.svn’;  
  58. $list = array();  
  59. dirAndFindTargetByName($currentPath$target$list, true, ‘bbs,upload,2010′);  
  60.   
  61. // $list就是holder,取出了内容在进行处理,逻辑清楚一些,别不三不四的。  
  62.   
  63. echo ‘<h1>共查出’.count($list).‘个’.$target.‘目录</h1>’;  
  64.   
  65. echo ‘<table>’;  
  66. foreach ($list as $path) {  
  67.     if (is_dir($path) && stripos($path$target) !== false) {  
  68.         if (removeDir($path)) {  
  69.             echo ‘<tr>’;  
  70.             echo ‘<td>删除目录:’ . $path . "</td><td style=’color:green;’>…成功!</td>";  
  71.             echo ‘</tr>’;  
  72.         }  
  73.         else {  
  74.             echo ‘<tr>’;  
  75.             echo ‘<td>删除目录:’ . $path . "</td><td style=’color:red;’>…失败!</td>";  
  76.             echo ‘</tr>’;  
  77.         }  
  78.           
  79.     }  
  80. }  
  81. echo ‘</table>’;  
  82. ?>  



安装Windows 7 SP1时,出现了“致命错误C0000034″,

如果你在安装Windows 7 SP1时,出现了“致命错误C0000034″, 那你正在阅读最佳解决方案. 有两个选项, 第一,如果你的系统具有还原点, 第二,不具有系统还原点.如果你有系统还原点, 重新启动您的电脑,并使用最新的系统还原点. 不过,如果你没有系统还原点继续读我们的文章.此方法不用安全模式, 不用备份, 不用系统还原, 不用DISM, 不用windows 7光盘修复. 注意: 此方法不保证完全有效.以下为解决步骤: 1. 重新启动电脑 2. 选择选项 “启动修复” 3. 当修复启动, 单击取消. 4. 点击“不发送” 5. 点击“查看高级修复和支持选项” 6. 在新窗口中点击命令行. 7. 在命令行处键入 Notepad.exe 8. 记事本将打开. 然后点击文件–>打开. 9. 将文件类型由文本文档txt改为所有文件 10. 转到X:\Windows\winsxs文件夹 (X为你安装系统文件的盘符) 11. 在该文件夹, 找到pending.xml并复制一份以做备份 12. 现在打开pending.xml (它加载很慢,因为该文件非常大) 13. 搜索: 0000000000000000.cdf-ms 14. 删除以下文字 : < checkpoint/ > < deletefile path=”\SystemRoot\WinSxS\FileMaps\_0000000000000000.cdf-ms”/ > < movefile source=”\SystemRoot\WinSxS\Temp\PendingRenames\e56db1db48d4cb0199440000b01de419._0000000000000000.cdf-ms” destination=”\SystemRoot\WinSxS\FileMaps\_0000000000000000.cdf-ms”/ > 您的电脑可能没有全部 3 个代码块 (< checkpoint>, < deletefile>, < movefile>). 您只要确定删除checkpoint代码块和任何其他包括0000000000000000.cdf-ms的块. 15.保存该文件, 关闭记事本, 关闭命令行, 重新启动计算机.  PS:有的可能不是0000000000000000.cdf-ms,这时候ctrl+F查找“checkpoint”,删掉就近的< checkpoint>, < deletefile>, < movefile>保存,重启即可。我也不能保证这个方法没有问题,只能说我用了是OK的。

php 防注入的一些方法

判断传递的变量中是否含有非法字符我们把以下代码放到一个公共的文件里,比如security.inc.php里面,每个文件里都include一下这个文件,那么就能够给任何一个程序进行提交的所有变量进行过滤了,就达到了我们一劳永逸的效果。 

 
 
简述:/************************* 
说明: 
判断传递的变量中是否含有非法字符 
如$_POST、$_GET 
功能:防注入 
**************************/ 
把以下代码复制保存为:chkreqdata.php,在需要过滤的页面加入include("chkreqdata.php");
方法一:

PHP代码
  1. <?php   
  2. // 要过滤的非法字符  
  3. $ArrFiltrate = array("’"";""union");   
  4. // 出错后要跳转的url,不填则默认前一页  
  5. $StrGoUrl = "";   
  6. // 是否存在数组中的值  
  7. function FunStringExist($StrFiltrate$ArrFiltrate)  
  8. {  
  9.     foreach ($ArrFiltrate as $key => $value) {  
  10.         if (eregi($value$StrFiltrate)) {  
  11.             return true;  
  12.         }   
  13.     }   
  14.     return false;  
  15. }   
  16. // 合并$_POST 和 $_GET  
  17. if (function_exists(array_merge)) {  
  18.     $ArrPostAndGet = array_merge($HTTP_POST_VARS$HTTP_GET_VARS);  
  19. else {  
  20.     foreach($HTTP_POST_VARS as $key => $value) {  
  21.         $ArrPostAndGet[] = $value;  
  22.     }   
  23.     foreach($HTTP_GET_VARS as $key => $value) {  
  24.         $ArrPostAndGet[] = $value;  
  25.     }   
  26. }   
  27. // 验证开始  
  28. foreach($ArrPostAndGet as $key => $value) {  
  29.     if (FunStringExist($value$ArrFiltrate)) {  
  30.         echo "<script language=\"javascript\">alert(\"非法字符\");</script>";  
  31.         if (emptyempty($StrGoUrl)) {  
  32.             echo "<script language=\"javascript\">history.go(-1);</script>";  
  33.         } else {  
  34.             echo "<script language=\"javascript\">window.location=\"" . $StrGoUrl . "\";</script>";  
  35.         }   
  36.         exit;  
  37.     }   
  38. }   
  39.   
  40. ?>   

方法二:

PHP代码
  1. <?php  
  2. /** 
  3.  * 过滤所有GET过来变量 
  4.  */  
  5. foreach ($_GET as $get_key => $get_var) {  
  6.     if (is_numeric($get_var)) {  
  7.         $get[strtolower($get_key)] = get_int($get_var);  
  8.     } else {  
  9.         $get[strtolower($get_key)] = get_str($get_var);  
  10.     }   
  11. }   
  12.   
  13. /** 
  14.  * 过滤所有POST过来的变量 
  15.  */  
  16. foreach ($_POST as $post_key => $post_var) {  
  17.     if (is_numeric($post_var)) {  
  18.         $post[strtolower($post_key)] = get_int($post_var);  
  19.     } else {  
  20.         $post[strtolower($post_key)] = get_str($post_var);  
  21.     }   
  22. }   
  23.   
  24. /** 
  25.  * 过滤函数 
  26.  */  
  27. // 整型过滤函数  
  28. function get_int($number)  
  29. {  
  30.     return intval($number);  
  31. }   
  32. // 字符串型过滤函数  
  33. function get_str($string)  
  34. {  
  35.     if (!get_magic_quotes_gpc()) {  
  36.         return addslashes($string);  
  37.     }   
  38.     return $string;  
  39. }   
  40.   
  41. ?>  

linux一些常用命令技巧

1. sudo !!

 

以 root 帐户执行上一条命令。

 

2.python -m SimpleHTTPServer

利用 Python 搭建一个简单的 Web 服务器,可通过 http://$HOSTNAME:8000 访问。

 

3. :w !sudo tee %

在 Vim 中无需权限保存编辑的文件。

 

4. cd -

更改到上一次访问的目录。

 

5. ^foo^bar

将上一条命令中的 foo 替换为 bar,并执行。

 

6. cp filename{,.bak}

快速备份或复制文件。

 

7. mtr google.com

traceroute + ping。

 

8. !whatever:p

搜索命令历史,但不执行。

 

9.$ssh-copy-id user@host

将 ssh keys 复制到 user@host 以启用无密码 SSH 登录。

 

ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg

把 Linux 桌面录制为视频。

PHP CURL 发送和接收XML数据,并用$HTTP_RAW_POST_DATA接收

PHP代码
  1. <?php  
  2.   
  3. $xml = file_get_contents(‘test.xml’);  
  4.   
  5. $header[]="Content-Type: text/xml; charset=utf-8";  
  6.   
  7. $header[]="User-Agent: nginx/1.0.0";  
  8. $header[]="Host: 127.0.0.1";  
  9. $header[]="Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2";  
  10. $header[]="Connection: keep-alive";  
  11. $header[]="Content-Length: ".strlen($xml);  
  12.   
  13. $url = "http://{$_SERVER[‘HTTP_HOST’]}".dirname($_SERVER[‘PHP_SELF’]).‘/response.php’;  
  14.   
  15. $ch = curl_init();  
  16. curl_setopt($ch, CURLOPT_URL, $url);  
  17. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);  
  18. curl_setopt($ch, CURLOPT_POST, 1);   
  19. curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);  
  20. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
  21. curl_setopt($ch, CURLOPT_HEADER, 0);  
  22. $res = curl_exec($ch);  
  23. curl_close($ch);  
  24.   
  25. header(‘Content-Type:text/xml; charset=utf-8′);  
  26. echo ($res);  
  27.   
  28. ?>  

 

response.php 文件内容:

PHP代码
  1. <?php   
  2. echo $HTTP_RAW_POST_DATA;  
  3. ?>  

 

 

如何提高PHP编程效率

用单引号代替双引号来包含字符串,这样做会更快一些。因为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()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。

  

    34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或 Java代码并指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。

  

    35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。

  

    36、并非要用类实现所有的数据结构,数组也很有用。

  

    37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码? 

  

  38、当你需要时,你总能把代码分解成方法。

  

    39、尽量采用大量的PHP内置函数。

  

    40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。

  

    41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。

  

    42、mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。

  

    43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;

  

    44、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;

  

    45、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过);

  

    46、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);

  

    47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);

  

    48、多维数组尽量不要循环嵌套赋值;

  

    49、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;

  

    50、foreach效率更高,尽量用foreach代替while和for循环;

  

    51、用单引号替代双引号引用字符串;

  

    52、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”;

  

    53、对global变量,应该用完就unset()掉;