mb_check_encoding 检查字符串在指定的编码里是否有效

 更新时间:2016年11月25日 16:46  点击:1868
本文章来给大家介绍一个函数mb_check_encoding功能是检查字符串在指定的编码里是否有效。

明:bool mb_check_encoding ([ string $var = NULL [, string $encoding = mb_internal_encoding() ]] )
检查指定的字节流在指定的编码里是否有效。它能有效避免所谓的“无效编码攻击(Invalid Encoding Attack)”。

参数
var
要检查的字节流。如果省略了这个参数,此函数会检查所有来自最初请求所有的输入。

encoding

期望的编码。

返回值
成功时返回 TRUE, 或者在失败时返回 FALSE。


为了检查是否一个字符串编码正确在utf - 8中,我建议以下函数实现 mb_check_encoding():

 代码如下 复制代码


<?php
function check_utf8($str) {
    $len = strlen($str);
    for($i = 0; $i < $len; $i++){
        $c = ord($str[$i]);
        if ($c > 128) {
            if (($c > 247)) return false;
            elseif ($c > 239) $bytes = 4;
            elseif ($c > 223) $bytes = 3;
            elseif ($c > 191) $bytes = 2;
            else return false;
            if (($i + $bytes) > $len) return false;
            while ($bytes > 1) {
                $i++;
                $b = ord($str[$i]);
                if ($b < 128 || $b > 191) return false;
                $bytes--;
            }
        }
    }
    return true;
} // end of check_utf8
?>

在php中日期时间处理函数常用的有date(),time(),strtotime()这三个函数了,下面我来给大家简单的介绍一下这个函数在php日期时间中处理的一些实例吧。

php 时间一般都采用大整数的是形式存储和调用。 time() 函数返回当前时间的 Unix 时间戳。

定义和用法

time() 函数返回当前时间的 Unix 时间戳。

语法

time(void)参数 描述
void 可选。

说明
返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。

 代码如下 复制代码

<?php

$t=time();

$nextWeek = time() + (7 * 24 * 60 * 60); // 7 days; 24 hours; 60 mins; 60secs

echo $t;

echo $nextWeek;

?>

定义和用法

strtotime() 函数将任何英文文本的日期时间描述解析为 Unix 时间戳。

语法

strtotime(time,now)

strtotime(time,now) 函数将任何英文文本的日期时间描述解析为 Unix 时间戳。

 代码如下 复制代码

<?php

echo(strtotime("now"));

echo(strtotime("3 October 2005"));

echo(strtotime("+5 hours"));

echo(strtotime("+1 week"));

echo(strtotime("+1 week 3 days 7 hours 5 seconds"));

echo(strtotime("next Monday"));

echo(strtotime("last Sunday"));

?>

date(format,timestamp)函数可把时间戳格式化为可读性更好的日期和时间。

d - 月中的天 (01-31)
m - 当前月,以数字计 (01-12)
Y - 当前的年(四位数)

 代码如下 复制代码

<?php

echo date("Y/m/d");

echo "<br />";

echo date("Y.m.d");

echo "<br />";

echo date("Y-m-d");

echo date('Y年m月d日',time());

?>

理解上面三个函数,就可以很好地在php中操作日期了。

date()函数

用函式 date() 实现

显示的格式: 年-月-日 小时:分钟:秒
相关时间参数:
a - "am" 或是 "pm"
A - "AM" 或是 "PM"
d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31"
D - 星期几,三个英文字母; 如: "Fri"
F - 月份,英文全名; 如: "January"
h - 12 小时制的小时; 如: "01" 至 "12"
H - 24 小时制的小时; 如: "00" 至 "23"
g - 12 小时制的小时,不足二位不补零; 如: "1" 至 12"
G - 24 小时制的小时,不足二位不补零; 如: "0" 至 "23"
i - 分钟; 如: "00" 至 "59"
j - 几日,二位数字,若不足二位不补零; 如: "1" 至 "31"
l - 星期几,英文全名; 如: "Friday"
m - 月份,二位数字,若不足二位则在前面补零; 如: "01" 至 "12"
n - 月份,二位数字,若不足二位则不补零; 如: "1" 至 "12"
M - 月份,三个英文字母; 如: "Jan"
s - 秒; 如: "00" 至 "59"
S - 字尾加英文序数,二个英文字母; 如: "th","nd"
t - 指定月份的天数; 如: "28" 至 "31"
U - 总秒数
w - 数字型的星期几,如: "0" (星期日) 至 "6" (星期六)
Y - 年,四位数字; 如: "1999"
y - 年,二位数字; 如: "99"
z - 一年中的第几天; 如: "0" 至 "365"

本文章来给大家整理了大量的php字符串与字符处理函数,这些算法都是高效的,包括有:数组里查找某个元素,线性表的删除,复制字符串,删除字符串,截取字符串等等操作。

以下是代码片段:

 代码如下 复制代码

<?   

//--------------------   

// 基本数据结构算法  

//--------------------   

//二分查找(数组里查找某个元素)   

function bin_sch($array,  $low, $high, $k){    

    if ( $low <= $high){    

        $mid =  intval(($low+$high)/2 );    

        if ($array[$mid] ==  $k){    

            return $mid;    

        }elseif ( $k < $array[$mid]){    

            return  bin_sch($array, $low,  $mid-1, $k);    

        }else{    

            return  bin_sch($array, $mid+ 1, $high, $k);    

        }    

    }    

    return -1;    

}    

//顺序查找(数组里查找某个元素)   

function  seq_sch($array, $n,  $k){    

    $array[$n] =  $k;    

    for($i=0;  $i<$n; $i++){    

        if( $array[$i]==$k){    

            break;    

        }    

    }    

    if ($i<$n){    

        return  $i;    

    }else{    

        return -1;    

    }    

}    

//线性表的删除(数组中实现)   

function delete_array_element($array , $i)   

{   

        $len =  count($array);    

        for ($j= $i; $j<$len; $j ++){   

                $array[$j] = $array [$j+1];   

        }   

        array_pop ($array);   

        return $array ;   

}   

//冒泡排序(数组排序)   

function bubble_sort( $array)   

{   

        $count = count( $array);   

        if ($count <= 0 ) return false;   

        for($i=0 ; $i<$count; $i ++){   

                for($j=$count-1 ; $j>$i; $j--){   

                        if ($array[$j] < $array [$j-1]){   

                                 $tmp = $array[$j];   

                                 $array[$j] = $array[ $j-1];   

                                $array [$j-1] = $tmp;   

                        }   

                }   

        }   

        return $array;   

}   

//快速排序(数组排序)   

function quick_sort($array ) {   

        if (count($array) <= 1) return  $array;   

        $key = $array [0];   

        $left_arr  = array();   

        $right_arr = array();   

        for ($i= 1; $i<count($array ); $i++){   

                if ($array[ $i] <= $key)   

                        $left_arr [] = $array[$i];   

                else  

                         $right_arr[] = $array[$i ];   

        }   

        $left_arr = quick_sort($left_arr );   

        $right_arr = quick_sort( $right_arr);   

        return array_merge($left_arr , array($key), $right_arr);   

}   

  

//------------------------   

// PHP内置字符串函数实现   

//------------------------   

//字符串长度   

function strlen ($str)   

{   

        if ($str == '' ) return 0;   

        $count =  0;   

        while (1){   

                if ( $str[$count] != NULL){   

                         $count++;   

                        continue;   

                }else{   

                        break;   

                }   

        }   

        return $count;   

}   

//截取子串   

function substr($str, $start,  $length=NULL)   

{   

        if ($str== '' || $start>strlen($str )) return;   

        if (($length!=NULL) && ( $start>0) && ($length> strlen($str)-$start)) return;   

        if (( $length!=NULL) && ($start< 0) && ($length>strlen($str )+$start)) return;   

        if ($length ==  NULL) $length = (strlen($str ) - $start);   

            

        if ($start <  0){   

                for ($i=(strlen( $str)+$start); $i<(strlen ($str)+$start+$length ); $i++) {   

                        $substr .=  $str[$i];   

                }   

        }   

        if ($length  > 0){   

                for ($i= $start; $i<($start+$length ); $i++) {   

                        $substr  .= $str[$i];   

                }   

        }   

        if ( $length < 0){   

                for ($i =$start; $i<(strlen( $str)+$length); $i++) {   

                        $substr .= $str[$i ];   

                }   

        }   

        return $substr;   

}   

//字符串翻转   

function strrev($str)   

{   

        if ($str == '') return 0 ;   

        for ($i=(strlen($str)- 1); $i>=0; $i --){   

                $rev_str .= $str[$i ];   

        }   

        return $rev_str;   

}   

  

//字符串比较   

function strcmp($s1,  $s2)   

{   

        if (strlen($s1) <  strlen($s2)) return -1 ;   

        if (strlen($s1) > strlen( $s2)) return 1;   

        for ($i =0; $i<strlen($s1 ); $i++){   

                if ($s1[ $i] == $s2[$i]){   

                        continue;   

                }else{   

                        return false;   

                }   

        }   

        return  0;   

}   

  

//查找字符串   

function  strstr($str, $substr)   

{   

         $m = strlen($str);   

        $n = strlen($substr );   

        if ($m < $n) return false ;   

        for ($i=0; $i <=($m-$n+1); $i ++){   

                $sub = substr( $str, $i, $n);   

                if ( strcmp($sub, $substr) ==  0)  return $i;   

        }   

        return false ;   

}   

//字符串替换   

function str_replace($substr , $newsubstr, $str)   

{   

         $m = strlen($str);   

        $n = strlen($substr );   

        $x = strlen($newsubstr );   

        if (strchr($str, $substr ) == false) return false;   

        for ( $i=0; $i<=($m- $n+1); $i++){   

                 $i = strchr($str,  $substr);   

                $str = str_delete ($str, $i, $n);   

                $str = str_insert($str,  $i, $newstr);   

        }   

        return $str ;   

}   

  

//--------------------   

// 自实现字符串处理函数  

//--------------------   

//插入一段字符串   

function str_insert($str, $i , $substr)   

{   

        for($j=0 ; $j<$i; $j ++){   

                $startstr .= $str[$j ];   

        }   

        for ($j=$i; $j <strlen($str); $j ++){   

                $laststr .= $str[$j ];   

        }   

        $str = ($startstr . $substr  . $laststr);   

        return $str ;   

}   

//删除一段字符串   

function str_delete($str , $i, $j)   

{   

        for ( $c=0; $c<$i;  $c++){   

                $startstr .= $str [$c];   

        }   

        for ($c=( $i+$j); $c<strlen ($str); $c++){   

                $laststr  .= $str[$c];   

        }   

         $str = ($startstr . $laststr );   

        return $str;   

}   

//复制字符串   

function strcpy($s1, $s2 )   

{   

        if (strlen($s1)==NULL || !isset( $s2)) return;   

        for ($i=0 ; $i<strlen($s1);  $i++){   

                $s2[] = $s1 [$i];   

        }   

        return $s2;   

}   

//连接字符串   

function strcat($s1 , $s2)   

{   

        if (!isset($s1) || !isset( $s2)) return;   

        $newstr = $s1 ;   

        for($i=0; $i <count($s); $i ++){   

                $newstr .= $st[$i ];   

        }   

        return $newsstr;   

}   

//简单编码函数(与php_decode函数对应)   

function php_encode($str)   

{   

        if ( $str=='' && strlen( $str)>128) return false;   

        for( $i=0; $i<strlen ($str); $i++){   

                 $c = ord($str[$i ]);   

                if ($c>31 && $c <107) $c += 20 ;   

                if ($c>106 && $c <127) $c -= 75 ;   

                $word = chr($c );   

                $s .= $word;   

        }    

        return $s;    

}   

//简单解码函数(与php_encode函数对应)   

function php_decode($str)   

{   

        if ( $str=='' && strlen($str )>128) return false;   

        for( $i=0; $i<strlen ($str); $i++){   

                $c  = ord($word);   

                if ( $c>106 && $c<127 ) $c = $c-20;   

                if ($c>31 && $c< 107) $c = $c+75 ;   

                $word = chr( $c);   

                $s .= $word ;   

        }    

        return $s;    

}   

//简单加密函数(与php_decrypt函数对应)   

function php_encrypt($str)   

{   

         $encrypt_key = 'abcdefghijklmnopqrstuvwxyz1234567890';   

         $decrypt_key = 'ngzqtcobmuhelkpdawxfyivrsj2468021359';   

        if ( strlen($str) == 0) return  false;   

        for ($i=0;  $i<strlen($str); $i ++){   

                for ($j=0; $j <strlen($encrypt_key); $j ++){   

                        if ($str[$i] == $encrypt_key [$j]){   

                                $enstr .=  $decrypt_key[$j];   

                                break;   

                        }   

                }   

        }   

        return $enstr;   

}   

//简单解密函数(与php_encrypt函数对应)   

function php_decrypt($str)   

{   

         $encrypt_key = 'abcdefghijklmnopqrstuvwxyz1234567890';   

         $decrypt_key = 'ngzqtcobmuhelkpdawxfyivrsj2468021359';   

        if ( strlen($str) == 0) return  false;   

        for ($i=0;  $i<strlen($str); $i ++){   

                for ($j=0; $j <strlen($decrypt_key); $j ++){   

                        if ($str[$i] == $decrypt_key [$j]){   

                                $enstr .=  $encrypt_key[$j];   

                                break;   

                        }   

                }   

        }   

        return $enstr;   

}   

?>  

php字符串处理函数大全
addcslashes — 为字符串里面的部分字符添加反斜线转义字符
addslashes — 用指定的方式对字符串里面的字符进行转义
bin2hex — 将二进制数据转换成十六进制表示
chop — rtrim() 的别名函数
chr — 返回一个字符的ASCII码
chunk_split — 按一定的字符长度将字符串分割成小块
convert_cyr_string — 将斯拉夫语字符转换为别的字符
convert_uudecode — 解密一个字符串
convert_uuencode — 加密一个字符串
count_chars — 返回一个字符串里面的字符使用信息
crc32 — 计算一个字符串的crc32多项式
crypt — 单向散列加密函数
echo — 用以显示一些内容
explode — 将一个字符串用分割符转变为一数组形式
fprintf — 按照要求对数据进行返回,并直接写入文档流
get_html_translation_table — 返回可以转换的HTML实体
hebrev — 将Hebrew编码的字符串转换为可视的文本
hebrevc — 将Hebrew编码的字符串转换为可视的文本
html_entity_decode — htmlentities ()函数的反函数,将HTML实体转换为字符
htmlentities — 将字符串中一些字符转换为HTML实体
htmlspecialchars_decode —htmlspecialchars()函数的反函数,将HTML实体转换为字符
htmlspecialchars — 将字符串中一些字符转换为HTML实体
implode — 将数组用特定的分割符转变为字符串
join — 将数组转变为字符串,implode()函数的别名
levenshtein — 计算两个词的差别大小
localeconv — 获取数字相关的格式定义
ltrim — 去除字符串左侧的空白或者指定的字符
md5_file — 将一个文件进行MD5算法加密
md5 — 将一个字符串进行MD5算法加密
metaphone — 判断一个字符串的发音规则
money_format — 按照参数对数字进行格式化的输出
nl_langinfo — 查询语言和本地信息
nl2br — 将字符串中的换行符“n”替换成“<br/>”
number_format — 按照参数对数字进行格式化的输出
ord — 将一个ASCII码转换为一个字符
parse_str — 把一定格式的字符串转变为变量和值
print — 用以输出一个单独的值
printf — 按照要求对数据进行显示
quoted_printable_decode — 将一个字符串加密为一个8位的二进制字符串
quotemeta — 对若干个特定字符进行转义
rtrim — 去除字符串右侧的空白或者指定的字符
setlocale — 设置关于数字,日期等等的本地格式
sha1_file — 将一个文件进行SHA1算法加密
sha1 — 将一个字符串进行SHA1算法加密
similar_text — 比较两个字符串,返回系统认为的相似字符个数
soundex — 判断一个字符串的发音规则
sprintf — 按照要求对数据进行返回,但是不输出
sscanf — 可以对字符串进行格式化
str_ireplace — 像str_replace()函数一样匹配和替换字符串,但是不区分大小写
str_pad — 对字符串进行两侧的补白
str_repeat — 对字符串进行重复组合
str_replace — 匹配和替换字符串
str_rot13 — 将字符串进行ROT13加密处理
str_shuffle — 对一个字符串里面的字符进行随机排序
str_split — 将一个字符串按照字符间距分割为一个数组
str_word_count — 获取字符串里面的英文单词信息
strcasecmp — 对字符串进行大小比较,不区分大小写
strchr — 通过比较返回一个字符串的部分strstr()函数的别名
strcmp — 对字符串进行大小比较
strcoll – 根据本地设置对字符串进行大小比较
strcspn — 返回字符连续非匹配长度的值
strip_tags — 去除一个字符串里面的HTML和PHP代码
stripcslashes — 反转义addcslashes()函数转义处理过的字符串
stripos — 查找并返回首个匹配项的位置,匹配不区分大小写
stripslashes — 反转义addslashes()函数转义处理过的字符串
stristr — 通过比较返回一个字符串的部分,比较时不区分大小写
strlen — 获取一个字符串的编码长度
strnatcasecmp — 使用自然排序法对字符串进行大小比较,不区分大小写
strnatcmp — 使用自然排序法对字符串进行大小比较
strncasecmp — 对字符串的前N个字符进行大小比较,不区分大小写
strncmp — 对字符串的前N个字符进行大小比较
strpbrk — 通过比较返回一个字符串的部分
strpos — 查找并返回首个匹配项的位置
strrchr — 通过从后往前比较返回一个字符串的部分
strrev — 将字符串里面的所有字母反向排列
strripos — 从后往前查找并返回首个匹配项的位置,匹配不区分大小写
strrpos – 从后往前查找并返回首个匹配项的位置
strspn — 匹配并返回字符连续出现长度的值
strstr — 通过比较返回一个字符串的部分
strtok — 用指定的若干个字符来分割字符串
strtolower — 将字符串转变为小写
strtoupper –将字符串转变为大写
strtr — 对字符串比较替换
substr_compare — 对字符串进行截取后的比较
substr_count — 计算字符串中某字符段的出现次数
substr_replace — 对字符串中的部分字符进行替换
substr — 对字符串进行截取
trim — 去除字符串两边的空白或者指定的字符
ucfirst — 将所给字符串的第一个字母转换为大写
ucwords — 将所给字符串的每一个英文单词的第一个字母变成大写
vfprintf — 按照要求对数据进行返回,并直接写入文档流
vprintf — 按照要求对数据进行显示
vsprintf — 按照要求对数据进行返回,但是不输出
wordwrap — 按照一定的字符长度分割字符串

使用dedecms的朋友可能会自己dedecms会记录程序执行错误文件和注入sql到一个日志文件中去,下面我来介绍在php中的一个error_log()将错误信息写入日志文件实例,希望此方法对大家有帮助。

error_log() 是发送错误信息到某个地方的一个函数,在程序编程中比较常见,尤其是在程序调试阶段。

本文将用实例讲解一下error_log()这个函数的用法,以及一些需要注意的问题。

 代码如下 复制代码

<?php 

 $str='这是条错误信息。'; 

 error_log($str,3,'errors.log'); 

 ?>

上述是最常用的error_log()例子,它的作用是把一条信息写入errors.log这个文件里,这个文件如果不存在则自动创建。在这个例子中,我们看到有一个参数“3”,注意这个数字“3”不能更改也不能去掉。

下面列举一下使用error_log()这个函数的过程中可能出现的问题:

(1)程序报错提示:Warning: error_log() [function.error-log]: failed to open stream: Permission denied in ...on line ...

上述错误的出现,是因为文件没有写权限,开启该目录的文件写权限即可。

(3)写入到log文件中的信息不能换行

使用error_log()写入log文件,会发现文字是没有换行的,可以对以上代码做如下改进:

 代码如下 复制代码

<?php 

 $str="这是条错误信息。rn"; 

 error_log($str,3,'errors.log'); 

 ?>

注意$str,用的是双引号(php单引号和双引号的区别),还在字符串结尾加上了rn。这跟第一个实例那个写法是不同的。

下面我再分享两个自定义记录出错日志实例

 

 代码如下 复制代码

<?php
    function exceptionHandler(){
        error_reporting(E_ALL ^ E_NOTICE);
        date_default_timezone_set('Etc/GMT-8');    //设置时区
   
        ini_set('display_errors',0);    //将错误记录到日志
        ini_set('error_log','D:\'.date('Y-m-d').'_weblog.txt');
        ini_set('log_errors',1);    //开启错误日志记录
        ini_set('ignore_repeated_errors',1);    //不重复记录出现在同一个文件中的同一行代码上的错误信息。

        $user_defined_err = error_get_last();
        if($user_defined_err['type'] > 0)
        {
            switch($user_defined_err['type']){
                case 1:
                    $user_defined_errType = '致命的运行时错误(E_ERROR)';
                    break;
                case 2:
                    $user_defined_errType = '非致命的运行时错误(E_WARNING)';
                    break;
                case 4:
                    $user_defined_errType = '编译时语法解析错误(E_PARSE)';
                    break;
                case 8:
                    $user_defined_errType = '运行时提示(E_NOTICE)';
                    break;
                case 16:
                    $user_defined_errType = 'PHP内部错误(E_CORE_ERROR)';
                    break;
                case 32:
                    $user_defined_errType = 'PHP内部警告(E_CORE_WARNING)';
                    break;
                case 64:
                    $user_defined_errType = 'Zend脚本引擎内部错误(E_COMPILE_ERROR)';
                    break;
                case 128:
                    $user_defined_errType = 'Zend脚本引擎内部警告(E_COMPILE_WARNING)';
                    break;
                case 256:
                    $user_defined_errType = '用户自定义错误(E_USER_ERROR)';
                    break;
                case 512:
                    $user_defined_errType = '用户自定义警告(E_USER_WARNING)';
                    break;
                case 1024:
                    $user_defined_errType = '用户自定义提示(E_USER_NOTICE)';
                    break;
                case 2048:
                    $user_defined_errType = '代码提示(E_STRICT)';
                    break;
                case 4096:
                    $user_defined_errType = '可以捕获的致命错误(E_RECOVERABLE_ERROR)';
                    break;
                case 8191:
                    $user_defined_errType = '所有错误警告(E_ALL)';
                    break;
                default:
                    $user_defined_errType = '未知类型';
                    break;
                }
            $msg = sprintf('%s %s %s %s %s',date("Y-m-d H:i:s"),$user_defined_errType,$user_defined_err['message'],$user_defined_err['file'],$user_defined_err['line']);
            error_log($msg,0);
        }
    }

    register_shutdown_function('exceptionHandler');
?>

调用方法

<meta charset="utf-8">
<?php
    //文件2:【test.php】
    include('error.class.php');
    echo $_COOKIE['aaaaadfa'];    //此cookie不存在就会产生一个错误,用来做测试用
    echo $_SESSION['aaaaadfa'];    //此session不存在就会产生一个错误,用来做测试用
?>

例2 日志记录类

 代码如下 复制代码

<?php
/**********************************************************
 * File name: LogsClass.class.php
 * Class name: 日志记录类
 * Create date: 2008/05/14
 * Update date: 2008/09/28
 * Author: blue
 * Description: 日志记录类
 * Example: //设定路径和文件名
 * $dir="a/b/".date("Y/m",time());
 * $filename=date("d",time()).".log";
 * $logs=new Logs($dir,$filename);
 * $logs->setLog("test".time());
 * //使用默认
 * $logs=new Logs();
 * $logs->setLog("test".time());
 * //记录信息数组
 * $logs=new Logs();
 * $arr=array(
 * 'type'=>'info',
 * 'info'=>'test',
 * 'time'=>date("Y-m-d H:i:s",time())
 * );
 * $logs->setLog($arr);
 **********************************************************/
class Logs {
    private $_filepath; //文件路径
    private $_filename; //日志文件名
    private $_filehandle; //文件句柄
   

    /**
     *作用:初始化记录类
     *输入:文件的路径,要写入的文件名
     *输出:无
     */
    public function Logs($dir = null, $filename = null) {
        //默认路径为当前路径
        $this->_filepath = empty ( $dir ) ? '' : $dir;
       
        //默认为以时间+.log的文件文件
        $this->_filename = empty ( $filename ) ? date ( 'Y-m-d', time () ) . '.log' : $filename;
       
        //生成路径字串
        $path = $this->_createPath ( $this->_filepath, $this->_filename );
        //判断是否存在该文件
        if (! $this->_isExist ( $path )) { //不存在
            //没有路径的话,默认为当前目录
            if (! empty ( $this->_filepath )) {
                //创建目录
                if (! $this->_createDir ( $this->_filepath )) { //创建目录不成功的处理
                    die ( "创建目录失败!" );
                }
            }
            //创建文件
            if (! $this->_createLogFile ( $path )) { //创建文件不成功的处理
                die ( "创建文件失败!" );
            }
        }
       
        //生成路径字串
        $path = $this->_createPath ( $this->_filepath, $this->_filename );
        //打开文件
        $this->_filehandle = fopen ( $path, "a+" );
    }
   
    /**
     *作用:写入记录
     *输入:要写入的记录
     *输出:无
     */
    public function setLog($log) {
        //传入的数组记录
        $str = "";
        if (is_array ( $log )) {
            foreach ( $log as $k => $v ) {
                $str .= $k . " : " . $v . "n";
            }
        } else {
            $str = $log . "n";
        }
       
        //写日志
        if (! fwrite ( $this->_filehandle, $str )) { //写日志失败
            die ( "写入日志失败" );
        }
    }
   
    /**
     *作用:判断文件是否存在
     *输入:文件的路径,要写入的文件名
     *输出:true | false
     */
    private function _isExist($path) {
        return file_exists ( $path );
    }
   
    /**
     *作用:创建目录(引用别人超强的代码-_-;;)
     *输入:要创建的目录
     *输出:true | false
     */
    private function _createDir($dir) {
        return is_dir ( $dir ) or ($this->_createDir ( dirname ( $dir ) ) and mkdir ( $dir, 0777 ));
    }
   
    /**
     *作用:创建日志文件
     *输入:要创建的目录
     *输出:true | false
     */
    private function _createLogFile($path) {
        $handle = fopen ( $path, "w" ); //创建文件
        fclose ( $handle );
        return $this->_isExist ( $path );
    }
   
    /**
     *作用:构建路径
     *输入:文件的路径,要写入的文件名
     *输出:构建好的路径字串
     */
    private function _createPath($dir, $filename) {
        if (empty ( $dir )) {
            return $filename;
        } else {
            return $dir . "/" . $filename;
        }
    }
   
    /**
     *功能: 析构函数,释放文件句柄
     *输入: 无
     *输出: 无
     */
    function __destruct() {
        //关闭文件
        fclose ( $this->_filehandle );
    }
}
?>

修正:
1,不用每写一条日志就进行次文件的IO的操作,在对象声明时打开文件句柄
2,支持数组类型的日志记录
3,可使用默认路径和默认文件,为当前目录下的YYYY-MM-DD.log文件

总结

个人更喜欢系统自带的函数,如果系统自带的日志记录函数满足不了我们就可以使用下面自定义函数。

在php中pathinfo()与parse_url()函数都可以获取url的信息,但是个人感觉这两个函数几乎没有什么共同之处呀,下面我来转一篇关于pathinfo()与parse_url()函数用法

说明
mixed pathinfo ( string $path [, int $options ] )

pathinfo() 返回一个关联数组包含有 path 的信息。包括以下的数组单元:dirname,basename 和 extension。

可以通过参数 options 指定要返回哪些单元。它们包括:PATHINFO_DIRNAME,PATHINFO_BASENAME 和 PATHINFO_EXTENSION。默认是返回全部的单元。如果不是要求取得所有单元,则本函数返回字符串。

 Example #1 pathinfo() 例子

 代码如下 复制代码

<?php
$path_parts = pathinfo(“/www/htdocs/index.html”);
echo $path_parts["dirname"] . ” “;
echo $path_parts["basename"] . ” “;
echo $path_parts["extension"] . ” “;
?>

以上例程会输出:

/www/htdocs
index.html
htmlPHP parse_url 解析 URL,返回其组成部分
parse_url
(PHP 4, PHP 5)

parse_url — 解析 URL,返回其组成部分

说明
array parse_url ( string $url )本函数解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分。

本函数不是用来验证给定 URL 的合法性的,只是将其分解为下面列出的部分。不完整的 URL 也被接受,parse_url() 会尝试尽量正确地将其解析。

参数
 

url
要解析的 URL

 

返回值
对严重不合格的 URL,parse_url() 可能会返回 FALSE 并发出 E_WARNING。否则会返回一个关联数组,其组成部分为(至少有一个):

•scheme - 如 http
•host
•port
•user
•pass
•path
•query - 在问号 ? 之后
•fragment - 在散列符号 # 之后
 

范例
Example #1 parse_url() 例子

 代码如下 复制代码

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';

print_r(parse_url($url));
?>

以上例程会输出:

Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)

注释
Note:

本函数不能用于相对 URL。

1

[!--infotagslink--]

相关文章

  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • c#中判断字符串是不是数字或字母的方法

    这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
  • PostgreSQL判断字符串是否包含目标字符串的多种方法

    这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
  • 详解C++ string常用截取字符串方法

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • php字符串按照单词逐个进行反转的方法

    本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • 使用list stream: 任意对象List拼接字符串

    这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
  • C# 16 进制字符串转 int的方法

    这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 获取中文字符串的实际长度代码

    JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
  • PostgreSQL 字符串处理与日期处理操作

    这篇文章主要介绍了PostgreSQL 字符串处理与日期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • php 中英文混合字符串截取

    文章介绍一个实用的函数,我们如果用php substr来截取字符在中文上处理的很有问题,今天自己写了一个比较好的中文与英文字符截取的函数,有需要的朋友可以参考下。 ...2016-11-25
  • C#实现对字符串进行大小写切换的方法

    这篇文章主要介绍了C#实现对字符串进行大小写切换的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C#获取字符串后几位数的方法

    这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 解决vue字符串换行问题(绝对管用)

    这篇文章主要介绍了解决vue字符串换行问题(绝对管用),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-06
  • C#判断一个字符串是否是数字或者含有某个数字的方法

    这篇文章主要介绍了C#判断一个字符串是否是数字或者含有某个数字的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 【C#基础】Substring截取字符串的方法小结(推荐)

    这篇文章主要介绍了Substring截取字符串方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • 使用PHP similar text计算两个字符串相似度

    在网站开发中,我们经常使用php similar text 计算两个字符串相似度;1,similar_text的用法 如果我想计算"ly89cn"和"ly89"的相似程度,有两种表示方法复制代码 代码如下: echo similar_text('ly89cn', 'ly89'); ...2015-11-08
  • C#实现将字符串转换成日期格式的方法

    这篇文章主要介绍了C#实现将字符串转换成日期格式的方法,涉及C#操作时间及字符串的相关技巧,非常简单实用,需要的朋友可以参考下...2020-06-25