防范sql注入的代码:
<?php /** * 防范sql注入 * edit www. */ $_POST = sql_injection($_POST); $_GET = sql_injection($_GET); function sql_injection($content) { if (!get_magic_quotes_gpc()) { if (is_array($content)) { foreach ($content as $key=>$value) { $content[$key] = addslashes()($value); } } else { addslashes($content); } } return $content; } ?>
下面这个适合在php oop面向对象的程序中使用:
<?php /* 函数名称:inject_check() 函数作用:检测提交的值是不是含有SQL注射的字符 参 数:$sql_str: 提交的变量 返 回 值:返回检测结果,ture or false */ function inject_check($sql_str) { return eregi('select|insert|update|delete|'|/*|*|../|./|union|into|load_file|outfile', $sql_str); // 进行过滤 } /* 函数名称:verify_id() 函数作用:校验提交的ID类值是否合法 参 数:$id: 提交的ID值 返 回 值:返回处理后的ID */ function verify_id($id=null) { if (!$id) { exit('没有提交参数!'); } // 是否为空判断 elseif (inject_check($id)) { exit('提交的参数非法!'); } // 注射判断 elseif (!is_numeric($id)) { exit('提交的参数非法!'); } // 数字判断 $id = intval($id); // 整型化 return $id; } /* 函数名称:str_check() 函数作用:对提交的字符串进行过滤 参 数:$var: 要处理的字符串 返 回 值:返回过滤后的字符串 */ function str_check( $str ) { if (!get_magic_quotes_gpc()) { // 判断magic_quotes_gpc是否打开 $str = addslashes($str); // 进行过滤 } $str = str_replace()("_", "\_", $str); // 把 '_'过滤掉 $str = str_replace("%", "\%", $str); // 把 '%'过滤掉 return $str; } /* 函数名称:post_check() 函数作用:对提交的编辑内容进行处理 参 数:$post: 要提交的内容 返 回 值:$post: 返回过滤后的内容 */ function post_check($post) { if (!get_magic_quotes_gpc()) { // 判断magic_quotes_gpc是否为打开 $post = addslashes($post); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤 } $post = str_replace("_", "\_", $post); // 把 '_'过滤掉 $post = str_replace("%", "\%", $post); // 把 '%'过滤掉 $post = nl2br($post); // 回车转换 $post = htmlspecialchars()($post); // html标记转换 return $post; } ?>
这里,再提供一个代码。
//预防数据库攻击的正确做法:
<?php function check_input($value) { // 去除斜杠 if (get_magic_quotes_gpc()) { $value = stripslashes()($value); } // 如果不是数字则加引号 if (!is_numeric($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; } $con = mysql_connect()("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } // 进行安全的 SQL $user = check_input($_POST['user']); $pwd = check_input($_POST['pwd']); $sql = "SELECT * FROM users WHERE user=$user AND password=$pwd"; mysql_query()($sql); mysql_close($con); ?>
注意:
mysql_real_escape_string()函数和addslashes()的功能类似。
mysql_real_escape_string()效果更好。
由于 mysql_real_escape_string()函数是必须在mysql连接之后才可以使用的,基于此,建议使用addslashes()函数进行处理。
了解php函数method_exists()与is_callable()的区别?
在php面相对象设计过程中,往往需要在调用某一个方法是否属于某一个类的时候做出判断,常用的方法有method_exists()和is_callable()。
相比之下,is_callable()函数要高级一些,它接受字符串变量形式的方法名作为第一个参数,如果类方法存在并且可以调用,则返回true。
如果要检测类中的方法是否能被调用,可以给函数传递一个数组而不是类的方法名作为参数。
数组必须包含对象或类名,以将其作为它的第一个元素,要检查的方法名则作为第二个元素。如果该方法在类中存在,函数返回true。
说了这么多,看下面的例子:
<?php if ( is_callable( array( $obj, $method ) ) ) { /*要操作的代码段*/ } ?>
is_callable()可以加收另外一个参数:
一个布尔值,如果将该参数设置为true,函数仅仅检查给定的方法或函数名称的语法是否正确,而不检查其是否真正存在。
method_exists()函数的参数为一个对象(或类名)和一个方法名,如果给定方法在对象的类中存在,则返回true。
例子:
<?php if ( method_exists( $obj, $method ) ) { /*要操作的代码段*/ } ?>
说明:
php函数method_exists()与is_callable()的区别,在php5中,一个方法存在并不意味着它就可以被调用。
对于private,protected和public类型的方法,method_exits()会返回true,但是is_callable()会检查存在其是否可以访问,如果是private,protected类型的,它会返回false。
就介绍这么多了,希望有助于大家理解这二个函数的区别。
在php编程中,时间函数time(),返回当前时间的。而mktime()函数,不是返回当前时间,而是格式化时间。
虽然单独写mktime()而不加任何参数如:echo mktime()和echo time()的效果是一样的。但本质上是不一样的。
PHP mktime() 函数
PHP Date / Time 函数
定义和用法
mktime() 函数返回一个日期的 Unix 时间戳。
参数总是表示 GMT 日期,因此 is_dst 对结果没有影响。
参数可以从右到左依次空着,空着的参数会被设为相应的当前 GMT 值。
语法
mktime(hour,minute,second,month,day,year,is_dst)
参数 描述
minute 可选。规定分钟。
second 可选。规定秒。
month 可选。规定用数字表示的月。
day 可选。规定天。
year 可选。规定年。在某些系统上,合法值介于 1901 - 2038 之间。不过在 PHP 5 中已经不存在这个限制了。
is_dst
可选。如果时间在日光节约时间(DST)期间,则设置为1,否则设置为0,若未知,则设置为-1。
自 5.1.0 起,is_dst 参数被废弃。因此应该使用新的时区处理特性。
提示和注释
注释:在 PHP 5.1 之前,如果该函数的参数非法,则会返回 false。
例子:
mktime() 函数对于日期运算和验证非常有用。它可以自动校正越界的输入:
<?php echo(date("M-d-Y",mktime(0,0,0,12,36,2001))); echo(date("M-d-Y",mktime(0,0,0,14,1,2001))); echo(date("M-d-Y",mktime(0,0,0,1,1,2001))); echo(date("M-d-Y",mktime(0,0,0,1,1,99))); ?>
输出:
Jan-05-2002
Feb-01-2002
Jan-01-2001
Jan-01-1999
PHP time() 函数
PHP Date / Time 函数
定义和用法
time() 函数返回当前时间的 Unix 时间戳。
语法
time(void)
参数 描述
void 可选。
说明
返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。
提示和注释
提示:自 PHP 5.1 起在 $_SERVER['REQUEST_TIME'] 中保存了发起该请求时刻的时间戳。
例1,
<?php //time()函数示例1 $t=time(); echo($t . "<br />"); echo(date("D F d Y",$t)); ?>
输出:
1138618081
Mon January 30 2006
例2,
<?php //time()函数示例2 $nextWeek = time() + (7 * 24 * 60 * 60); // 7 days; 24 hours; 60 mins; 60secs echo 'Now: '. date('Y-m-d') ."\n"; echo 'Next Week: '. date('Y-m-d', $nextWeek) ."\n"; ?>
输出:
Now: 2005-03-30
Next Week: 2005-04-07