防范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