第一篇:不得不防的PHP危险函数
不得不防的PHP危险函数
用PHP语言建设网站,安全问题是每个PHP程序员必须考虑的问题,在PHP运用的过程中一些PHP危险函数却不得不防,南京PHP培训小编把PHP危险函数列出来,供大家参考。
phpinfo()功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。危险等级:中 passthru()功能描述:允许执行一个外部程序并回显输出,类似于 exec()。危险等级:高 exec()功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。危险等级:高 system()功能描述:允许执行一个外部程序并回显输出,类似于 passthru()。危险等级:高 chroot()功能描述:可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式 PHP 时才能工作,且该函数不适用于 Windows 系统。危险等级:高 scandir()功能描述:列出指定路径中的文件和目录。危险等级:中 chgrp()功能描述:改变文件或目录所属的用户组。危险等级:高 chown()功能描述:改变文件或目录的所有者。危险等级:高 shell_exec()功能描述:通过 Shell 执行命令,并将执行结果作为字符串返回。危险等级:高 proc_open()功能描述:执行一个命令并打开文件指针用于读取以及写入。危险等级:高 proc_get_status()功能描述:获取使用 proc_open()所打开进程的信息。危险等级:高 error_log()功能描述:将错误信息发送到指定位置(文件)。
安全备注:在某些版本的 PHP 中,可使用 error_log()绕过 PHP safe mode,执行任意命令。危险等级:低 ini_alter()功能描述:是 ini_set()函数的一个别名函数,功能与 ini_set()相同。具体参见 ini_set()。危险等级:高 ini_set()功能描述:可用于修改、设置 PHP 环境配置参数。危险等级:高 ini_restore()功能描述:可用于恢复 PHP 环境配置参数到其初始值。危险等级:高 dl()功能描述:在 PHP 进行运行过程当中(而非启动时)加载一个 PHP 外部模块。危险等级:高 pfsockopen()功能描述:建立一个 Internet 或 UNIX 域的 socket 持久连接。危险等级:高 syslog()功能描述:可调用 UNIX 系统的系统层 syslog()函数。危险等级:中 readlink()功能描述:返回符号连接指向的目标文件内容。危险等级:中 symlink()功能描述:在 UNIX 系统中建立一个符号链接。危险等级:高 popen()功能描述:可通过 popen()的参数传递一条命令,并对 popen()所打开的文件进行执行。
危险等级:高
stream_socket_server()功能描述:建立一个 Internet 或 UNIX 服务器连接。危险等级:中 putenv()功能描述:用于在 PHP 运行时改变系统字符集环境。在低于 5.2.6 版本的 PHP 中,可利用该函数
修改系统字符集环境后,利用 sendmail 指令发送特殊参数执行系统 SHELL 命令。危险等级:高
第二篇:PHP的构造函数-php教程
PHP的构造函数
本php教程主要学习PHP的构造函数。
在面向对象编程中有个很特别的函数,这个函数称为构造函数,是对象被创建时自动调用的方法,用来完成类初始化的工作。因为只要PHP的类一加载就会自动执行此函数,一般初始化的工作都放在此函数中。
1.构造函数和其它函数一样,可以传递参数,可以设定参数默认值。
2.构造函数可以调用属性,可以调用方法。
3.构造函数可以被其它方法显式调用。
在之前的PHP版本中,构造函数使用和类名同名来进行对象的初始化工作,但后面发现如果要更改类名,同时就要更改它的构造方法,所以在PHP5中,就被用__construct()函数来实现.__construct()前面是两个下划线组成,不要以为是一个下划线.与构造函数相对应的是析构函数.当某个对象成为垃圾或者当对象被显式销毁时执行。__destruct()析构函数,是在垃圾对象被回收时执行。
1.不要在程序中调用一个对象的析构函数。
2.析构函数不能带有参数。
3.通常在程序结束后PHP会自动执行垃圾回收。
在这里有个问题先提下,因为我们创建一个类,有时候会有多个实例,那么构造函数是怎么进行调用的呢。php的构造函数调用是从自身向上查找,执行最近的一个来进行调用。
关于这个构造函数在以后再进行补充吧,它的基本知识点就这些吧,相信在遇到__construct()等莫名的函数而不知所措了。至于它的实际应用到时候再说吧,今天就不举例了,好不容易今天不要上班,难得呀。
第三篇:php开发中常用函数总结
php开发中常用函数总结
1.获取IP2.时间的增加3.检查日期是否合法日期4.时间比较函数,返回两个日期相差几秒、几分钟、几小时或几天5.PHP重定向6.获取访问者浏览器7.获取访问者操作系统8.文件格式类9.php生成excel文档10.时间比较问题11.提取页面和浏览器提交的变量,作用相当于使PHP.INI开了全局变量12.读取文件函数13.写入文件函数14.页面快速转向15.产生随机字符串函数16.截取一定长度的字符串(该函数对GB2312使用有效)17.取得客户端IP地址18.判断邮箱地址19.分页(两个函数配合使用)20.获取新插入数据的ID21.获得当前的脚本网址22.把全角数字转为半角数字23.去除HTML标记24.相对路径转化成绝对路径26.取得所有链接27.HTML表格的每行转为CSV格式数组28.将HTML表格的每行每列转为数组,采集表格数据29.返回字符串中的所有单词 $distinct=true 去除重复30.打印出为本PHP项目做出贡献的人员的清单
function GetIP(){ //获取IP
if($_SERVER[“HTTP_X_FORWARDED_FOR”])
$ip = $_SERVER[“HTTP_X_FORWARDED_FOR”];
else if($_SERVER[“HTTP_CLIENT_IP”])
$ip = $_SERVER[“HTTP_CLIENT_IP”];
else if($_SERVER[“REMOTE_ADDR”])
$ip = $_SERVER[“REMOTE_ADDR”];
else if(getenv(“HTTP_X_FORWARDED_FOR”))
$ip = getenv(“HTTP_X_FORWARDED_FOR”);
else if(getenv(“HTTP_CLIENT_IP”))
$ip = getenv(“HTTP_CLIENT_IP”);
else if(getenv(“REMOTE_ADDR”))
$ip = getenv(“REMOTE_ADDR”);
else
$ip = “Unknown”;
return $ip;}?>{downsource}
$dateArr = explode(“-”, $date);$value[$unit] = $int;return date(“Y-m-d”, mktime(0,0,0, $dateArr[1] + $value['m'], $dateArr[2] + $value['d'], $dateArr[0] + $value['y']));}function GetWeekDay($date){ //计算出给出的日期是星期几
$dateArr = explode(“-”, $date);return date(“w”, mktime(0,0,0,$dateArr[1],$dateArr[2],$dateArr[0]));}?>{downsource}
$dateArr = explode(“-”, $date);if(is_numeric($dateArr[0])&& is_numeric($dateArr[1])&& is_numeric($dateArr[2])){ return checkdate($dateArr[1],$dateArr[2],$dateArr[0]);} return false;}function check_time($time){ //检查时间是否合法时间
$timeArr = explode(“:”, $time);if(is_numeric($timeArr[0])&& is_numeric($timeArr[1])&& is_numeric($timeArr[2])){ if(($timeArr[0] >= 0 && $timeArr[0] <= 23)&&($timeArr[1] >= 0 && $timeArr[1] <= 59)&&($timeArr[2] >= 0 && $timeArr[2] <= 59))return true;else return false;} return false;}function DateDiff($date1, $date2, $unit = “"){ //时间比较函数,返回两个日期相差几秒、几分钟、几小时或几天
switch($unit){ case 's': $dividend = 1;break;case 'i': $dividend = 60;break;case 'h': $dividend = 3600;break;case 'd': $dividend = 86400;break;default: $dividend = 86400;} $time1 = strtotime($date1);$time2 = strtotime($date2);if($time1 && $time2)return(float)($time11;mt_srand((double)microtime()* 1000000);for($i = 0;$i < $length;$i++){ $hash.= $chars[mt_rand(0, $max)];}return $hash;}?>{downsource}截取一定长度的字符串(该函数对GB2312使用有效) $length){ if($sss){ $length=$length-3;$addstr=@#...@#;} for($i = 0;$i < $length;$i++){ if(ord($string[$i])> 127){ $wordscut.= $string[$i].$string[$i + 1];$i++;} else { $wordscut.= $string[$i];} } return $wordscut.$addstr;}return $string;}?>{downsource}取得客户端IP地址{downsource}判断邮箱地址{downsource}分页(两个函数配合使用)
global $page,$totalpage;$out=”共“.$totalpage.”页 “;$linkNum =4;$start =($page-round($linkNum/2))>0 ?($page-round($linkNum/2)): ”1“;$end =($page+round($linkNum/2))<$totalpage ?($page+round($linkNum/2)): $totalpage;$prestart=$start-1;$nextend=$end+1;if($page<>1)$out.= ”第一页 “;if($start>1)$out.=”..<< “;for($t=$start;$t<=$end;$t++){ $out.=($page==$t)? ”[“.$t.”] “ : ”$t “;}if($end<$totalpage)$out.=”>>..“;if($page<>$totalpage)$out.= ” 最后页“;return $out;}?>{downsource}获取新插入数据的ID{downsource}//获得当前的脚本网址
if(empty($_SERVER[”QUERY_STRING“]))$nowurl = $scriptName;else $nowurl = $scriptName.”?“.$_SERVER[”QUERY_STRING“];} return $nowurl;}?>{downsource}//把全角数字转为半角数字{downsource}//去除HTML标记“,”>“,$txt);$txt = preg_replace(”/[rn]{1,}/isU“,”rn“,$txt);return $txt;}?>{downsource}//相对路径转化成绝对路径
preg_match('/(http|https|ftp):///', $feed_url, $protocol);$server_url = preg_replace(”/(http|https|ftp|news):///“, ”“, $feed_url);
$server_url = preg_replace(”//.*/“, ”“, $server_url);
if($server_url == ''){
return $content;
}
if(isset($protocol[0])){
$new_content = preg_replace('/href=”//', 'href=“'.$protocol[0].$server_url.'/', $content);
$new_content = preg_replace('/src=”//', 'src=“'.$protocol[0].$server_url.'/', $new_content);
} else {
$new_content = $content;
}
return $new_content;} ?>{downsource}//取得所有链接
preg_match_all('/
return array('name'=>$arr[2],'url'=>$arr[1]);}?>{downsource}//HTML表格的每行转为CSV格式数组]*?>'si”,'“',$table);$table = str_replace(”“,'”,',$table);$table = str_replace(“”,“{tr}”,$table);//去掉 HTML 标记
$table = preg_replace(“'<[/!]*?[^<>]*?>'si”,“",$table);//去掉空白字符
$table = preg_replace(”'([rn])[s]+'“,”“,$table);$table = str_replace(” “,”“,$table);$table = str_replace(” “,”“,$table);$table = explode(”,{tr}“,$table);
array_pop($table);return $table;}?>{downsource}//将HTML表格的每行每列转为数组,采集表格数据]*?>'si“,”“,$table);$table = preg_replace(”'
$table = preg_replace(”'<[/!]*?[^<>]*?>'si“,”“,$table);//去掉空白字符
$table = preg_replace(”'([rn])[s]+'“,”“,$table);$table = str_replace(” “,”“,$table);$table = str_replace(” “,”“,$table);
$table = explode('{tr}', $table);
array_pop($table);foreach($table as $key=>$tr){ $td = explode('{td}', $tr);array_pop($td);$td_array[] = $td;} return $td_array;}?>{downsource}//返回字符串中的所有单词 $distinct=true 去除重复{downsource}//打印出为本PHP项目做出贡献的人员的清单 //生成随机密码function randStr($len=6){//用来产生密码的字符串$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789';$password=”";while(strlen($password)<$len)
$password.=substr($chars,(mt_rand()%strlen($chars)),1);return $password;
}
第四篇:买二手房要留心八大注意事项 八陷阱不得不防
买二手房要留心八大注意事项 八陷阱不得不防
3.15刚刚过去,但特别对于买房置业者们来说,消费的合理权益还得懂得自己时刻去维护,去注意,尤其对于当前深圳的二手房市场情况来说,交易量的火爆,买房的人多,市场也不免得会出现不合 理的现象。怎样在买二手房的时候,去避免走弯路,请看看下面的相关二手房置业指南与巧避开相关 的买房陷阱。
“315”消费者置业指南:二手房置业的八项注意
随着置业观念的悄然转变,二手房以它价低、质量可靠、风险小以及即买即住的优点得到了众多置 业者的青睐。专家建议,在日益高涨的房价形势下,青年人的一次置业就应该根据自身实力选择合适 的次新房,以减轻还款压力。
注意1 了解该套“二手房”是否属于允许出售的房屋
因为公有住房“房改”售房时,有些单位还保留有优先收购权。所以,一定要征询原产 权单位同意所购房屋转让的书面意见,并签章。
注意2 了解房屋所有权是否真实、完整、可靠
房屋所有权人是否与他人拥有“共有权”关系,房屋有无其他债权、债务纠纷。但最要 紧的是,一定要由卖方出示、提供合法的“房屋所有权证”。
注意3 了解所购“二手房”的准确建筑面积
合同中约定出售房屋的面积应以现在的产权证上注明的为准,其他面积不计在内。此外,还要考察 地段、环境、价位和房屋结构、格局、采光条件以及物业管理等相关问题。
注意4 了解购买“二手房”的程序
购买“二手房”买卖双方必须要签订《房屋买卖合同》,并到房屋所在区、县国土房管 局市场交易管理部门,办理已购住房出售登记、过户和缴纳国家规定的税费手续。
注意5 了解屋内设施的交验细节
有些业主在签订合同时常常口头向客户保证,屋内装修的铝合金门窗、地板、空调以及柜子、热水 器可以全部赠送。结果到实际交房时客户却发现门窗被卸、地板被撬、屋内狼藉不堪,而业主承诺的 空调、热水器更是不见踪影。
注意6 付款方式
在购房合同签订过程中,必须注意付款方式的一个个环节。比如,买卖双方可以约定,在付款方式 的选择上标明,在签订《房屋买卖合同》时,客户即支付相当于房价款百分之多少的定金给业主或中 介公司等。
注意7 交房时间
在合同签订的时候还应该明确注明房屋交验时间是在过户后第几个工作日或双方约定的其他时间; 房屋交验前产生的费用及房屋交验时产生的费用由谁承担;另外,双方的其他约定也需在合同中注明。
注意8 违约责任
买卖双方在合同约定时最好清楚标明各方的责任义务,这样可大大有利于避免纠纷的发生。如悔约责任、违约金款项、逾期付款责任、滞纳金款项及其他违约情况等。
揭秘消费陷阱:买二手房八陷阱不得不防
3·15新报法律专家团揭秘消费陷阱——买二手房 八陷阱不得不防二手房,因为其价格优势以及周边成熟的配套设施为不少市民青睐。但相对于新开发的商品房,二手房买卖存在更多的风险。为此,新报法律专家团成员,德欣律师事务所任秀福律师专门总结了买卖二手房的几个陷阱,提醒买房人注意。
陷阱1
房屋买卖前,验证产权证是买房人一般都不会忽略的环节,但产权证的真实性并不是所有人都会考虑的。最直接、有效的防范方法,是到房地产产权登记部门进行查询,核实产权的真实性。
陷阱2
出卖人具有合法处分权,是保证“二手房”买卖行为合法有效的基本条件,否则可能导 致买卖合同无效,这是二手房买卖中常见的“陷阱”。要想避开这个陷阱,买房人应注意 以下几个方面的问题:出卖人必须是产权证上登记的产权人;如果房屋有多个共有人需要全体共有人共同签订房屋买卖合同;如果出卖人为已婚,买卖行为需要取得其配偶的确认,购买二手公有住房,应取得共同居住人同意。
陷阱
3在签订买卖合同后,如果卖房人又将该房屋卖给他人,并且办理了过户手续,致使先前的买卖合同无法履行。“预告登记”是避免这一陷阱的有效手段,但买房人要注意,必须在预告登记后三个月内去办理申请产权变更登记,超过三个月未申请的,预告登记失效。
陷阱4
购买的房屋正由出卖人或承租人居住的情况下,在买房人付款后,如果房屋居住人拒不交付房屋,买房人仍会无房可住。为避免这一陷阱,在购买这类房屋时,买房人应在房屋腾空,具备交付条件后 再交付房款并在付款后立即接收房屋。
陷阱5
一些没有办理产权证的房屋,是因为存在难以解决的问题(如开发商欠缴政府费用、设计变更未经批准),可能在长时间内无法取得产权证。如购买此类房屋,先要把未办理产权证的原因弄清楚,对未 来风险有充分预期,再决定是否购买。
陷阱6
如果房屋存在被抵押、被法院查封情况等产权受限制的情况存在,买房人在购买房屋后,将无法顺利取得所有权,甚至可能造成经济损失。买房人应事先到房地产管理部门进行查询,如存在上述情况,不要购买。
陷阱7
为卖出房屋,卖房人经常会向买房人提供虚假信息和承诺,但有些内容并未写进合同中。事后,当买房人发现问题时,有苦难言。为避免这个“陷阱”,买房人应就关心的问题询问卖房人后,尽可能去核实情况的真实性,同时要求将这些内容写进合同里。
陷阱8
原房主如果欠缴暖气、水、电、有线电视等费用,会导致买房人无法正常使用这些附属设施。买房人首先要了解清楚相关情况,同时把法律责任明确写进合同当中来约束卖房人。
购买二手房时应注意以下问题:
1、产权是否可靠:需注意产权证上的名字与房主是否一致,产权的性质和内容,包括面积、地址及标准价房的分配比例。同时,还要验看正本、查询产权证的真实性。此
外,还要知晓二手房是成本价房还是标准价房或者是经济适用房,产权性质的不同牵涉到成交过程的复杂程度,也牵涉到买房收益的分配问题,最终影响到二手房买卖合同的签订。
2、原单位是否允许转卖:需确认原单位是否同意出让及与原产权单位确认利益的分配办法,标准价购买的公房出让是存在按成本价补足费用或者与原单位按比例分成的问题,买主应当对此有所了解。此外,军产、院产、校产的公房一般与本单位的办公场所在一个大院里,上述单位一般被列为特殊单位,这种公房单位没有同意之前,不可能取得上市资格。
3、是否有私搭私建部分:需注意是否占用公共空间,是否有改动过房屋的内部结构,是否有牵涉到面积计算的结构改动,在购买时应该将这些因素考虑到,并将额外增加的面积刨除在房价计算之外,当然了,这需要和房主具体协商了。
4、确认所购二手房的准确面积:产权证上一般标明的是建筑面积,买主还需了解使用面积和户内的实际面积。
5、认真观察房屋的内部结构,注意户型是否合理,管线是否太多,二手房是否带装修,另外,还要所要房屋的内部结构图,以便日后装修。
6、查询物业的管理水平,包括提供服务的内容和水准、保安、保洁、绿化的水准及基本生活设施的管理。
7、考察房屋的市政配套:主要包括水、有线电视、供电容量、电线、电话线、煤气、天然气、热水、暖气。
第五篇:PHP中时间和日期函数总结
PHP中时间和日期函数总结
2007-11-29 00:40:28 标签:php 时间 日期函数
PHP中所有函数都是UNIX纪元的,即从1970年1月1日开始的。日期是从这个时候开始的秒数。当一个函数调用从这时候计的秒数时,就把它当作(timestamp)时间戳。本地时间函数
1.string date(string format,inieger timestamp)该函数返回一个表示时间的字符串,是由string format 控制的。如: print(date(“Y年 m月d日”);//输出当前,年月日.print(date(“Y年 m月d日”,60*60*24*365*10);//输出1980年1月1日.?> 也许你会问,怎麽没有timestamp呢?若timestamp为空时,或不写时,表示使用当前时间一刻timestamp.表示年份的控制符: Y---四位的年份 y---两位的年份
表示月份的控制符: m---从1-12的月份 F---英文月份名 M---简写的月份名 表示日号的控制符: d---前面有0的月份中日期 j--前面没有0的日号 表示星期的控制符: l--英文星期 D--简写的星期
表示小时的控制符: h--从1到12小时 H---从0到23的小时 表示上下午的控制符 a---am或pm A---AM或PM 表示分钟的控制符: i---取值00-59 表示一年中第多少天: z--一年中的第多少天 2.array getdate(integer timestamp)该函数返回一个矩阵.如: $current_date=getdate();print($current_date(“hours”));print($current_date(“minutes”);print($current_date(“seconds”);?> 说明: 元素 描述
hours 24小时格式的小时 mday 月份中日期 minutes 分钟
mon 数字形式的月份 month 月份全称 seconds 秒数
wday 从0到6的数字形式的星期几 weekday 星期几的名称 year 年份
0 时间戳即从1970年1月1日到现在的秒数 yday 一年中数字形式的日期
3.boolean checkdate(integer month,integer day,integer year)该函数检查日期是否合法.如: if(checkdate(2,29,1980))print(“日期合法!n”);?> 4.integer time()该函数获得当前时间戳.如: print(time());//输出一大串整数 ?> 5.integer mktime(integer hour,integer minutes,integer seconds,integer month, integer day,integer year)该函数返回给出日期的时间戳,即从1970年1月1日到现在的秒数.如某参数超出范围,该函数也可以解释它,如13月即为第二年的一月.如: $currenthour=date(“H”);print(“50个小时后为:”);print(date(“h:i A l F dS,Y”,mktime($currenthour+50)));print(“
n”);?> 6.string microtime()该函数返回一个字符串,由当前时间的毫秒数+空格+从1970年开始的秒数 print(“start:microtime()
n”);for($index=0;$index<1000;$index++)print(“good!”);print(“stop:microtime()
n”);?> 还有,各林威治标准时间函数