PHP通用检测函数集

这些函数都要测试才能使用,不保证个个都能使用
// ※CheckMoney($C_Money) 检查数据是否是99999.99格式
// ※CheckEmailAddr($C_mailaddr) 判断是否为有效邮件地址
// ※CheckWebAddr($C_weburl) 判断是否为有效网址
// ※CheckEmpty($C_char) 判断字符串是否为空
// ※CheckLengthBetween($C_char, $I_len1, $I_len2=100) 判断是否为指定长度内字符串
// ※CheckUser($C_user) 判断是否为合法用户名
// ※CheckPassword($C_passwd) 判断是否为合法用户密码
// ※CheckTelephone($C_telephone) 判断是否为合法电话号码
// ※CheckValueBetween($N_var, $N_val1, $N_val2) 判断是否是某一范围内的合法值
// ※CheckPost($C_post) 判断是否为合法邮编(固定长度)
// ※CheckExtendName($C_filename,$A_extend) 判断上传文件的扩展名
// ※CheckImageSize($ImageFileName,$LimitSize) 检验上传图片的大小
// ※AlertExit($C_alert,$I_goback=0) 非法操作警告并退出
// ※Alert($C_alert,$I_goback=0) 非法操作警告
// ※ReplaceSpacialChar($C_char) 特殊字符替换函数
// ※ExchangeMoney($N_money) 资金转换函数
// ※WindowLocation($C_url,$C_get="",$C_getOther="") PHP中的window.location函数
//-----------------------------------------------------------------------------------

<?php

// 函数名:CheckMoney($C_Money)    
// 作 用:检查数据是否是99999.99格式    
// 参 数:$C_Money(待检测的数字)    
// 返回值:布尔值    
// 备 注:无    
//-----------------------------------------------------------------------------------    
function CheckMoney($C_Money)    
{    
if (!ereg("^[0-9][.][0-9]$", $C_Money)) return false;    
return true;    
}    
//-----------------------------------------------------------------------------------    
// 函数名:CheckEmailAddr($C_mailaddr)    
// 作 用:判断是否为有效邮件地址    
// 参 数:$C_mailaddr(待检测的邮件地址)    
// 返回值:布尔值    
// 备 注:无    
//-----------------------------------------------------------------------------------    
function CheckEmailAddr($C_mailaddr)    
{    
if (!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$",    
$C_mailaddr))    
//(!ereg("^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$",    
$c_mailaddr))    
{    
return false;    
}    
return true;    
}    
//-----------------------------------------------------------------------------------    
// 函数名:CheckWebAddr($C_weburl)    
// 作 用:判断是否为有效网址    
// 参 数:$C_weburl(待检测的网址)    
// 返回值:布尔值    
// 备 注:无    
//-----------------------------------------------------------------------------------    
function CheckWebAddr($C_weburl)    
{    
if (!ereg("^http://[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$", $C_weburl))    
{    
return false;    
}    
return true;    
}    
//-----------------------------------------------------------------------------------    
/ 函数名:CheckEmpty($C_char)    
// 作 用:判断字符串是否为空    
// 参 数:$C_char(待检测的字符串)    
// 返回值:布尔值    
// 备 注:无    
//-----------------------------------------------------------------------------------    
function CheckEmptyString($C_char)    
{    
if (!is_string($C_char)) return false; //是否是字符串类型    
if (empty($C_char)) return false; //是否已设定    
if ($C_char=='') return false; //是否为空    
return true;    
}    
//-----------------------------------------------------------------------------------    
// 函数名:CheckLengthBetween($C_char, $I_len1, $I_len2=100)    
// 作 用:判断是否为指定长度内字符串    
// 参 数:$C_char(待检测的字符串)    
// $I_len1 (目标字符串长度的下限)    
// $I_len2 (目标字符串长度的上限)    
// 返回值:布尔值    
// 备 注:无    
//-----------------------------------------------------------------------------------    
function CheckLengthBetween($C_cahr, $I_len1, $I_len2=100)    
{    
$C_cahr = trim($C_cahr);    
if (strlen($C_cahr) < $I_len1) return false;    
if (strlen($C_cahr) > $I_len2) return false;    
return true;    
}    
//-----------------------------------------------------------------------------------    
// 函数名:CheckUser($C_user)    
// 作 用:判断是否为合法用户名    
// 参 数:$C_user(待检测的用户名)    
// 返回值:布尔值    
// 备 注:无    
//-----------------------------------------------------------------------------------    
function CheckUser($C_user)    
{    
if (!CheckLengthBetween($C_user, 4, 20)) return false; //宽度检验    
if (!ereg("^[_a-zA-Z0-9]*$", $C_user)) return false; //特殊字符检验    
return true;    
}    
?>
<?php
// 函数名:CheckPassword($C_passwd)    
// 作 用:判断是否为合法用户密码    
// 参 数:$C_passwd(待检测的密码)    
// 返回值:布尔值    
// 备 注:无    
//-----------------------------------------------------------------------------------    
function CheckPassword($C_passwd)    
{    
if (!CheckLengthBetween($C_passwd, 4, 20)) return false; //宽度检测    
if (!ereg("^[_a-zA-Z0-9]*$", $C_passwd)) return false; //特殊字符检测    
return true;    
}    
//-----------------------------------------------------------------------------------    
// 函数名:CheckTelephone($C_telephone)    
// 作 用:判断是否为合法电话号码    
// 参 数:$C_telephone(待检测的电话号码)    
// 返回值:布尔值    
// 备 注:无    
//-----------------------------------------------------------------------------------    
function CheckTelephone($C_telephone)    
{    
if (!ereg("^[+]?[0-9]+([xX-][0-9]+)*$", $C_telephone)) return false;    
return true;    
}    
//-----------------------------------------------------------------------------------    
// 函数名:CheckValueBetween($N_var, $N_val1, $N_val2)    
// 作 用:判断是否是某一范围内的合法值    
// 参 数:$N_var 待检测的值    
// $N_var1 待检测值的上限    
// $N_var2 待检测值的下限    
// 返回值:布尔值    
// 备 注:无    
//-----------------------------------------------------------------------------------    
function CheckValueBetween($N_var, $N_val1, $N_val2)    
{    
if ($N_var < $N_var1 ││ $N_var > $N_var2)    
{    
return false;    
}    
return true;    

}
?>
<?php
// 函数名:CheckPost($C_post)    
// 作 用:判断是否为合法邮编(固定长度)    
// 参 数:$C_post(待check的邮政编码)    
// 返回值:布尔值    
// 备 注:无    
//-----------------------------------------------------------------------------------    
function CheckPost($C_post)    
{    
$C_post=trim($C_post);    
if (strlen($C_post) == 6)    
{    
if(!ereg("^[+]?[_0-9]*$",$C_post))    
{    
return true;;    
}else    
{    
return false;    
}    
}else    
{    
return false;;    
}    
}    
//-----------------------------------------------------------------------------------    
// 函数名:CheckExtendName($C_filename,$A_extend)    
// 作 用:上传文件的扩展名判断    
// 参 数:$C_filename 上传的文件名    
// $A_extend 要求的扩展名    
// 返回值:布尔值    
// 备 注:无    
//-----------------------------------------------------------------------------------    
function CheckExtendName($C_filename,$A_extend)    
{    
if(strlen(trim($C_filename)) < 5)    
{    
return 0; //返回0表示没上传图片    
}    
$lastdot = strrpos($C_filename, "."); //取出.最后出现的位置    
$extended = substr($C_filename, $lastdot+1); //取出扩展名    

for($i=0;$i{    
if (trim(strtolower($extended)) == trim(strtolower($A_extend[$i]))) //转换大    
小写并检测    
{    
$flag=1; //加成功标志    
$i=count($A_extend); //检测到了便停止检测    
}    
}    

if($flag<>1)    
{    
for($j=0;$j{    
$alarm .= $A_extend[$j]." ";    
}    
AlertExit('只能上传'.$alarm.'文件!而你上传的是'.$extended.'类型的文件');    
return -1; //返回-1表示上传图片的类型不符    
}    

return 1; //返回1表示图片的类型符合要求    
}    
//-----------------------------------------------------------------------------------    
// 函数名:CheckImageSize($ImageFileName,$LimitSize)    
// 作 用:检验上传图片的大小    
// 参 数:$ImageFileName 上传的图片名    
// $LimitSize 要求的尺寸    
// 返回值:布尔值    
// 备 注:无    
//-----------------------------------------------------------------------------------    
function CheckImageSize($ImageFileName,$LimitSize)    
{    
$size=GetImageSize($ImageFileName);    
if ($size[0]>$LimitSize[0] ││ $size[1]>$LimitSize[1])    
{    
AlertExit('图片尺寸过大');    
return false;    
}    
return true;    
}    
//-----------------------------------------------------------------------------------    
// 函数名:Alert($C_alert,$I_goback=0)    
// 作 用:非法操作警告    
// 参 数:$C_alert(提示的错误信息)    
// $I_goback(返回到那一页)    
// 返回值:字符串    
// 备 注:无    
//-----------------------------------------------------------------------------------    
function Alert($C_alert,$I_goback=0)    
{    
if($I_goback<>0)    
{    
echo " ";    
}    
else    
{    
echo " ";    
}    
}    
?>
<?php
// 函数名:AlertExit($C_alert,$I_goback=0)    
// 作 用:非法操作警告    
// 参 数:$C_alert(提示的错误信息)    
// $I_goback(返回到那一页)    
// 返回值:字符串    
// 备 注:无    
//-----------------------------------------------------------------------------------    
function AlertExit($C_alert,$I_goback=0)    
{    
if($I_goback<>0)    
{    
echo " ";    
exit;    
}    
else    
{    
echo " ";    
exit;    
}    
}    
//-----------------------------------------------------------------------------------     
// 函数名:ReplaceSpacialChar($C_char)    
// 作 用:特殊字符替换函数    
// 参 数:$C_char(待替换的字符串)    
// 返回值:字符串    
// 备 注:这个函数有问题,需要测试才能使用
//-----------------------------------------------------------------------------------     
function ReplaceSpecialChar($C_char)    
{    
$C_char=HTMLSpecialChars($C_char); //将特殊字元转成 HTML 格式。    
$C_char=nl2br($C_char); //将回车替换为  
$C_char=str_replace(" "," ",$C_char); //替换空格为    
return $C_char;    
}    
//-----------------------------------------------------------------------------------    
// 函数名:ExchangeMoney($N_money)    
// 作 用:资金转换函数    
// 参 数:$N_money(待转换的金额数字)    
// 返回值:字符串    
// 备 注:本函数示例:$char=ExchangeMoney(5645132.3155) ==> $char='¥5,645,132.31'    
//-----------------------------------------------------------------------------------    
function ExchangeMoney($N_money)    
{    
$A_tmp=explode(".",$N_money ); //将数字按小数点分成两部分,并存入数组$A_tmp    
$I_len=strlen($A_tmp[0]); //测出小数点前面位数的宽度    
if($I_len%3==0)    
{    
$I_step=$I_len/3; //如前面位数的宽度mod 3 = 0 ,可按,分成$I_step 部分    
}else    
{    
$step=($len-$len%3)/3+1; //如前面位数的宽度mod 3 != 0 ,可按,分成$I_step 部分+1    
}    
$C_cur="";    
//对小数点以前的金额数字进行转换    
while($I_len<>0)    
{    
$I_step--;   
if($I_step==0)    
{    
$C_cur .= substr($A_tmp[0],0,$I_len-($I_step)*3);    
}else    
{    
$C_cur .= substr($A_tmp[0],0,$I_len-($I_step)*3).",";    
}    
$A_tmp[0]=substr($A_tmp[0],$I_len-($I_step)*3);    
$I_len=strlen($A_tmp[0]);    
}    
//对小数点后面的金额的进行转换    
if($A_tmp[1]=="")    
{    
$C_cur .= ".00";    
}else    
{    
$I_len=strlen($A_tmp[1]);    
if($I_len<2)    
{    
$C_cur .= ".".$A_tmp[1]."0";    
}else    
{    
$C_cur .= ".".substr($A_tmp[1],0,2);    
}    
}
//加上人民币符号并传出    
$C_cur="¥".$C_cur;    
return $C_cur;    
}  
//-----------------------------------------------------------------------------------    
// 函数名:WindowLocation($C_url,$C_get="",$C_getOther="")    
// 作 用:PHP中的window.location函数    
// 参 数:$C_url 转向窗口的URL    
// $C_get GET方法参数    
// $C_getOther GET方法的其他参数    
// 返回值: 字符串    
// 备 注:无    
//-----------------------------------------------------------------------------------
function WindowLocation($C_url,$C_get="",$C_getOther="")    
{    
if($C_get == "" && $C_getOther == "")    
if($C_get == "" && $C_getOther <> ""){$C_target=""window.location='$C_url?    
$C_getOther='+this.value"";}    
if($C_get <> "" && $C_getOther == ""){$C_target=""window.location='$C_url?    
$C_get'"";}    
if($C_get <> "" && $C_getOther <> ""){$C_target=""window.location='$C_url?    
$C_get&$C_getOther='+this.value"";}    
return $C_target;    
}  
?>

smarty缓存控制

smarty提供了强大的缓存功能。但有时我们并不希望整篇文档都被缓存,而是有选择的缓存某一部分内容或某一部分内容不被缓存。例如你在页面上端使用一个带有广告条位置的模板,广告条可以包含任何HTML、图象、FLASH等混合信息. 因此这里不能使用一个静态的链接,同时我们也不希望该广告条被缓存. 这就需要在 insert 函数指定,同时需要一个函数取广告条的内容信息。smarty也提供了这种缓存控制能力。

我们可以使用{insert}使模板的一部分不被缓存
可以使用$smarty->register_function($params,&$smarty)阻止插件从缓存中输出,
还可以使用$smarty->register_block($params,&$smarty)使整篇页面中的某一块不被缓存。

下面我们真对一个简单需求,分别说明这三种控制缓存输出的方法。

需求:被缓存的文档中当前时间不被缓存,随每次刷新而变化。

1、使用insert函数使模板的一部分不被缓存
index.tpl:
<div>{insert name="get_current_time"}</div>

index.php
function insert_get_current_time(){
       return date("Y-m-d H:m:s");
}

$smarty=new smarty();
$smarty->caching = true;
if(!$smarty->is_cached()){
       .......
}
$smarty->display('index.tpl');

注解:
定义一个函数,函数名格式为:inser_name(array $params, object &$smarty),
函数参数可选的,如果在模板的insert方法中需要加入其他属性,就会作为数组传递给用户定义的函数。
如:{insert name='get_current_time' local='zh'}
在get_current_time函数中我们就可以通过$params['local']来获得属性值。
如果在get_current_time函数中需要用到当前smarty对象的方法或属性,就可以通过第二个参数获得。

这时你会发现index.tpl已被缓存,但当前时间却随每次刷新在不断变化。

2、使用register_function阻止插件从缓存中输出
index.tpl:
<div>{current_time}{/div}

index.php:
function smarty_function_current_time($params, &$smarty){
       return date("Y-m-d H:m:s");
}

$smarty=new smarty();
$smarty->caching = true;
$smarty->register_function('current_time','smarty_function_current_time',false);
if(!$smarty->is_cached()){
       .......
}
$smarty->display('index.tpl');

注解:
定义一个函数,函数名格式为:smarty_type_name($params, &$smarty)
type为function
name为用户自定义标签名称,在这里是{current_time}
两个参数是必须的,即使在函数中没有使用也要写上。两个参数的功能同上。

3、使用register_block使整篇页面中的某一块不被缓存
index.tpl:
<div align='center'>
Page created: {"0"|date_format:"%D %H:%M:%S"}

{dynamic}
Now is: {"0"|date_format:"%D %H:%M:%S"}
... do other stuff ...
{/dynamic}

</div>

index.php:
function smarty_block_dynamic($param, $content, &$smarty) {
return $content;
}
$smarty = new Smarty;
$smarty->caching = true;
$smarty->register_block('dynamic', 'smarty_block_dynamic', false);
if(!$smarty->is_cached()){
       .......
}
$smarty->display('index.tpl');

注解:
定义一个函数,函数名格式为:smarty_type_name($params, &$smarty)
type为block
name为用户自定义标签名称,在这里是{dynamic}
两个参数是必须的,即使在函数中没有使用也要写上。两个参数的功能同上。

4、总结
(1)对缓存的控制能力:
使用register_function和register_block能够方便的控制插件输出的缓冲能力,可以通过第三个参数控制是否缓存,默认是缓存的,需要我们显示设置为false,正如我们试验中的所做的那样“$smarty->register_function('current_time','smarty_function_current_time',false);”
但insert函数默认是不缓存的。并且这个属性不能修改。从这个意义上讲insert函数对缓存的控制能力似乎不如register_function和register_block强。
(2)使用方便性:
但是insert函数使用非常方便。不用显示注册,只要在当前请求过程中包含这个函数smarty就会自动在当前请求的过程中查找指定的函数。
当然register_function也可以做到不在运行时显示注册。但是那样做的效果跟其他模版函数一样,统统被缓存,并且不能控制。
如果你使用在运行时显示调用register_function注册自定义函数,那么一定要在调用is_cached()方法前完成函数的注册工作。
否则在is_cached()这一步缓存文档将因为找不到注册函数而导致smarty错误。

PHP计划任务的一种实现方法

如果由页面执行,设置
<?php
ignore_user_abort(true);
set_time_limit(0);
?>

运用sleep(300)+死循环,
这样就可以实现计划任务了,这个程序里不要有输出,有输出容易中断

<?php
ignore_user_abort(true);
set_time_limit(0);

while(1){
    $fp = fopen('time_task.txt',"a+");
    $str = date("Y-m-d h:i:s")."n";
    fwrite($fp,$str);//记录到time_task.txt文本
    fclose($fp);
    sleep(1800);    //半小时执行一次
}
?>

函数int ignore_user_abort :

从函数名本身,可以解释为,"忽略用户的影响"
因为所谓的用户是指客户端,即浏览器
所以进一步解释为,"忽略浏览器的影响"

那么影响指的是什么,影响指的是浏览器的关闭和异常

也就是说有这个函数在的php程序,即使在浏览器关掉的时候,程序没有执行完它还会继续执行,直到执行完

比如说,你有一段代码需要执行100秒,可是这个时间太长了,一般用户等不及,在等了60秒的时候受不了就关了
如果这个时候程序也随之终止,很可能造成数据异常,不一致或是错误,你需要程序继续运行,就可以用它了

它的参数就是真和假,真就是忽略,假就是不忽略

如何检查库或函数是否可用

 

1. 获取所有可用的模块 - get_loaded_extensions
该函数返回所有已经加载
的(可用的)模块。

用法:

PHP代码
print_r(get_loaded_extensions());   

2. 获取指定模块的可用函数 - get_extension_funcs
该函数返回指定模块所有可用的函数
。传入的参数(模块名称)必须是小写

用法:

PHP代码
print_r(get_extension_funcs("gd"));  

3. 获取所有已经定义的函数 - get_defined_functions
该函数返回所有已经定义的函数
,包括内置函数和用户自定义函数。

用法:

PHP代码
function myrow($id, $data){    
    return "<tr><th>$id</th><td>$data</td></tr>\n";    
}     
$arr = get_defined_functions();    
print_r($arr);  

 

输出:

PHP代码
Array   
(   
    [internal] => Array   
        (   
            [0] => zend_version   
            [1] => func_num_args   
            [2] => func_get_arg   
            [3] => func_get_args   
            [4] => strlen  
            [5] => strcmp  
            [6] => strncmp  
            ...   
            [750] => bcscale   
            [751] => bccomp  
        )   
  
    [user] => Array   
        (   
            [0] => myrow   
        )   
  
)   

其中 $arr["internal"] 是内置函数, $arr["user"] 是用户自定义函数。

4. 检查指定函数是否存在 - function_exists
该函数返回指定函数是否已经定义。

用法:

PHP代码
if (function_exists('imap_open')) {    
    echo "IMAP functions are available.<br />\n";    
} else {    
    echo "IMAP functions are not available.<br />\n";    
}  

标签: php, 函数, 代码, 模块