我心中的PHP写法 [转]
时间:2007-10-04 来源:windlike
用PHP已经有很长一段时间了,虽然水平也就这样,但今天还是鼓足勇气,把我自己的一些想法记录于此。方便自己日后使用。有点乱,等以后再继续完善。
首先常用的函数,类库放在一个公共目录中,网站的配置信息存放在一个公共文件中如config.php,
条件允许的话,可以放在非WEB目录中。
我借鉴了osCommerce的一些写法,比如将公用文件放在includes/application_top.php中。
在很多时候,include_path会搞得人头痛,因此不如将它取消,全部用自己定义的include_path值
php
//防止直接访问此文件
if (eregi("application_top.php",$_SERVER['PHP_SELF'])) {
header("location: ../index.php");
die();
}
if(preg_match('/windows/i', $_ENV['OS'])) {
$include_separator = ';';
} else {
$include_separator = ':';
}
require_once('config.php');
$include_path = DIR_WS_INCLUDES . $include_separator .
DIR_WS_INCLUDES . 'smarty' . $include_separator .
DIR_WS_INCLUDES . 'class' . $include_separator .
DIR_WS_INCLUDES . 'PEAR' . $include_separator;
ini_set('include_path', $include_path);
require_once("function.php");
?>
数据库连接
最好采用数据库连接层,如PEAR::DB,不要直接用具体的PHP数据连接函数如:mysql_connect等,
如果非要用的话,等有一天你要换数据库的时候,你就知道了什么叫。现在php5.1有了一个PDO,以后这种情况可能好些。
说到数据库连接,就要讲到SQL语句了,因为网站的SQL语句会出现多次重复使用的情况,因此我将一些通用的SQL语句全部放在了一个PHP文件,然后需要用的时候,就调用它们如:
php
define('_SQL_CATEGORIES_BY_SID', "SELECT c.categories_id, c.categories_name FROM " .
TABLE_CATEGORIES . " c INNER JOIN " . TABLE_CATEGORIES . " sub_c " .
"ON c.categories_id = sub_c.parent_id WHERE sub_c.categories_id = %d LIMIT 1");
?>
这样就避免了数据库结构有变化的时候,大规模的修改SQL语句的情况。
在数据库资料的入库和出库的时候,需要进行处理,这些处理最好中放到单独的函数中,避免直接用类似于addslashes()之类的函数来处理,那样很不灵活,当要增加一些额外的动作时,就需要更改所有使用到它们的地方。
php
//处理传递过来的值
$_GET = array_map('getSafeValue', $_GET);
$_POST = array_map('getSafeValue', $_POST);
?>
php
function getSafeValue($value)
{
//如果get_magic_quotes_gpc打开了,则不处理,否则用addslashes处理
if (! get_magic_quotes_gpc()) {
return addslashes($value);
} else {
return $value;
}
}
?>
模板
用模板的好处,就是在当你要改版面的时候,工作量少一点。我用的是Smarty模板,以前在模板中用了很多的模板自己的逻辑判断,觉得这样不好,应该尽量地将这些逻辑判断交给PHP来处理,模板只要显示就可以了:
$variable%>
另外如果采用DIV+CSS的话,改起版面来就可以更加方便。
如div id="product">$variable%>div>
缓存加速
打开Smarty的Cache功能,这样第二次访问页面就是访问接近HTM的页面了,结合GZIP压缩输出,使访问速度可以更快一些。
php
// if gzip_compression is enabled, start to buffer the output
if ( ($ext_zlib_loaded = extension_loaded('zlib')) && (PHP_VERSION >= '4') ) {
if (($ini_zlib_output_compression = (int)ini_get('zlib.output_compression')) 1) {
if (PHP_VERSION >= '4.0.4') {
ob_start('ob_gzhandler');
}
} else {
ini_set('zlib.output_compression_level', 9);
}
}
?>
php
/*
$Id: jxyuhua.php,v 1.4 February 26, 2006, 8:24 pm hpdl Exp $
*/
require_once 'includes/application_top.php';
if(! $class_smarty->is_cached(TPL_NAME, $cache_id)) {
//逻辑处理
}
//显示内容
$class_smarty->display(TPL_NAME, $cache_id);
require_once DIR_WS_INCLUDES . 'includes/application_bottom.php';
?>
首先常用的函数,类库放在一个公共目录中,网站的配置信息存放在一个公共文件中如config.php,
条件允许的话,可以放在非WEB目录中。
我借鉴了osCommerce的一些写法,比如将公用文件放在includes/application_top.php中。
在很多时候,include_path会搞得人头痛,因此不如将它取消,全部用自己定义的include_path值
php
//防止直接访问此文件
if (eregi("application_top.php",$_SERVER['PHP_SELF'])) {
header("location: ../index.php");
die();
}
if(preg_match('/windows/i', $_ENV['OS'])) {
$include_separator = ';';
} else {
$include_separator = ':';
}
require_once('config.php');
$include_path = DIR_WS_INCLUDES . $include_separator .
DIR_WS_INCLUDES . 'smarty' . $include_separator .
DIR_WS_INCLUDES . 'class' . $include_separator .
DIR_WS_INCLUDES . 'PEAR' . $include_separator;
ini_set('include_path', $include_path);
require_once("function.php");
?>
数据库连接
最好采用数据库连接层,如PEAR::DB,不要直接用具体的PHP数据连接函数如:mysql_connect等,
如果非要用的话,等有一天你要换数据库的时候,你就知道了什么叫。现在php5.1有了一个PDO,以后这种情况可能好些。
说到数据库连接,就要讲到SQL语句了,因为网站的SQL语句会出现多次重复使用的情况,因此我将一些通用的SQL语句全部放在了一个PHP文件,然后需要用的时候,就调用它们如:
php
define('_SQL_CATEGORIES_BY_SID', "SELECT c.categories_id, c.categories_name FROM " .
TABLE_CATEGORIES . " c INNER JOIN " . TABLE_CATEGORIES . " sub_c " .
"ON c.categories_id = sub_c.parent_id WHERE sub_c.categories_id = %d LIMIT 1");
?>
这样就避免了数据库结构有变化的时候,大规模的修改SQL语句的情况。
在数据库资料的入库和出库的时候,需要进行处理,这些处理最好中放到单独的函数中,避免直接用类似于addslashes()之类的函数来处理,那样很不灵活,当要增加一些额外的动作时,就需要更改所有使用到它们的地方。
php
//处理传递过来的值
$_GET = array_map('getSafeValue', $_GET);
$_POST = array_map('getSafeValue', $_POST);
?>
php
function getSafeValue($value)
{
//如果get_magic_quotes_gpc打开了,则不处理,否则用addslashes处理
if (! get_magic_quotes_gpc()) {
return addslashes($value);
} else {
return $value;
}
}
?>
模板
用模板的好处,就是在当你要改版面的时候,工作量少一点。我用的是Smarty模板,以前在模板中用了很多的模板自己的逻辑判断,觉得这样不好,应该尽量地将这些逻辑判断交给PHP来处理,模板只要显示就可以了:
$variable%>
另外如果采用DIV+CSS的话,改起版面来就可以更加方便。
如div id="product">$variable%>div>
缓存加速
打开Smarty的Cache功能,这样第二次访问页面就是访问接近HTM的页面了,结合GZIP压缩输出,使访问速度可以更快一些。
php
// if gzip_compression is enabled, start to buffer the output
if ( ($ext_zlib_loaded = extension_loaded('zlib')) && (PHP_VERSION >= '4') ) {
if (($ini_zlib_output_compression = (int)ini_get('zlib.output_compression')) 1) {
if (PHP_VERSION >= '4.0.4') {
ob_start('ob_gzhandler');
}
} else {
ini_set('zlib.output_compression_level', 9);
}
}
?>
php
/*
$Id: jxyuhua.php,v 1.4 February 26, 2006, 8:24 pm hpdl Exp $
*/
require_once 'includes/application_top.php';
if(! $class_smarty->is_cached(TPL_NAME, $cache_id)) {
//逻辑处理
}
//显示内容
$class_smarty->display(TPL_NAME, $cache_id);
require_once DIR_WS_INCLUDES . 'includes/application_bottom.php';
?>
相关阅读 更多 +
排行榜 更多 +