1.不要使用相对路径

常常会看到:

require_once('../../lib/some_class.php'); 

该方法有很多缺点:

它首先查找指定的php包含路径然后查找当前目录.

因此会检查过多路径.

如果该脚本被另一目录的脚本包含它的基本目录变成了另一脚本所在的目录.

另一问题当定时任务运行该脚本它的上级目录可能就不是工作目录了.

因此最佳选择是使用绝对路径:

define('ROOT' , '/var/www/project/');  

require_once(ROOT . '../../lib/some_class.php');  

       

//rest of the code 

我们定义了一个绝对路径值被写死了我们还可以改进它路径 /var/www/project 也可能会改变那么我们每次都要改变它吗不是的我们可以使用__FILE__常量:

//suppose your script is /var/www/project/index.php  

//Then __FILE__ will always have that full path.  

       

define('ROOT' , pathinfo(__FILE__, PATHINFO_DIRNAME));  

10 require_once(ROOT . '../../lib/some_class.php');  

11    

12 //rest of the code 

现在无论你移到哪个目录如移到一个外网的服务器上代码无须更改便可正确运行.

2. 不要直接使用 require, include, include_once, required_once

可以在脚本头部引入多个文件像类库工具文件和助手函数等:

13 require_once('lib/Database.php');  

14 require_once('lib/Mail.php');  

15 require_once('helpers/utitlity_functions.php'); 

这种用法相当原始应该更灵活点应编写个助手函数包含文件例如:

16 function load_class($class_name)  

17 {  

18  //path to the class file  

19  $path = ROOT . '/lib/' . $class_name . '.php');  

20  require_once( $path );  

21 }  

22        

23 load_class('Database');  

24 load_class('Mail'); 

有什么不一样吗该代码更具可读性.

將来你可以按需扩展该函数:

25 function load_class($class_name)  

26 {  

27   //path to the class file  

28     $path = ROOT . '/lib/' . $class_name . '.php');  

29    

30   if(file_exists($path))  

31     {  

32  require_once( $path );  

33         }  

34 

还可做得更多:

为同样文件查找多个目录

能很容易的改变放置类文件的目录无须在代码各处一一修改

可使用类似的函数加载文件html内容.

3. 为应用保留调试代码

在开发环境中我们打印数据库查询语句转存有问题的变量值而一旦问题解决我们注释或删除它们然而更好的做法是保留调试代码.

在开发环境中你可以:

35 define('ENVIRONMENT' , 'development');  

36    

37 if(! $db->query( $query )  

38 {  

39    if(ENVIRONMENT == 'development')  

40    {  

41       echo "$query failed";  

42   }  

43    else  

44     {  

45        echo "Database error. Please contact administrator";  

46     }  

47 

在服务器中你可以:

48 define('ENVIRONMENT' , 'production');  

49 if(! $db->query( $query )  

50 {  

51    if(ENVIRONMENT == 'development')  

52    {  

53        echo "$query failed";  

54    }  

55     else  

56     {  

57         echo "Database error. Please contact administrator";  

58     }  

59 

4. 使用可跨平台的函数执行命令

system, exec, passthru, shell_exec 4个函数可用于执行系统命令每个的行为都有细微差别问题在于当在共享主机中某些函数可能被选择性的禁用大多数新手趋于每次首先检查哪个函数可用然而再使用它.

更好的方案是封成函数一个可跨平台的函数。

60 01  /**  

61 02      Method to execute a command in the terminal  

62 03      Uses :  

63 04     

64 05      1. system  

65 06      2. passthru  

66 07      3. exec  

67 08      4. shell_exec  

68 09     

69 10  */  

70 11  function terminal($command)  

71 12  {  

72 13      //system  

73 14      if(function_exists('system'))  

74 15      {  

75 16          ob_start();  

76 17          system($command , $return_var);  

77 18          $output = ob_get_contents();  

78 19          ob_end_clean();  

79 20      }  

80 21      //passthru  

81 22      else if(function_exists('passthru'))  

82 23      {  

83 24          ob_start();  

84 25          passthru($command , $return_var);  

85 26          $output = ob_get_contents();  

86 27          ob_end_clean();  

87 28      }  

88 29     

89 30      //exec  

90 31      else if(function_exists('exec'))  

91 32      {  

92 33          exec($command , $output , $return_var);  

93 34          $output = implode("\n" , $output);  

94 35      }  

95 36     

96 37      //shell_exec  

97 38      else if(function_exists('shell_exec'))  

98 39      {  

99 40          $output = shell_exec($command) ;  

100 41      }  

101 42     

102 43      else  

103 44      {  

104 45          $output = 'Command execution not possible on this system';  

105 46          $return_var = 1;  

106 47      }  

107 48     

108 49      return array('output' => $output , 'status' => $return_var);  

109 50  }  

110 51     

111 52  terminal('ls'); 

上面的函数將运行shell命令只要有一个系统函数可用这保持了代码的一致性

更全的下载附件查看