<?php
/**
* 采集百度的搜索结果,可以用到站内搜索,节省资源
* 分页部分就没有处理了,需在函数外处理
*
* @author Aboc QQ:9986584
*/

function searchBaidu($keyword,$page=0){
  
   if(empty($keyword))return false;
   $keyword = urlencode($keyword);
   if($page>76)$page=76;
   $content = file_get_contents("http://www.baidu.com/s?wd=".$keyword.'&pn='.$page);
   //echo $content;
  
   //如果找不到
   if(strpos($content,'抱歉,没有找到与“<font color="#C60A00">')!==false)return false;
  
   preg_match('/百度一下,找到相关网页(.*)篇,用时/',$content,$a);
   //搜索结果数
   $num = str_replace(array('约',','),'',$a[1]);
   $page = ceil($num)/10;
   //echo $num;

   //采集到的标题
   preg_match_all('/(\<font size=\"3\"\>(.+?)\<\/font\>\<\/a\>\<br\>)/',$content,$b);
   //print_r($b[2]);
   $title = $b[2];

   //采网址
   preg_match_all('/(\<a onmousedown=\"(.+?)\" href=\"(.+?)\" target=\"_blank\"\>)/',$content,$c);
   //print_r($c);
   $href = $c[3];

   //采内容
   preg_match_all('/(\<font size=-1\>(.+?)\<br\>)/',$content,$d);
   //print_r($d);
   $detail = $d[2];
  
   $end = array();
   $end[0] = array('num'=>ceil($num),'page'=>$page);
   foreach( $title as $key=>$row ){
    $end[1][$key]['title']=$title[$key];
    $end[1][$key]['href']=$href[$key];
    $end[1][$key]['detail']=$detail[$key];
   }
   return $end;  
}

/**
* 使用
*/
   if( $search = searchBaidu('www.yiwuku.com') )
print_r($search);
else
echo '没有找到';

2012-1-30 17:36 Monday  

生成:

<?php
define('IN_ECS', true);

require('../includes/init.php');

$id = isset($_GET['id'])?$_GET['id']:'';
$key = isset($_GET['key'])?$_GET['key']:'';
if($key != 'DFDAe' || empty($id))die("错误");
$sql = "select goods_id,goods_sn,goods_name,goods_img,goods_thumb from girls_goods where brand_id=$id";
$rows = $db->getAll($sql);
//print_r($rows);
$doc = new DOMDocument();
$doc->formatOutput = true;
$goods = $doc->createElement('goods');
$doc->appendChild($goods);
foreach ($rows as $row){
$good = $doc->createElement('good');

$goods_id = $doc->createElement('goods_id');
   $goods_id2 = $doc->createTextNode($row['goods_id']);
   $goods_id->appendChild($goods_id2);
$good->appendChild($goods_id);
  
$goods_sn = $doc->createElement('goods_sn');
   $goods_sn2 = $doc->createTextNode($row['goods_sn']);
   $goods_sn->appendChild($goods_sn2);
$good->appendChild($goods_sn);
  
$goods_name = $doc->createElement('goods_name');
   $goods_name2 = $doc->createTextNode($row['goods_name']);
   $goods_name->appendChild($goods_name2);
$good->appendChild($goods_name);
  
$goods_img = $doc->createElement('goods_img');
   $goods_img2 = $doc->createTextNode('http://www.togirl.cn/'.$row['goods_img']);
   $goods_img->appendChild($goods_img2);
$good->appendChild($goods_img);
  
$goods_thumb = $doc->createElement('goods_thumb');
   $goods_thumb2 = $doc->createTextNode('http://www.togirl.cn/'.$row['goods_thumb']);
   $goods_thumb->appendChild($goods_thumb2);
$good->appendChild($goods_thumb);
  

$goods->appendChild($good);
}

echo $doc->saveXML();

读取到一个数组中

<?php
//header('charset:utf-8');
$doc = new DOMDocument();

$doc->load('http://www.yiwuku.com/xml/brand.php?id=13&key=DFDAe');
$goods = $doc->getElementsByTagName('good');
$newgoods = array();
foreach ($goods as $key=>$good){
$id = $good->getElementsByTagName('goods_id');
$newgoods[$key]['goods_id'] = $id->item(0)->nodeValue;

$sn = $good->getElementsByTagName('goods_sn');
$newgoods[$key]['goods_sn'] = $sn->item(0)->nodeValue;

$name = $good->getElementsByTagName('goods_name');
$newgoods[$key]['goods_name'] = iconv('utf-8','gbk',$name->item(0)->nodeValue);

$img = $good->getElementsByTagName('goods_img');
$newgoods[$key]['goods_img'] = $img->item(0)->nodeValue;

$thumb = $good->getElementsByTagName('goods_thumb');
$newgoods[$key]['goods_thumb'] = $thumb->item(0)->nodeValue;
}

print_r($newgoods);

2012-1-30 17:35 Monday  
extension=php_xdebug.dll
[Xdebug]
xdebug.profiler_enable=on
xdebug.trace_output_dir="c:\php5\xdebug"

xdebug.profiler_output_dir="c:\php5\xdebug"

 

参数说明如下:

xdebug.overload_var_dump
 ...

阅读全文>>

2012-1-30 17:33 Monday  

自己弄了一个,不过好像速度不理想

   $badword='坏词一|坏词二';   //用|隔开词
   $word=explode('|',$badword);
   foreach ( $word as $value ) {
    if( strstr(str_replace(array(' ','\n'),array('',''),$form['Detail']),$value) ){
     die('有害信息');
    }

2012-1-30 17:32 Monday  

$fin_str = join($br,str_split($str,4));

str_split   将字符串分成相等的几个部分..(新数组)

然后用join 将新数组的值用$br连起来

不过对于含有HTML代码的,这样直接做可能不行,得另外想办法

2012-1-30 17:31 Monday  
array_change_key_case — 返回字符串键名全为小写或大写的数组
array_chunk — 将一个数组分割成多个
array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
array_count_values — 统计数组中所有的值出现的次数
array_diff_assoc — 带索引检查计算数组的差集
array_diff_key — 使用键名比较计算数组的差集
array_diff_uassoc — 用用户提供的回调函数做索引检查来计算数组的差集
array_diff_ukey — 用回调函数对键名比较计算数组的差集
array_diff — 计算数组的差集
array_fill_keys — Fill an array with values, specifying keys
array_fill — 用给定的值填充数组
array_filter — 用回调函数过滤数组中的单元
array_flip — 交换数组中的键和值
array_intersect_assoc — 带索引检查计算数组的交集
array_intersect_key — 使用键名比较计算数组的交集
array_intersect_uassoc — 带索引检查计算数组的交集,用回调函数比较索引
array_intersect_ukey — 用回调函数比较键名来计算数组的交集
array_intersect — 计算数组的交集
array_key_exists — 检查给定的键名或索引是否存在于数组中
array_keys — 返回数组中所有的键名
array_map — 将回调函数作用到给定数组的单元上
array_merge_recursive — 递归地合并一个或多个数组
array_merge — 合并一个或多个数组
array_multisort — 对多个数组或多维数组进行排序
array_pad — 用值将数组填补到指定长度
array_pop — 将数组最后一个单元弹出(出栈)
array_product — 计算数组中所有值的乘积
array_push — 将一个或多个单元压入数组的末尾(入栈)
array_rand — 从数组中随机取出一个或多个单元
array_reduce — 用回调函数迭代地将数组简化为单一的值
array_reverse — 返回一个单元顺序相反的数组
array_search — 在数组中搜索给定的值,如果成功则返回相应的键名
array_shift — 将数组开头的单元移出数组
array_slice — 从数组中取出一段
array_splice — 把数组中的一部分去掉并用其它值取代
array_sum — 计算数组中所有值的和
array_udiff_assoc — 带索引检查计算数组的差集,用回调函数比较数据
array_udiff_uassoc — 带索引检查计算数组的差集,用回调函数比较数据和索引
array_udiff — 用回调函数比较数据来计算数组的差集
array_uintersect_assoc — 带索引检查计算数组的交集,用回调函数比较数据
array_uintersect_uassoc — 带索引检查计算数组的交集,用回调函数比较数据和索引
array_uintersect — 计算数组的交集,用回调函数比较数据
array_unique — 移除数组中重复的值
array_unshift — 在数组开头插入一个或多个单元
array_values — 返回数组中所有的值
array_walk_recursive — 对数组中的每个成员递归地应用用户函数
array_walk — 对数组中的每个成员应用用户函数
array — 新建一个数组
arsort — 对数组进行逆向排序并保持索引关系
asort — 对数组进行排序并保持索引关系
compact — 建立一个数组,包括变量名和它们的值
count — 计算数组中的单元数目或对象中的属性个数
current — 返回数组中的当前单元
each — 返回数组中当前的键/值对并将数组指针向前移动一步
end — 将数组的内部指针指向最后一个单元
extract — 从数组中将变量导入到当前的符号表
in_array — 检查数组中是否存在某个值
key — 从关联数组中取得键名
krsort — 对数组按照键名逆向排序
ksort — 对数组按照键名排序
list — 把数组中的值赋给一些变量
natcasesort — 用“自然排序”算法对数组进行不区分大小写字母的排序
natsort — 用“自然排序”算法对数组排序
next — 将数组中的内部指针向前移动一位
pos — current() 的别名
prev — 将数组的内部指针倒回一位
range — 建立一个包含指定范围单元的数组
reset — 将数组的内部指针指向第一个单元
rsort — 对数组逆向排序
shuffle — 将数组打乱
sizeof — count() 的别名
sort — 对数组排序
uasort — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
uksort — 使用用户自定义的比较函数对数组中的键名进行排序
usort — 使用用户自定义的比较函数对数组中的值进行排序
2012-1-30 17:30 Monday  
<?php
/**
* 修改session存放方式为Mysql Aboc QQ:9986584
*/

class Session{

//过期时间
private $_LEFT_TIME = 1440;

public function open() {


    }

public function close(){
    
}

/**
   * 读
   */
public function read( $sessid ) {
$sql = "select data from dm_session where sessid ='$sessid' and expiry > time()";
$row = DMmysql::open()->fetchRow( $sql );
return $row['data'];
}

/**
   * 写
   */
public function write( $sessid , $sessdata ) {
$data = array(
    'expiry'    =>   time()+ $this->_LEFT_TIME,
    'data'      =>   $sessdata,
    'ip'   =>   '192.168.1.123'
);
if( DMmysql::open()->fetchRow("select sessid from dm_session where sessid ='$sessid'") ) {
   //更新
   $where = "sessid = '$sessid'";
   if( DMmysql::open()->update( 'dm_session',$data,$where ) ){
    return true;
   } else {
    return false;
   }
} else {
   //插入
   $data['sessid'] = $sessid;
   if( DMmysql::open()->insert('dm_session',$data) ){
    return true;
   } else {
    return false;
   }   
}
}

/**
   * 指定销毁
   */
public function destroy( $sessid ) {
$where = "sessid = '$sessid'";
if(DMmysql::open()->delete('dm_session',$where)) {
   return true;
} else {
   return false;
}
}

/**
   * 销毁过期的数据
   */
public function gc( $maxlifetime ) {
//随机销毁数据,减轻服务器压力
if( rand(0,3) == 3 ) {
   $where = "expiry < time()";
   if( DMmysql::open()->delete('dm_session',$where) ) {
      return true;
   } else {
    return false;
   }
}
}

}

$session = new Session();
session_set_save_handler(
    array(&$session,'open'),
    array(&$session,'close'),
    array(&$session,'read'),
    array(&$session,'write'),
    array(&$session,'destroy'),
    array(&$session,'gc')
);
session_start();
?>

在每个使用session的文件前include一下就行了

数据库:

CREATE TABLE `dm_session` (
   `sessid` char(32) NOT NULL default '',
   `expiry` int(10) NOT NULL default '0',
   `data` text NOT NULL,
   `ip` char(15) NOT NULL default '',
   PRIMARY KEY   (`sessid`),
   KEY `sesskid` (`sessid`,`expiry`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
2012-1-30 17:29 Monday  
<?php
//FileName:Access.class.php
//Summary: Access数据库操作类
//Author: forest
//CreateTime: 2006-8-10
//LastModifed:
//copyright (c)2006
//http://freeweb.nyist.net/~chairy
//[email]chaizuxue@163.com[/email]
// 使用范例:
//$databasepath="database.mdb";
//$dbusername="";
//$dbpassword="";
//include_once("Access.class.php");
//$access=new Access($databasepath,$dbusername,$dbpassword);
// 2008.12.23 Aboc Edit /9986584
// 在判断字段是否为空时,用 is null / is not null
// 2011.4.30 Aboc Edit
class Access {
    var $databasepath, $constr, $dbusername, $dbpassword, $link;
    function Access($databasepath, $dbusername, $dbpassword) {
        $this->databasepath = $databasepath;
        $this->username = $dbusername;
        $this->password = $dbpassword;
        $this->connect ();
    }
    function connect() {
        $this->constr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath ( $this->databasepath );
        $this->link = odbc_connect ( $this->constr, $this->username, $this->password, SQL_CUR_USE_ODBC );
        if (!$this->link)die('数据库连接失败');
        return $this->link;
    }
    function query($sql) {
        return @odbc_exec ( $this->link, $sql );
    }
    function first_array($sql) {
        return odbc_fetch_array ( $this->query ( $sql ) );
    }
    function fetch_row($query) {
        return odbc_fetch_row ( $query );
    }
    
    /**
     * 取得记录总数
     *
     * @param unknown_type $sql
     * @return unknown
     */
    function total_num($sql) {
        return odbc_num_rows ( $this->query ( $sql ) );
    }
    
    /**
     * 关闭连接
     *
     */
    function close() {
        odbc_close ( $this->link );
    }
    
    /**
     * 插入
     *
     * @param unknown_type $table
     * @param unknown_type $array
     */
    function insert($table, $array) {
        if (empty($array))return false;
        $k = array();
        $v = array();
        foreach ($array as $key=>$value){
            if (!is_numeric($value)){
                $value = trim($value);
                $value = str_replace("'", "\'", $value);
            }
            $k[] = "`$key`";
            $v[] = "'$value'";            
        }
        $sql = "INSERT INTO " . $table . " (" . join(',', $k) . ") VALUES (" . join(',', $v) . ")";
        return $this->query ( $sql );
    }
    
    
    /**
     * 获取详情
     * Enter description here ...
     * @param unknown_type $table
     * @param unknown_type $field
     * @param unknown_type $id
     * @param unknown_type $colnum
     */
    function getinfo($table, $field, $id, $colnum) {
        $sql = "SELECT * FROM " . $table . " WHERE " . $field . "=" . $id . "";
        $query = $this->query ( $sql );
        if ($this->fetch_row ( $query )) {
            for($i = 1; $i < $colnum; $i ++) {
                $info [$i] = odbc_result ( $query, $i );
            }
        }
        return $info;
    }
    
    /**
     * 取得记录列表
     *
     * @param unknown_type $table
     * @param unknown_type $field
     * @param unknown_type $colnum
     * @param unknown_type $condition
     * @param unknown_type $sort
     * @return unknown
     */
    function getlist($table, $field, $colnum, $condition, $sort = "ORDER BY id DESC") {
        $sql = "SELECT * FROM " . $table . " " . $condition . " " . $sort;
        //echo $sql;
        $query = $this->query ( $sql );
        $i = 0;
        while ( $this->fetch_row ( $query ) ) {
            $recordlist [$i] = $this->getinfo ( $table, $field, odbc_result ( $query, 1 ), $colnum );
            $i ++;
        }
        return $recordlist;
    }
    
    /**
     * 取得记录列表
     *
     * @param unknown_type $table
     * @param unknown_type $field
     * @param unknown_type $fieldnum
     * @param unknown_type $condition
     * @param unknown_type $sort
     * @return unknown
     */
    function getfieldlist($table, $field, $fieldnum, $condition = "", $sort = "") {
        $sql = "SELECT " . $field . " FROM " . $table . " " . $condition . " " . $sort;
        $query = $this->query ( $sql );
        $i = 0;
        $rdlist = array();
        while ( $this->fetch_row ( $query ) ) {
            $info = array();
            for($j = 0; $j < $fieldnum; $j ++) {
                $info [$j] = odbc_result ( $query, $j + 1 );
            }
            $rdlist [$i] = $info;
            $i ++;
        }
        return $rdlist;
    }
    
    /**
     * 获取所有数据
     * Enter description here ...
     * @param unknown_type $table
     * @param unknown_type $field
     * @param unknown_type $where
     * @param unknown_type $limit
     * @param unknown_type $order
     */
    function fetchAll($table,$field=array(),$where,$limit='',$order=''){
        $where = !empty($where)?"where $where":'';
        $limit = $limit!=''?"top $limit":'';
        $order = $order != ''?" order by $order":'';
        $sql = "select $limit ".join(',', $limit)." from $table $where $order";
        $query = $this->query ( $sql );
        $i = 0;
        $fieldnum = count($field);
        $rdlist = array();
        while ( $this->fetch_row ( $query ) ) {
            $info = array();
            for($j = 0; $j < $fieldnum; $j ++) {
                $info [$field[$j]] = odbc_result ( $query, $j + 1 );
            }
            $rdlist [$i] = $info;
            $i ++;
        }
        return $rdlist;
    }    
    
    
    /**
     * 更新
     *
     * @param unknown_type $table
     * @param unknown_type $field
     * @param unknown_type $id
     * @param unknown_type $set
     */
    function updateinfo($table, $field, $id, $set) {
        $where = ! empty ( $field ) ? " WHERE " . $field . "=" . $id : "";
        $sql = "UPDATE " . $table . " SET " . $set . $where;
        return $this->query ( $sql );
    }
    
    /**
     * 更新2
     * Enter description here ...
     * @param unknown_type $table
     * @param unknown_type $array
     * @param unknown_type $where
     */
    function update($table,$array,$where){
        $where = !empty($where)?"where $where":'';
        if (empty($array))return false;
        $set = '';
        foreach ($array as $key=>$value){
            if (!is_numeric($value)){
                $value = trim($value);
                $value = str_replace("'", "\'", $value);
            }
            $set .= !empty($set)?",`$key`='$value'":"`$key`='$value'";            
        }
        return $this->query ("update $table set $set $where ");
    }
    
    /**
     * 删除
     *
     * @param unknown_type $table
     * @param unknown_type $field
     * @param unknown_type $id
     */
    function deleteinfo($table, $field, $id) {
        $where = ! empty ( $field ) ? " WHERE " . $field . "=" . $id : "";
        $sql = "DELETE FROM " . $table . $where;
        //echo $sql;exit;
        return $this->query ( $sql );
    }
    
    /**
     * 删除2
     * Enter description here ...
     * @param unknown_type $table
     * @param unknown_type $where
     */
    function delete($table,$where){
        $where = !empty($where)?"where $where":'';
        return $this->query ("DELETE FROM " . $table . $where);
    }
    
    /**
     * 依条件删除/带where
     *
     * @param unknown_type $table
     * @param unknown_type $condition
     */
    function deleterecord($table, $condition) {
        $sql = "DELETE FROM " . $table . " WHERE " . $condition;
        $this->query ( $sql );
    }
    
    /**
     * 取得指定条件的记录数/不带where
     *
     * @param unknown_type $table
     * @param unknown_type $condition
     * @return unknown
     */
    function getcondrecord($table, $condition = "") {
        $sql = "SELECT COUNT(*) AS num FROM " . $table . " " . $condition;
        $query = $this->query ( $sql );
        $this->fetch_row ( $query );
        $num = odbc_result ( $query, 1 );
        return $num;
    }
}
?>

2012-1-30 17:22 Monday  

PHP中正则表达式详细说明

  PHP继承*NIX的一贯传统,完全支持正规表达式的处理。正规表达式提供了一种高级的,但不直观的字符串匹配和处理的方法。用过PERL的正规表达式的朋友都知道,正规表达式的功能非常强大,但学起来不是那么容易。
  比如:
  
  ^.+@.+\..+$
  
  这段有效却难以理解的代码足够使一些程序员头痛(我就是)或者让他们放弃使用正规表达式。相信当你读完这个教程后,就可以理解这段代码的含义了。
  
  基本模式匹配
  
  一切从最基本的开始。模式,是正规表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如:
  
  ^once
  
  这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串。例如该模式与字符串"once upon a time"匹配,与"There once was a man from NewYork"不匹配。正如如^符号表示开头一样,$符号用来匹配那些以给定模式结尾的字符串。
  
  bucket$
  
  这个模式与"Who kept all of this cash in a bucket"匹配,与"buckets"不匹配。字符^和$同时使用时,表示精确匹配(字符串与模式一样)。例如:
  
  ^bucket$
  
  只匹配字符串"bucket"。如果一个模式不包括^和$,那么它与任何包含该模式的字符串匹配。例如:模式
  
  once
  
  与字符串
  
  There once was a man from NewYork
  Who kept all of his cash in a bucket.
  
  是匹配的。
  
  在该模式中的字母(o-n-c-e)是字面的字符,也就是说,他们表示该字母本身,数字也是一样的。其他一些稍微复杂的字符,如标点符号和白字符(空 格、制表符等),要用到转义序列。所有的转义序列都用反斜杠(\)打头。制表符的转义序列是:\t。所以如果我们要检测一个字符串是否以制表符开头,可以 用这个模式:
  
  ^\t
  
  类似的,用\n表示“新行”,表示回车。其他的特殊符号,可以用在前面加上反斜杠,如反斜杠本身用\表示,句号.用\.表示,以此类推。
  
  字符簇
  
  在INTERNET的程序中,正规表达式通常用来验证用户的输入。当用户提交一个FORM以后,要判断输入的电话号码、地址、EMAIL地址、信用卡号码等是否有效,用普通的基于字面的字符是不够的。
  
  所以要用一种更自由的描述我们要的模式的办法,它就是字符簇。要建立一个表示所有元音字符的字符簇,就把所有的元音字符放在一个方括号里:
  
  [AaEeIiOoUu]
  
  这个模式与任何元音字符匹配,但只能表示一个字符。用连字号可以表示一个字符的范围,如:
  
  [a-z] //匹配所有的小写字母
  [A-Z] //匹配所有的大写字母
  [a-zA-Z] //匹配所有的字母
  [0-9] //匹配所有的数字
  [0-9\.\-] //匹配所有的数字,句号和减号
  [ \f \t \n] //匹配所有的白字符
  ()之间要加空格
  同样的,这些也只表示一个字符,这是一个非常重要的。如果要匹配一个由一个小写字母和一位数字组成的字符串,比如"z2"、"t6"或"g7",但不是"ab2"、"r2d3" 或"b52"的话,用这个模式:
  
  ^[a-z][0-9]$
  
  尽管[a-z]代表26个字母的范围,但在这里它只能与第一个字符是小写字母的字符串匹配。
  
  前面曾经提到^表示字符串的开头,但它还有另外一个含义。当在一组方括号里使用^是,它表示“非”或“排除”的意思,常常用来剔除某个字符。还用前面的例子,我们要求第一个字符不能是数字:
  
  ^[^0-9][0-9]$
  
  这个模式与"&5"、"g7"及"-2"是匹配的,但与"12"、"66"是不匹配的。下面是几个排除特定字符的例子:
  
  [^a-z] //除了小写字母以外的所有字符
  [^\/\^] //除了(\)(/)(^)之外的所有字符
  [^"\'] //除了双引号(")和单引号(')之外的所有字符
  
  
  特殊字符"." (点,句号)在正规表达式中用来表示除了“新行”之外的所有字符。所以模式"^.5$"与任何两个字符的、以数字5结尾和以其他非“新行”字符开头的字符串匹配。模式"."可以匹配任何字符串,除了空串和只包括一个“新行”的字符串。
  
  PHP的正规表达式有一些内置的通用字符簇,列表如下:
  
  字符簇 含义
  [[:alpha:]] 任何字母
  [[:digit:]] 任何数字
  [[:alnum:]] 任何字母和数字
  [[:space:]] 任何白字符
  [[:upper:]] 任何大写字母
  [[:lower:]] 任何小写字母
  [[:punct:]] 任何标点符号
  [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]
  
  到现在为止,你已经知道如何去匹配一个字母或数字,但更多的情况下,可能要匹配一个单词或一组数字。一个单词有若干个字母组成,一组数字有若干个单数组成。跟在字符或字符簇后面的花括号({})用来确定前面的内容的重复出现的次数。
  
  字符簇 含义
  ^[a-zA-Z_]$ 所有的字母和下划线
  ^[[:alpha:]]$ 所有的单个字母的单词
  ^a$ 字母a
  ^a{4,4}$ aaaa
  ^a{2,4}$ aa,aaa或aaaa
  ^a{1,3}$ a,aa或aaa
  ^a{2,}$ 包含多于两个a的字符串
  ^a{2,} 如:aardvark和aaab,但apple不行
  a{2,} 如:baad和aaa,但Nantucket不行
  \t 至少一个制表符
  . 至少一个字符
  
  这些例子描述了花括号的三种不同的用法。一个数字,的意思是“前面的字符或字符簇只出现x次”;一个数字加逗号,{x,}的意思是“前面的内容出现x 或更多的次数”;两个用逗号分隔的数字,{x,y}表示“前面的内容至少出现x次,但不超过y次”。我们可以把模式扩展到更多的单词或数字:
  
  ^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划线的字符串
  ^[0-9]{1,}$ //所有的正数
  ^\-{0,1}[0-9]{1,}$ //所有的整数
  ^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$ //所有的小数
  
  最后一个例子不太好理解,是吗?这么看吧:与所有以一个可选的负号(\-{0,1})开头(^)、跟着0个或更多的数字([0-9]{0,})、和一 个可选的小数点(\.{0,1})再跟上0个或多个数字([0-9]{0,}),并且没有其他任何东西($)。下面你将知道能够使用的更为简单的方法。
  
  特殊字符"?"与{0,1}是相等的,它们都代表着:“0个或1个前面的内容”或“前面的内容是可选的”。所以刚才的例子可以简化为:
  
  ^\-?[0-9]{0,}\.?[0-9]{0,}$
  
  特殊字符"*"与{0,}是相等的,它们都代表着“0个或多个前面的内容”。最后,字符"+"与 {1,}是相等的,表示“1个或多个前面的内容”,所以上面的4个例子可以写成:
  
  ^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划线的字符串
  ^[0-9]+$ //所有的正数
  ^\-?[0-9]+$ //所有的整数
  ^\-?[0-9]*\.?[0-9]*$ //所有的小数
  
  当然这并不能从技术上降低正规表达式的复杂性,但可以使它们更容易阅读。

正则表达式中的特殊字符

  字符\
  意义:对于字符,通常表示按字面意义,指出接着的字符为特殊字符,不作解释。
  例如:/b/匹配字符’b’,通过在b 前面加一个反斜杠,也就是/\b/,则该字符变成特殊字符,表示
  匹配一个单词的分界线。
  或者:
  对于几个字符,通常说明是特殊的,指出紧接着的字符不是特殊的,而应该按字面解释。
  例如:*是一个特殊字符,匹配任意个字符(包括0个字符);例如:/a*/意味匹配0个或多个a。为了匹配字面上的*,在a前面加一个反斜杠;例如:/a\*/匹配’a*’。
  
  字符^
  意义:表示匹配的字符必须在最前边。
  例如:/^A/不匹配"an A,"中的’A’,但匹配"An A."中最前面的’A’。
  
  字符$
  意义:与^类似,匹配最末的字符。
  例如:/t$/不匹配"eater"中的’t’,但匹配"eat"中的’t’。
  
  字符*
  意义:匹配*前面的字符0次或n次。
  例如:/bo*/匹配"A ghost booooed"中的’boooo’或"A bird warbled"中的’b’,但不匹配"Agoat g//要以b在o前面
  runted"中的任何字符。
  
  字符+
  意义:匹配+号前面的字符1次或n次。等价于{1,}。
  例如:/a+/匹配"candy"中的’a’和"caaaaaaandy."中的所有’a’。
  
  字符?
  意义:匹配?前面的字符0次或1次。
  例如:/e?le?/匹配"angel"中的’el’和"angle."中的’le’。
  
  字符.
  意义:(小数点)匹配除换行符外的所有单个的字符。
  例如:/.n/匹配"nay, an apple is on the tree"中的’an’和’on’,但不匹配’nay’。
  
  
  字符(x)
  意义:匹配’x’并记录匹配的值。
  例如:/(foo)/匹配和记录"foo bar."中的’foo’。匹配子串能被结果数组中的素[1], ...,[n] 返
  回,或被RegExp对象的属性, ..., 返回。
  
  字符x│y
  意义:匹配’x’或者’y’。
  例如:/green│red/匹配"green apple"中的’green’和"red apple."中的’red’。
  
  字符{ n }
  意义:这里的n是一个正整数。匹配前面的n个字符。
  例如:/a{ 2 }/不匹配"candy,"中的’a’,但匹配"caandy," 中的所有’a’和"caaandy."中前面的两个’a’。
  
  字符{ n, }
  意义:这里的n是一个正整数。匹配至少n个前面的字符。
  例如:/a{ 2, }不匹配"candy"中的’a’,但匹配"caandy"中的所有’a’和"caaaaaaandy."中的所有’a’
  
  字符{ n,m }
  意义:这里的n和m都是正整数。匹配至少n个最多m个前面的字符。
  例如:/a{ 1,3 }/不匹配"cndy"中的任何字符,但匹配 "candy,"中的’a’,"caandy," 中的前面两个
  ’a’和"caaaaaaandy"中前面的三个’a’,注意:即使"caaaaaaandy" 中有很多个’a’,但只匹配前面的三 个’a’即"aaa"。
  
  字符[xyz]
  意义:一字符列表,匹配列出中的任一字符。你可以通过连字符-指出一个字符范围。
  例如:[abcd]跟[a-c]一样。它们匹配"brisket"中的’b’和"ache"中的’c’。
  
  字符[^xyz]
  意义:一字符补集,也就是说,它匹配除了列出的字符外的所有东西。 你可以使用连字符-指出一 字符范围。
  例如:[^abc]和[^a-c]等价,它们最早匹配"brisket"中的’r’和"chop."中的’h’。
  
  字符
  意义:匹配一个空格(不要与b混淆)
  
  字符b
  意义:匹配一个单词的分界线,比如一个空格(不要与混淆)
  例如:/bnw/匹配"noonday"中的’no’,/wyb/匹配"possibly yesterday."中的’ly’。
  
  字符B
  意义:匹配一个单词的非分界线
  例如:/wBn/匹配"noonday"中的’on’,/yBw/匹配"possibly yesterday."中的’ye’。
  
  字符cX
  意义:这里的X是一个控制字符。匹配一个字符串的控制字符。
  例如:/cM/匹配一个字符串中的control-M。
  
  字符d
  意义:匹配一个数字,等价于[0-9]。
  例如:/d/或/[0-9]/匹配"B2 is the suite number."中的’2’。
  
  字符D
  意义:匹配任何的非数字,等价于[^0-9]。
  例如:/D/或/[^0-9]/匹配"B2 is the suite number."中的’B’。
  
  字符f
  意义:匹配一个表单符
  
  字符n
  意义:匹配一个换行符
  
  字符r
  意义:匹配一个回车符
  
  字符s
  意义:匹配一个单个white空格符,包括空格,tab,form feed,换行符,等价于[ fnrtv]。
  例如:/sw*/匹配"foo bar."中的’ bar’。
  
  字符S
  意义:匹配除white空格符以外的一个单个的字符,等价于[^ fnrtv]。
  例如:/S/w*匹配"foo bar."中的’foo’。
  
  字符t
  意义:匹配一个制表符
  
  字符v
  意义:匹配一个顶头制表符
  
  字符w
  意义:匹配所有的数字和字母以及下划线,等价于[A-Za-z0-9_]。
  例如:/w/匹配"apple,"中的’a’,".28,"中的’5’和"3D."中的’3’。
  
  字符W
  意义:匹配除数字、字母外及下划线外的其它字符,等价于[^A-Za-z0-9_]。
  例如:/W/或者/[^$A-Za-z0-9_]/匹配"50%."中的’%’。
  
  字符n
  意义:这里的n是一个正整数。匹配一个正则表达式的最后一个子串的n的值(计数左圆括号)。
  
  例如:/apple(,)sorange1/匹配"apple, orange, cherry, peach."中的’apple, orange’,下面有一个更加完整的例子。
  注意:如果左圆括号中的数字比n指定的数字还小,则n取下一行的八进制escape作为描述。
  
  字符ooctal和xhex
  意义:这里的ooctal是一个八进制的escape值,而xhex是一个十六进制的escape值,允许在一个正则表达式中嵌入ASCII码

2012-1-30 17:20 Monday  

因为系统不一样,所以在set_include_path的时候,分隔符是不一样的,win是; 非win是:

可以用 PATH_SEPARATOR 获得当前系统的分隔符

真实目录获取可以采用 dirname( (__FILE__) ) 获得

2012-1-30 17:17 Monday  
<?php
/**
 * Mysql数据库操作类 v2.0
 * 2009.1.22 by Aboc QQ:9986584
 * 增加文件缓存
 *
 */
class DbMysql {
    /**
     * 在数据库操作中,只对数据库操作有影响的字符做转义
     * 当此类正常后,所有数据操作 @
     */

    /*
     * 数据库连接句柄
     */
    private $_Db = NULL;

    /*
     * 是否持续连接 0.1
     */
    private $_pconnect = 0;

    /*
     * 编码
     */
    private $_charset = 'gbk';
    
    
    /*
     *最后一次插入的ID
     */
     private $_lastId = 0;

    /*
     * 默认数据库配置
     */
    private $_config = array ('dbhost' => 'localhost', 'dbuser' => 'root', 'dbpass' => 'root', 'dbname' => 'test');
    
    /**
     * 缓存路径
     */
    private $_cachePath = '';
    
    /**
     * sql语句
     *
     * @var unknown_type
     */
    private $_sql = '';

    /**
     * 初始连接数据库
     */
    function __construct($config,$pconnect=0,$cachepath='cache') {
        if (empty($config)) $config = array();
        $this->checkConfig ( $config );
        $this->_pconnect = $pconnect;
        $this->connect ();
        $this->query ( 'set names ' . $this->_charset ); //设置编码
        $this->_cachePath = $cachepath;
    }

    /**
     * 判断config变量
     *
     * @param unknown_type $config
     */
    private function checkConfig($config) {
        foreach ( $config as $key => $value ) {
            $this->_config [$key] = empty ( $value ) ? $this->_config [$key] : $value;
        }
        //return $this->_config;
    }

    /*
     * 连接数据库
     */
    private function connect() {
//        print_r($this->_config);
        if ($this->_pconnect) {
            $this->_Db = mysql_pconnect ( $this->_config ['dbhost'], $this->_config ['dbuser'], $this->_config ['dbpass'] ) or die ( '数据库连接失败' . mysql_errno () );
        } else {
            $this->_Db = mysql_connect ( $this->_config ['dbhost'], $this->_config ['dbuser'], $this->_config ['dbpass'] ) or die ( '数据库连接失败' . mysql_errno () );
        }
        if ($this->_Db != NULL) {
            mysql_select_db ( $this->_config ['dbname'], $this->_Db ) or die ( '数据库' . $this->_config ['dbname'] . '不存在' );
        }
    }

    /**
     * 将变量的单引号或双引号转义
     *
     * @param unknown_type $string
     */
    private function strtag($string1) {
            if (is_array ( $string1 )) {
                foreach ( $string1 as $key => $value ) {
                    $stringnew [$this->strtag ( $key )] = $this->strtag ( $value );
                }
            } else {
                //在此做转义,对单引号
                //TODO 好像 %也要转义吧?
                //$string = iconv("gbk","gbk",$string);
                $stringnew = mysql_real_escape_string ( $string1 );
//                $stringnew = get_magic_quotes_gpc()?$string:addslashes ( $string1 );
//                $stringnew=str_replace(array("'",'"'),array("\'",'\"'),$string1);
            }
        return $stringnew;
    }

    /**
     * 将数组转化为SQL接受的条件样式
     *
     * @param unknown_type $array
     */
    private function chageArray($array) {
        //MYSQL支持insert into joincart set session_id = 'dddd',product_id='44',number='7',jointime='456465'
        //所以更新和插入可以使用同一组数据
        $array = $this->strtag ( $array ); //转义
        $str = '';
        foreach ( $array as $key => $value ) {
            $str .= empty ( $str ) ? "`" . $key . "`='" . $value."'" : ", `" . $key . "`='" . $value."'";
        }
        return $str;
    }

    /**
     * 执行查询语句
     * @return bool
     */
    public function query($sql) {
        //echo $sql.'<br>';
        $this->_sql = $sql;
        if (! $result = mysql_query ( $sql, $this->_Db)) {
            if(UC_DBUSER == 'root'){
                echo $sql.'<br>'.mysql_error().'<br>';
                //$this->createErrorLog($sql);
                die ( '数据库出错' );
            } else {
                 $subject = date("Y-m-d H:i:s")."数据库查询出错";
                 $thisurl = str::getThisUrl();
                 $error = mysql_error();
                 $content = <<<EOT
数据库查询出错,详细如下:<br />
$thisurl <br />
$error <br />
$sql
EOT;
                 $username = '风子';
                 if (function_exists('sendMail')){
                     sendMail('9986584@qq.com',$username,$subject,$content);
                    die(':(&nbsp;数据库查询出错,已经通知管理员,请稍后重试');
                 }
            }
        } else {
            return $result;
        }
    }


    /**
     * 插入记录
     *
     */
    public function insert($table, $array) {
        if(!is_array($array))return false;
        $array = $this->strtag ( $array ); //转义
        $str = '';
        $val = '';
        foreach ($array as $key=>$value){
            $str .= ($str != '')?",`$key`":"`$key`";
            $val .= ($val != '')?",'$value'":"'$value'";
        }
        $sql = 'insert into `' . $table . '` ('.$str. ') values('.$val.')';
                //echo $sql;exit;
        if ($this->query ( $sql )) {
            $this->lastId();
            return $this->_lastId?$this->_lastId:true;
        } else {
            return false;
        }
    }
    
    
    /**
     * 替换并插入
     * @param unknown_type $table
     * @param unknown_type $array
     */
    public function replaceInsert($table, $array) {
        if(!is_array($array))return false;
        $array = $this->strtag ( $array ); //转义
        $str = '';
        $val = '';
        foreach ($array as $key=>$value){
            $str .= ($str != '')?",`$key`":"`$key`";
            $val .= ($val != '')?",'$value'":"'$value'";
        }
        $sql = 'replace into `' . $table . '` ('.$str. ') values('.$val.')';
        if ($this->query ( $sql )) {
            $this->lastId();
            return $this->_lastId?$this->_lastId:true;
        } else {
            return false;
        }
    }
    
    /**
     * 批量插入记录
     *
     * @param $table 表名  
     * @param $batchArray 批量数据 ,二维数组,健名必需相同,否则不能插入
     */
    public function insertBatch($table,$batchArray){
        if(!is_array($batchArray))return false;
        $str = '';
        $val = '';
        $vals = array();
        foreach ($batchArray as $keys=>$row){
            if(!is_array($row))return false;
            foreach ($row as $key=>$value){
                if($keys == 0)$str .= ($str != '')?",`$key`":"`$key`";
                $val .= ($val != '')?",'$value'":"'$value'";
            }
            $vals[$keys] = '('.$val.')';
            $val = '';
        }
        $vals = implode(',',$vals);
        $sql = 'insert into `' . $table . '` ('.$str. ') values '.$vals;
        if ($this->query ( $sql )) {
            $this->lastId();
            return $this->_lastId?$this->_lastId:true;
        } else {
            return false;
        }
        
    }

    /**
     * 更新记录
     *
     */
    public function update($table, $array, $where = NULL) {
        if ($where == NULL) {
            $sql = 'update `' . $table . '` set ' . $this->chageArray ( $array );
        } else {
            $sql = 'update `' . $table . '` set ' . $this->chageArray ( $array ) . ' where ' . $where;
        }
        if ($res = $this->query ( $sql )) {
            return $res;
        } else {
            return false;
        }
    }

    /**
     * 删除记录
     *
     */
    public function delete($table, $where = NULL) {
        if ($where == NULL) {
            $sql = 'delete from `' . $table . '`';
        } else {
            $sql = 'delete from `' . $table . '` where ' . $where;
        }
        if ($this->query ( $sql )) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 获取一条记录
     *
     */
    public function fetchRow($sql,$cacheTime=0,$cacheId='') {
        if($content = $this->checkCache($sql,$cacheTime,$cacheId)){
            return $content;
        } else{
            $reult = $this->query ( $sql );
            $row = mysql_fetch_assoc ( $reult );
            if(!empty($row)){
                foreach ($row as $key=>$value){
                    $row[$key] = stripslashes($value);
                }
            }
        if($cacheTime)$this->createCache($sql,$row,$cacheId);
        return $row;
        }
    }

    /**
     * 获取所有记录/用的mysql_fetch_assoc循环
     *
     */
    public function fetchAll($sql,$cacheTime=0,$cacheId='') {
        if($content = $this->checkCache($sql,$cacheTime,$cacheId)){
            return $content;
        } else{
            $result = $this->query ( $sql );
            if ($result !== false) {
                $arr = array ();
                while ( $row = mysql_fetch_assoc ( $result ) ) {
                    if(!empty($row)){
                        foreach ($row as $key=>$value){
                            $row[$key] = stripslashes($value);
                        }
                    }
                    $arr [] = $row;
                }
                if($cacheTime)$this->createCache($sql,$arr,$cacheId);
                return $arr;
            } else {
                return array();
            }
        }
    }
    
    /**
     * 获取最后一次影响的Id
     *
     */
    public function lastId() {
        $this->_lastId = mysql_insert_id ( $this->_Db );
        return $this->_lastId;
    }

    /**
     * 获取符合条件的记录数
     *
     */
    public function fetchNum($sql) {
        $reult = $this->query ( $sql );
        $num = mysql_num_rows ( $reult );
        return $num;
    }

    /**
     * 输出适合的where语句
     */
    public function quoteInto($string,$value ) {
        $value = $this->strtag($value);
        if(is_numeric($value)){
            $string = str_replace('?',$value,$string);
        }else{
            $string = str_replace('?',"'".$value."'",$string);
        }
        return $string;
    }
    
    /**
     * 数据数据库所用大小
     *
     * @param unknown_type $dbname
     * @return unknown
     */
    public function getSqlSize($dbname){
        $sql = "SHOW TABLE STATUS from $dbname";
        $rows = $this->fetchAll($sql);
        $total = 0;
        foreach ($rows as $row){
            $total +=  $row['Data_length'];
            $total +=  $row['Index_length'];
        }
        return round($total/(1024*1024),2);
    }
    
    /**
     * 判断缓存文件是否有效,如果有效,则返回缓存内容
     */
    private function checkCache($sql,$cacheTime = 0,$cacheId=''){
        //不缓存,直接返回
        return false;
        if($cacheTime == 0){
            return false;
        } else {
            $tmp = $this->createFilename($sql,$cacheId);
            if(file_exists($tmp['path'].$tmp['filename'])&&(filemtime($tmp['path'].$tmp['filename'])+$cacheTime)>time()){
                $content = file_get_contents($tmp['path'].$tmp['filename']);
                return !empty($content)?unserialize($content):array();
            } else{
                return false;
            }
        }
        
    }
    
    /**
     * 生成缓存
     */
    private function createCache($sql,$data,$cacheId=''){
        return;
        $tmp = $this->createFilename($sql,$cacheId);
        if(!is_dir($tmp['path']))@mkdir($tmp['path'],0777,true);
        @file_put_contents($tmp['path'].$tmp['filename'],serialize($data));
    }
    
    /**
     * 根据sql语句生成文件名及路径
     */
    private function createFilename($sql,$cacheId=''){
        if(!empty($cacheId))$sql = $cacheId;
        $data = array(
                    'path'    => $this->_cachePath.'sql/',
                    'filename'=> ''
                );
        if(empty($sql)) return $data;
        $tmpName = md5($sql);
        $data = array(
                    'path'    => $this->_cachePath.'sql/'.substr($tmpName,0,2).'/'.substr($tmpName,2,2).'/',
                    'filename'=> substr($tmpName,3).'.tmp'
                );
        return $data;
    }
    
    /**
     * 清除缓存
     *
     * 条件为空则清除所有缓存
     *
     * @return DbMysql
     */
    public function clearCache($sql='',$cacheId=''){
        $data = $this->createFilename($sql,$cacheId);
        $times = time();
        if(!empty($sql) || !empty($cacheId)){
            if(!empty($data['filename'])){
                $path1= $data['path'].$data['filename'];
                if(file_exists($path1) && filemtime($path1)<$times)@unlink($path1);
            }            
        }
        //清除所有缓存
        else{
            $this->clearFile($this->_cachePath,$times);
        }
        return true;
    }

    /**
     * 遍历删除文件及目录
     */
    private function clearFile($cachePath,$times){
        $list = scandir($cachePath);
        foreach ($list as $key1=>$row1){
            if($key1<=1)continue;
            $path1 = $cachePath.'/'.$row1;
            if(is_dir($path1)){
                $this->clearFile($path1,$times);            
                //rmdir($path1);                
            } else {
                if(file_exists($path1) && filemtime($path1)<$times)@unlink($path1);
            }        
        }    
    }

    /**
     * 写错误日志
     *
     * @param unknown_type $log
     */
    private function createErrorLog($sql){
        $log = array(
                    date("Y-m-d H:i:s"),
                    str::getThisUrl(),
                    $sql,
                    mysql_error ()
                );                
        $log = implode(' - ',$log)."\r\n";
        $filename = $this->_cachePath.'error/'.date("Y-m").'.txt';
        if(!$fp = fopen($filename,'a+')){
            echo '错误日志打开失败,请联络QQ:9986584';
        }
        if( fwrite($fp,$log) === FALSE ){
            echo '错误日志写入失败,请联络QQ:9986584';
        }
        fclose($fp);        
    }
    
    /**
     * 获取最后一次执行的sql语句
     *
     */
    public function getLastSql(){
        return $this->_sql;
    }
        
        /**
         * 获取数据库中所有的表
         * @param type $dbname
         * @return type
         */
        function fetchAllTable($dbname=''){
            $dbname = !empty($dbname)?$dbname:$this->_config['dbname'];
            $list = array();
            $result = mysql_list_tables($dbname);
            if($result){
                while ($row = mysql_fetch_row($result)){
                    $list[] = $row[0];
                }
                return $list;
            }
            else
                return array();
        }
        
        /**
         * 获取最后一次影响的记录数
         * @return type
         */
        function fetchChangeRow(){
            return  mysql_affected_rows();
        }
    

    /**
     * 释放查询结果
     */
    private function free() {
        mysql_free_result($this->_Db);
    }

    /**
     *
     */
    function __destruct() {
//        $this->free();
    }
}

?>

2012-1-30 11:38 Monday  

今天在想办法在windows下怎么来获得唯一标识一台服务器的方法,很多人都 知道,一台电脑可以唯一标识的是网卡的物理地址,可以很多了讨论过了没看了有什么结果可以取到它。我们首先找到win32API这个扩展,它最初是用来允 许从 PHP 中访问 Win32 API。但是很遗憾查到php手册“(4.2.0 - 4.2.3 only)”,我们现在的版本远比这个高,无法使用这个扩展只好放弃。后来查看phpinfo,找到环境变量可以用$_ENV获得,一台电脑的环境变量一 般不可以所有都一样,所以得到结果:一些可以标识计算机特点的变量组合就可以用一唯一标识一台电脑。 如:_ENV["PROCESSOR_IDENTIFIER"]处理器标识符,_ENV["PROCESSOR_REVISION"]处理器修定版 号,_ENV["AP_PARENT_PID"],_ENV["COMPUTERNAME"]计算机名。

_ENV[”PROCESSOR_REVISION”] 0401
_ENV[”ProgramFiles”] C:\Program Files
_ENV[”SystemDrive”] C:
_ENV[”SystemRoot”] C:\WINDOWS
_ENV[”TEMP”] d:\
_ENV[”TMP”] d:\
_ENV[”USERPROFILE”] C:\Documents and Settings\Default User
_ENV[”windir”] C:\WINDOWS
Ruby的ENV变量讲解
可以取得CPU数量,用户名,OS系统等相关信息。

1)所有用户的简报:ENV['ALLUSERSPROFILE']
2)应用程序数据:ENV['APPDATA']
3)ICONV路径:ENV['APR_ICONV_PATH']
4)客户端名称:ENV['CLIENTNAME']
5)通用程序文件:ENV['CommonProgramFiles']
6)计算机名:ENV['COMPUTERNAME']
7)指定命令行:ENV['ComSpec']
8)FP_NO_HOST_CHECK: ENV['FP_NO_HOST_CHECK']
9)主驱动:ENV['HOMEDRIVE']
10)主目录: ENV['HOMEPATH']
11)登陆的服务器:ENV['LOGONSERVER']
12)系统的CPU数量:ENV['NUMBER_OF_PROCESSORS']
13)系统的操作系统:ENV['OS']
14)系统的路径:ENV['PATH']
15)系统的路径执行扩展名顺序:ENV['PATHEXT']
16)CPU架构:ENV['PROCESSOR_ARCHITECTURE']
17)CPU的身份ID: ENV['PROCESSOR_IDENTIFIER']
18)CPU的级别: ENV['PROCESSOR_LEVEL']
19)CPU的版本:ENV['PROCESSOR_REVISION']
20)程序文件目录: ENV['ProgramFiles']
21)提示符号: ENV['PROMPT']
22)RUBY选项: ENV['RUBYOPT']

2012-1-30 11:36 Monday  
<?php
//第一个
;
$patterns = "/\.[a-zA-Z0-9]{3,4}/i";
$abc = preg_replace($patterns,"",$abc);
echo $abc."<br>";
//第二个
$abc = "asdflkjlkasd.jpgaaaa";
$abc = pathinfo($abc);
print_r($abc);
echo "<br>";
//第三个
$abc = "asdflkjlkasd.jpgaaaa";
echo strrchr($abc, ".")."<br>";
echo substr(strrchr($abc, "."), 1)."<br>";
//第四个
$abc = "asdflkjlkasd.jpg";
$patterns = "/\.([a-zA-Z0-9]{3,4})$/i";

if(preg_match($patterns,$abc,$ms)){
print_r($ms);
}
echo "<br>";
//第五个
$abc = "asdflkjlkasd.jpg";
$ps=split("\.",$abc);
$abc=$ps[count($ps)-1];
echo $abc."\n";

//第六个
$abc = "asdflkjlkasd.jpg";
$p = '/\.[a-z0-9]+$/i';
preg_match_all($p, $abc, $result);
print_r($result[0][0]);
?>
结果
第一个:
asdflkjlkasd
第二个:

Array (
[dirname] => .
[basename] => asdflkjlkasd.jpgaaaa
[extension] => jpgaaaa
[filename] => asdflkjlkasd
)
第三个:
.jpgaaaa
jpgaaaa
第四个:

Array ( [0] => .jpg [1] => jpg )
第五个:
jpg
$abc = "asdflkjlkasd.jpg"
2012-1-30 11:33 Monday  
<?php

/*

    author:流水孟春

*/
require_once('./FCKeditor/fckeditor.php');
require_once('./Smarty/Smarty.class.php'); //载入Smarty

$smarty = new Smarty();
/* Smarty配置 */
$smarty->template_dir = "./templates/default";
$smarty->compile_dir = "./templates/compiled"; //

$smarty->config_dir = "./templates/configs"; //

$smarty->cache_dir = "./caches";
$smarty->left_delimiter = '{';
$smarty->right_delimiter = '/}';


createEditor('FCKeditor1');
$smarty->display('editor.htm');

/**
* 生成编辑器
* @param string inputName 输入框名称
* @param string inputValue 输入框值
* @param string height 高
* @param string toolbarSet 工具条设置
*/
function createEditor($inputName, $inputValue = '',$height='320',$toolbarSet='Default'){
    $editor = new FCKeditor($inputName) ;
    $editor->BasePath = "../libs/editor/";
    $editor->ToolbarSet = "Default";
    $editor->Width = "100%";
    $editor->Height = $height;
    $editor->Value = $inputValue;
    $GLOBALS['smarty']->assign("editor", $editor->CreateHtml());
}

?>


editor.htm的内容:
{$editor/}

2012-1-30 11:32 Monday  

require_once 'Zend/Db.php';
require_once 'Zend/Db/Table.php';
$params = array ('host'     => 'localhost',
                 'username' => 'root',
                 'password' => 'yourpassword',
                 'dbname'   => 'yourdbname');
$db = Zend_Db::factory('PDO_MYSQL', $params);
$db->query('set names utf8');
Zend_Db_Table::setDefaultAdapter($db);
class ContentTable extends Zend_Db_Table {
protected $_name = 'jos_content';
}
$table = new ContentTable();
$rowset = $table->fetchAll(null, 'id ASC', 10, 0);
$title = '';
foreach ($rowset as $row) {  
   $title.=$row->title;
}

注意这一行:$db->query('set names utf8');
因为数据库的默认字符集是是utf8 ,所以这一行是必须的,否则你读出来的中文就成了乱码了。