jxyuhua的地盘

PHP WEB开发 电子商务

原创 我心中的PHP写法收藏

用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';
?>

发表于 @ 2006年04月02日 21:07:00|评论(loading...)

新一篇: Google发布日程表应用Google Calendar | 旧一篇: AJAX根据邮政编码,自动完成城市和地址信息

Csdn Blog version 3.1a
Copyright © jxyuhua