当前位置:  编程技术>php
本页文章导读:
    ▪PHP计算页面执行时间的代码举例      实现方法一:   <?php /** * 获取页面执行时间 * edit www. */ $t = new executeTime; phpinfo(); class executeTime{ private $microtime; public function __construct(){ $this->microtime = microtime(true); } public funct.........
    ▪php防止ddos,dns,集群攻击的实现代码      代码如下:   代码示例: <?php /** * 防止ddos、dns、集群等攻击 * edit www. */ //查询禁止IP $ip =$_SERVER['REMOTE_ADDR']; $fileht=".htaccess2"; if(!file_exists($fileht)) file_put_contents($fileht,""); $filehtarr=@file.........
    ▪PHP工厂模式的实例分析      php的工厂模式,可以方便的使用一个静态的工厂方法来实例化某一个类。 一般实例化一个类,会给它一些参数,以便在其构析时,可以根据不同的参数反馈出需要的结果。 来看一个具体的例.........

[1]PHP计算页面执行时间的代码举例
    来源: 互联网  发布时间: 2013-12-24

实现方法一:
 

<?php
/**
 * 获取页面执行时间
 * edit www.
*/
$t = new executeTime;
phpinfo();
class executeTime{
private $microtime;
public function __construct(){
$this->microtime = microtime(true);
}

public function getNow(){
$this->__dectruct();
}

public function __destruct(){
if (empty($_SERVER['REQUEST_TIME_FLOAT']))
echo '<div >本次执行时间:', microtime(TRUE) - $this->microtime, '秒</div>';
else
echo '<div >本次执行时间:', microtime(TRUE) - $_SERVER['REQUEST_TIME_FLOAT'], '秒</div>';
}
} 

另一种方法:
 

<?
$pagestartime=microtime();
?>
<!--网页内容 start-->
网页内容
...
...
<!--网页内容 end-->
<?
$pageendtime = microtime();
$starttime = explode()(" ",$pagestartime);
$endtime = explode(" ",$pageendtime);
$totaltime = $endtime[0]-$starttime[0]+$endtime[1]-$starttime[1];
$timecost = sprintf()("%s",$totaltime);
echo "页面运行时间: $timecost 秒";
?> 

    
[2]php防止ddos,dns,集群攻击的实现代码
    来源: 互联网  发布时间: 2013-12-24

代码如下:
 

代码示例:
<?php
/**
* 防止ddos、dns、集群等攻击
* edit www.
*/
//查询禁止IP
$ip =$_SERVER['REMOTE_ADDR'];
$fileht=".htaccess2";
if(!file_exists($fileht))
file_put_contents($fileht,"");
$filehtarr=@file($fileht);
if(in_array($ip."\r\n",$filehtarr))
die("Warning:"."<br>"."Your IP address are forbided by some reason, IF you have any question Pls emill to shop@xxx.com!");
//加入禁止IP
$time=time();
$fileforbid="log/forbidchk.dat";
if(file_exists($fileforbid)) {
if($time-filemtime($fileforbid)>60)
unlink($fileforbid);
else {
$fileforbidarr=@file($fileforbid);
if($ip==substr($fileforbidarr[0],0,strlen($ip))) {
if($time-substr($fileforbidarr[1],0,strlen($time))>600)
unlink($fileforbid);
elseif($fileforbidarr[2]>600) {
file_put_contents($fileht,$ip."\r\n",FILE_APPEND);
unlink($fileforbid);
} else {
$fileforbidarr[2]++;
file_put_contents($fileforbid,$fileforbidarr);
}
}
}
}
//防刷新
$str="";
$file="log/ipdate.dat";
if(!file_exists("log")&&!is_dir("log"))
mkdir("log",0777);
if(!file_exists($file))
file_put_contents($file,"");
$allowTime = 120;//防刷新时间
$allowNum=10;//防刷新次数
$uri=$_SERVER['REQUEST_URI'];
$checkip=md5($ip);
$checkuri=md5($uri);
$yesno=true;
$ipdate=@file($file);
foreach($ipdate as $k=>$v) {
$iptem=substr($v,0,32);
$uritem=substr($v,32,32);
$timetem=substr($v,64,10);
$numtem=substr($v,74);
if($time-$timetem<$allowTime) {
if($iptem!=$checkip)
$str.=$v;
else {
$yesno=false;
if($uritem!=$checkuri)
$str.=$iptem.$checkuri.$time."1\r\n";
elseif($numtem<$allowNum)
$str.=$iptem.$uritem.$timetem.($numtem+1)."\r\n";
else {
if(!file_exists($fileforbid)) {
$addforbidarr=array($ip."\r\n",time()."\r\n",1);
file_put_contents($fileforbid,$addforbidarr);
}
file_put_contents("log/forbided_ip.log",$ip."--".date("Y-m-d H:i:s",time())."--".$uri."\r\n",FILE_APPEND);
$timepass=$timetem+$allowTime-$time;
die("Warning:"."<br>"."Sorry,you are forbided by refreshing frequently too much, Pls wait for ".$timepass." seconds to continue!");
}
}
}
}
if($yesno) $str.=$checkip.$checkuri.$time."1\r\n";
file_put_contents($file,$str);
?>

    
[3]PHP工厂模式的实例分析
    来源: 互联网  发布时间: 2013-12-24

php的工厂模式,可以方便的使用一个静态的工厂方法来实例化某一个类。
一般实例化一个类,会给它一些参数,以便在其构析时,可以根据不同的参数反馈出需要的结果。

来看一个具体的例子吧,
一个User类:
 

代码示例:
<?php
interface IUser{
function getName();
function getAge();
}
class User implements IUser{
protected $_name;
protected $_age;
function __construct($name, $age){
$this->_name = $name;
$this->_age = (int)$age;
}
function getName(){
return $this->_name;
}
function getAge(){
return $this->_age;
}
}
?>
 

如果要实例化这个类,可以这样:
 

代码示例:
$u = new User(‘小明‘,19);

一般如果这个类很少使用,那么这样做没什么太大影响,也非常好。

如果想给这个类增加一个归类,把小明放入学生组,修改下类代码实现非常容易,但如果这个类在想修改之前在很多文件地方多次的实例化了,那么想为其增加一个参数就会变的非常烦琐,因为需要替换成:
 

代码示例:
$u = new User(‘小明‘,19,‘学生‘);

当然,也可以通过在__construct函数中进行默认值设置来避免这种重复劳动,但事实上从代码优雅角度来说这样很不好,设想我们有一个工厂方法可以通过一个标识来对应一组参数,并把这个参数存放在某个文本文档或是直接以数组的形式存放在工厂类中,在调用User类的时候就会变的轻松许多,即便是需要增减参数属性也不需要到处进行代码的替换。

以下就是一个工厂类(也可以直接将方法存放在User类中),代码如下:
 

代码示例:

<?php
/**
* php工厂设计模式的实例
* edit www.
*/
interface IUser{
function getName();
function getAge();
}
class User implements IUser{
protected $_group;
protected $_name;
protected $_age;
function __construct($name, $age, $group){
$this->_group = $group;
$this->_name = $name;
$this->_age = (int)$age;
}
function getName(){
return $this->_name;
}
function getAge(){
return $this->_age;
}
}
class Fuser{
private static $group = array(
array(‘小明‘,19,‘学生‘),
array(‘小王‘,19,‘学生‘)
);
static function create($id){
list($name, $age, $group) = self::$group[(int)$id];
return new User($name, $age, $group);
}
}

//调用示例
echo Fuser::create(0)->getName();
?>

输出结果:
“小明”。


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3