Heim >Backend-Entwicklung >PHP-Tutorial >专为新手写的结合smarty的类_php技巧

专为新手写的结合smarty的类_php技巧

PHP中文网
PHP中文网Original
2016-05-17 09:43:26871Durchsuche

专为新手写的结合smarty的类,诚挚邀请大家多提宝贵意见
这个是为新手(也为自己)写的结合smarty一起使用的类,是未完成的,现在放出来的目的不是马上让新手使用,所以也没有把注解写的非常详细
希望各位高手多多提意见,我尽量完善它。
    首先声明,我写这个的目的也是为了锻炼自己,尽管我知道现在已经有很多类似的类了,但是我还是决定来写一个,
所以请大家在浏览的时候口下留情。

还有文件我也已经打包上传了,放在下面,请大家多多下载,多多提意见。有什么问题直接Q我

目前该类包括以下功能(使用范例,设$m = new Machine_m())
[数据库]
目前支持MYSQL与ACCESS两种数据库
配置参考config.php文件
使用:$m->send_query(SQL语句)//
$m->select_query(SQL语句,是否返回资源,默认为false即返回一个二维数组)

[错误处理]
分为系统错误和用户错误
系统错误:
$this->sys_err( '配置错误,请检查config配置文件', 'die');
第一个参数将记录错误信息到/lib/error/system.err中,第二个参数是处理方法(keep or die),如果需要修改浏览器端提示的话,还可以设置第三个参数,它默认为“很抱歉,本站发生系统错误,请稍候再试。”
用户错误:
$m->user_err( '注册系统关闭', 'die', $_SERVER['HTTP_REFERER'] );
第一个参数是显示到浏览器端的提示,第二个参数是处理方法(keep or die),第三个参数是跳转页面,如果需要记录错误信息的话,还可以设置第四个参数,它将记录错误信息
到/lib/error/user.err中,不设默认不保存。

浏览器端的错误提示默认调用/lib/error/下的err_page.htm模版文件,也可以设置自己的错误模版文件,然后用$m->err_page=加载。

[静态生成]
只用短短一行就自动生成静态页面,跳转时可设置静态页面过期时间
(现在还是不完全的静态,完全的比较复杂,目前没有整合,大家如果要实现完全静态的话,可以结合我的create_html函数和文本操作系列函数实现)
使用方法:
$m->create_html(模版文件,静态输出路径,输出的文件名);
跳转:
$m->goto_html();
输出文件名默认等于当前php文件的文件名,提供这个参数目的是,当有需要使用静态分页时,可以用这个参数设置

[二维数组排序 (推荐)]
可以让二维数组作类似:“先按字段a升序,再按字段b降序”这样的排序
使用方法:
设有这样一个数组:$x = array( array('name'=>'machine_马', 'age'=>23),array('name'=>'tom',age=>28),…… )
我们现在要把此此数组先按name升序排,再按age降序排
则用法为m_sort($x,'name',SORT_ASC,'age',SORT_DESC)

[动态加载]
对于不常用的功能,我采用加载的方法来使用,个人认为这样可以节约资源
例如,如果我们要使用m_sort函数时,默认是没有加载这个函数的
需要这样加载:$m->load_func('m_sort')
然后就可以使用m_sort函数了

[分页]
这里我也不知道做得好不好,我是先写了一个类,再写一个函数来调它,目的是使用得时候比较方便
使用方法:m_page(数据条数,当前页号,每页多少行,显示多少个跳转链接)
函数返回一个数组:array(
  'rows' => 每页显示多少行,
  'prve' => 上一大页页号,//所谓大页,就是类似上7页,下7页这样的跳转
  'next' => 下一大页页号,
  'pages' => 共有多少页,
  'start' => SQL查询的开始记录数,
  'count' => 共有多少条记录,
  'links' => 链接页号,//如果共有13页,链接数是7个,当前又在第二大页,则输出array(8,9,10,11,12,13)
  'current_page' => 当前页号
  );

[验证表单]
把需要验证的表单事先写进函数类,判别的时候只需要把$_POST传入就可以了
使用方法:这个大家自己看函数就应该看得明白,这个函数需要大家按照自己的需求来修改的

[防止跨站攻击]
把这个功能也写道一个函数内了

[中文截取函数]
不是我写的,拿来修改了一下而已

[上传文件]
m_up_file($_FILES,上传路径,文件类型,大小限制)
其中上传路径可以这样设置,1:直接写文件夹路径,2:array('gif'=>'file/gif','jpg'=>'file=>jpg'),这样gif文件自动放入file/gif文件夹,jpg文件放入file/jpg文件夹
文件类型:写法1:'jpg',写法2:array('jpg','jpeg','gif')
返回array( 'arr' => 已上传的文件数组, 'err_msg' => 上传过程中的错误信息, 'num' => 上传成功数 )

[文本操作 (推荐)]
假设有这样一个字符串 $str="你好phpchina";
我们可以这样修改 $new_str=m_txt_replace('content','machine_马',$str);
现在$new_str的值为"你好machine_马"
其他的几个函数,如:m_txt_add,m_txt_delete,m_txt_get都是类似的,大家可以自行参看。

注意:这个就是生成静态页面之后,修改的方法。
可以参见6to23并思考为什么他一篇帖子放了那么多回帖速度还那么快
答:因为它的回帖没有进数据库而是直接写到静态文件里面,再使用类似我上面的方法来修改的。你可以看他的源代码,找找"; 
    $pattern_end =  ""; 
    @$ok = preg_match( "{{$pattern_start}.*{$pattern_end}}Ssi", $content, $match ); 
    if ( $ok != true ) 
    { 
        return false; 
    } 
    $replace = "{$pattern_start}{$text}{$pattern_end}"; 
    $new_content = str_replace( $match[0], $replace, $content ); 
    return $new_content; 


// 追加 
function m_txt_add( $pattern, $text, $content ) 

    $pattern = ""; 
    @$ok = preg_match( "{{$pattern}}Ssi", $content ); 
    if ( $ok != true ) 
    { 
        return false; 
    } 
    $add = "{$pattern}\n{$text}"; 
    $new_content = str_replace( $pattern, $add, $content ); 
    return $new_content; 


// 删除 
function m_txt_delete( $pattern, $content ) 

    $pattern_start =  ""; 
    $pattern_end =  ""; 
    @$ok = preg_match( "{{$pattern_start}.*{$pattern_end}}Ssi", $content, $match ); 
    if ( $ok != true ) 
    { 
        return false; 
    } 
    $new_content = str_replace( $match[0], '', $content ); 
    return $new_content; 


//获取 
function m_txt_get( $pattern, $content ) 

    $pattern_start =  ""; 
    $pattern_end =  ""; 
    @$ok = preg_match( "{{$pattern_start}.*{$pattern_end}}Ssi", $content, $match ); 
    if ( $ok != true ) 
    { 
        return false; 
    } 
    return $match[0]; 

?>  

// 上传函数
function m_up_file( $files, $up_url, $type, $max_size = 2097152 )
{
$i = 0;
if ( !is_array( $files ) )
{
die( '参数传递错误' );
}
$type_pattern = is_array( $type ) ? '\.(' . implode( ')|(', $type ) . ')' : "\.({$type})";
foreach ( $files as $key => $arr ) 
    { 
        $ok = false; 
        if( $arr['error'] == 0 ) 
        { 
            if ( !is_uploaded_file( $arr['tmp_name'] ) ) 
            { 
                $err_msg .= "文件:{$arr['name']}不可上传
"; 
                continue; 
            } 
            elseif ( $_FILES['up_file']['size'] > $max_size ) 
            { 
                $err_msg .= "文件:{$arr['name']}上传失败,原因是:文件超过限定大小
"; 
                continue; 
            } 
            elseif ( !preg_match( "!{$type_pattern}!Si", $arr['name'] ) ) 
            { 
                $err_msg .= "文件{$arr['name']}上传失败,原因是:格式不正确
"; 
                continue; 
            } 
            else 
            { 
                $txt = substr( str_shuffle( 'abcdefghijklmnopqrstuvwxyz' ), -4 ); 
                $hz = strtolower( strstr( $arr['name'], '.' ) ); 
                $new_name = date( 'YmdHis' ) . $txt . $hz; 
                if ( !is_array( $up_url ) ) 
                { 
                    !preg_match( '!\/$!', $up_url ) ? $up_url .= '/' : true; 
                    $new_url = $up_url . $new_name; 
                } 
                else 
                { 
                    $key = str_replace( '.', '', $hz ); 
                    $up_url = array_change_key_case( $up_url, CASE_LOWER ); 
                    !preg_match( '!\/$!', $up_url[$key] ) ? $up_url[$key] .= '/' : true; 
                    $new_url = $up_url[$key] . $new_name; 
                } 
                @$ok = move_uploaded_file( $arr['tmp_name'], THIS_DIR . $new_url ); 
            } 
        } 
        if ( $ok == true ) 
        { 
            $rs[$i]['url'] = $new_url; 
            $rs[$i]['name'] = $arr['name']; 
            $rs[$i]['type'] = strtoupper( str_replace( '.', '', $hz ) ); 
            $i++; 
        } 
        elseif( !empty($arr['name']) ) 
        { 
            $err_msg .= "文件{$arr['name']}上传出错
"; 
            continue; 
        } 
    } 
    return array( 'arr' => $rs, 'err_msg' => $err_msg, 'num' => $i ); 

?>  

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn