本文章来给大家总结了一些常用的关于在php定时执行任务实现方法详解,包括直接利用php来操作,还有使用操作系统的计划任务来操作,有需要了解的同学可参考。
每个PHP脚本都限制了执行时间,所以我们需要通过 set_time_limit 来设置一个脚本的执行时间为无限长;然后使用 flush() 和 ob_flush() 来清除服务器缓冲区,随时输出脚本的返回值。 当我们执行后,每隔5秒钟,我们会得到一行 Hello World
代码如下 |
复制代码 |
header("Content-Type: text/plain");
set_time_limit(0);
$infoString = "Hello World" . "n";
while( isset($infoString) )
{
echo $infoString;
flush();
ob_flush();
sleep(5);
}
|
例
代码如下 |
复制代码 |
<?php
ignore_user_abort(); // 即使Client断开(如关掉浏览器),PHP脚本也可以继续执行.
set_time_limit(0); // 执行时间为无限制,php默认的执行时间是30秒,通过set_time_limit(0)可以让程序无限制的执行下去
$interval=20; // 时间间隔 单位 秒
$key_file="key.txt"; // 配置文件
if (isset($_GET['s']))
{
if ($_GET['s']=="0"){ // 停止工作,但不退出
$s="false";
echo "Function is off";
}
elseif ($_GET['s']=="1"){ // 工作
$s="true";
echo "Function is on";
}
elseif ($_GET['s']=="2"){ // 退出
$s="die";
echo "Function exited";
}
else
die("Err 0:stop working 1:working 2:exit");
$string = "<?phpn return "".$s."";n?>";
write_inc($key_file,$string,true);
exit();
}
if(file_exists($key_file)){
do{
$mkey = include $key_file;
if ($mkey=="true"){ // 如果工作
///////////////////// 工作区间 //////////////////////////////////
$showtime=date("Y-m-d H:i:s");
$fp = fopen('func.txt','a');
fwrite($fp,$showtime."n");
fclose($fp);
///////////////////////////////////////////////////////////////////
}
elseif ($mkey=="die"){ // 如果退出
die("I am dying!");
}
sleep($interval); // 等待$interval分钟
}while(true);
}
else
die($key_file." doesn't exist !");
function write_inc($path,$strings,$type=false)
{
$path=dirname(__FILE__)."/".$path;
if ($type==false)
file_put_contents($path,$strings,FILE_APPEND);
else
file_put_contents($path,$strings);
}
?>
|
个人觉得在php定时执行任务还是有点复杂并且不好使用,下面我来介绍在操作系统中计划任务来实现。
在网上找了些WINDOWS执行PHP的计划任务的方法,有一个写得很全,可惜在我这竟然没通过。最后不得不综合各门派的方法,才能在我这运行成功。
1、写一个PHP程序,命名为test.php,内容如下所示:
代码如下 |
复制代码 |
<?
$fp = fopen("test.txt", "a+");
fwrite($fp, date("Y-m-d H:i:s") . " 成功成功了!n");
fclose($fp);
?>
|
程序大胆地写,什么includerequire尽管用,都没问题
2、新建Bat文件,命名为test.bat,内容如下所示:
代码如下 |
复制代码 |
D:phpphp.exe -q D:websitetest.php
|
//相应目录自己改上
3、建立WINDOWS计划任务:
开始–>控制面板–>任务计划–>添加任务计划
浏览文件夹选择上面的bat文件
设置时间和密码(登陆WINDOWS的)
保存即可了。
4、over! 可以右键计划任务点“运行”试试
linux系统中
我们可以借助Linux的Crontab工具来稳定可靠地触发PHP执行任务。
下面介绍Crontab的两种方法。
一、在Crontab中使用PHP执行脚本
就像在Crontab中调用普通的shell脚本一样(具体Crontab用法),使用PHP程序来调用PHP脚本。
每一小时执行myscript.php如下:
1.
代码如下 |
复制代码 |
# crontab -e
2.00 * * * * /usr/local/bin/php /home/john/myscript.php
/usr/local/bin/php |
为PHP程序的路径。
二、在Crontab中使用URL执行脚本
如果你的PHP脚本可以通过URL触发,你可以使用lynx或curl或wget来配置你的Crontab。
下面的例子是使用Lynx文本浏览器访问URL来每小时执行PHP脚本。Lynx文本浏览器默认使用对话方式打开URL。但是,像下面的,我们在lynx命令行中使用-dump选项来把URL的输出转换来标准输出。
代码如下 |
复制代码 |
1.00 * * * * lynx -dump /myscript.php
|
下面的例子是使用CURL访问URL来每5分执行PHP脚本。Curl默认在标准输出显示输出。使用"curl -o"选项,你也可以把脚本的输出转储到临时文件。
代码如下 |
复制代码 |
1.*/5 * * * * /usr/bin/curl -o temp.txt /myscript.php
|
下面的例子是使用WGET访问URL来每10分执行PHP脚本。-q选项表示安静模式。"-O temp.txt"表示输出会发送到临时文件。
代码如下 |
复制代码 |
1.*/10 * * * * /usr/bin/wget -q -O temp.txt /myscript.php
|
网页截图这个功能大家可能用到最多的就是QQ截图,或利用asp.net来实现截图,其实我们也可以直接使用php来网页截图哦,下面我来给大家介绍php利用CutyCapt实现网页截图,有需要的朋友可参考。
CutyCapt下载地址:http://sourceforge.net/projects/cutycapt/files/cutycapt/
windows CutyCapt不需要安装,直接保存到你的电脑中即可。
然后你php代码如下写
代码如下 |
复制代码 |
<?php
/*
网页截图功能,必须安装IE+CutyCapt
url:要截图的网页
out:图片保存路径
path:CutyCapt路径
cmd:CutyCapt执行命令
比如:http://你php路径.php?url=http://www.111cn.net
*/
$url=$_GET["url"];
$imgname=str_replace('http://','',$url);
$imgname=str_replace('https://','',$imgname);
$imgname=str_replace('.','-',$imgname);
$out = 'D:/webroot/test/'.$imgname.'.png';
$path = 'D:/webserver/CutyCapt.exe';
$cmd = "$path --url=$url --out=$out";
echo $cmd;
system($cmd);
?>
|
如果你是linux系统就需要简单的配置一下CutyCapt
安装网站截图软件CutyCapt
一,先安装Qt47
增加qt47的下载源
代码如下 |
复制代码 |
vi /etc/yum.repos.d/atrpms.repo
[atrpms]
name=CentOS $releasever – $basearch – ATrpms
baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stable
gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms
gpgcheck=1
enabled=1
[atrpms-testing]
name=CentOS $releasever – $basearch – ATrpms testing
baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/testing
gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms
gpgcheck=1
enabled=1
yum update
yum installqt47
yum installqt47-devel
yum installqt47-webkit
yum installqt47-webkit-devel
|
也许这里还会有报错提示
warning: qt44-x11-4.4.3-10_4.el5.x86_64.rpm: Header V4 DSA signature: NOKEY, key ID 66534c2b
error: Failed dependencies:
libGLU.so.1()(64bit) is needed by qt44-x11-4.4.3-10_4.el5.x86_64
libmng.so.1()(64bit) is needed by qt44-x11-4.4.3-10_4.el5.x86_64
解决:
yum -y installqt-devel*
二,安装 CutyCapt
代码如下 |
复制代码 |
cd /data0/software
svn co https://cutycapt.svn.sourceforge.net/svnroot/cutycapt
mv cutycapt/CutyCapt /usr/local/cutycapt
cd /usr/local/cutycapt
qmake
make
|
此处可能会报错
make: *** [CutyCapt] Error 1
解决:
yum update sqlite
再次执行 make
如果还不成功 qmake-qt47 再次执行make
三,下载x-server
代码如下 |
复制代码 |
wget http://www.flexthinker.com/wp-content/uploads/2009/11/xvfb-run.sh.txt
mv ./xvfb-run.sh.txt/usr/local/cutycapt/xvfb-run.sh
chmodu+x /usr/local/CutyCapt/xvfb-run.sh
|
四,安装中文包
yum installfonts-chinese
五,安装ImageMagick
yum installImageMagick
六,测试:
代码如下 |
复制代码 |
/usr/local/cutycapt/xvfb-run.sh --server-args="-screen 0, 1024x768x24"/usr/local/cutycapt/CutyCapt --url=http://www.111cn.net--out=/tmp/163.jpg
|
163.jpg没有加载出flash
七,下载64位flash插件:
代码如下 |
复制代码 |
cd /data0/software
#wget http://119.188.72.26/1/ishare.down.sina.com.cn/14036482.so?ssig=YB70Xk7Ph9&Expires=1340899200&KID=sina,ishare&ip=1340777795,114.255.44.&fn=libflashplayer.so
<a href="http://ishare.iask.sina.com.cn/f/13659493.html" target="_blank">http://ishare.iask.sina.com.cn/f/13659493.html</a>
ll /usr/lib64/mozilla/plugins/
lrwxrwxrwx 1 root root 41 06-27 14:00 libflashplayer.so ->/usr/lib64/flash-plugin/libflashplayer.so
cp /data0/software/libflashplayer.so /usr/lib64/flash-plugin/
|
测试加载成功
swfupload是一个flash插件它可以结合php来快速实现图片文件无刷新上传,同时还可以批量上传图片,下面我来给大家介绍PHP swfupload图片文件上传实例代码有需要了解的中参考。
效果图
index.php文件
代码如下 |
复制代码 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>SWFUpload Demos - SWFObject Demo</title>
<link href="../css/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript"" width=100% src="../swfupload/swfupload.js"></script>
<script type="text/javascript"" width=100% src="js/swfupload.swfobject.js"></script>
<script type="text/javascript"" width=100% src="js/swfupload.queue.js"></script>
<script type="text/javascript"" width=100% src="js/fileprogress.js"></script>
<script type="text/javascript"" width=100% src="js/handlers.js"></script>
<script type="text/javascript">
var swfu;
SWFUpload.onload = function () {
var settings = {
flash_url : "../swfupload/swfupload.swf",
upload_url: "upload.php",
post_params: {
"PHPSESSID" : "NONE",
"HELLO-WORLD" : "Here I Am",
".what" : "OKAY"
},
file_size_limit : "100 MB",
file_types : "*.jpg;*.gif;*.png;*.jpeg;",
file_types_description : "All Files",
file_upload_limit : 100,
file_queue_limit : 0,
custom_settings : {
progressTarget : "fsUploadProgress",
cancelButtonId : "btnCancel"
},
debug: false,
// Button Settings
button_image_url : "XPButtonUploadText_61x22.png",
button_placeholder_id : "spanButtonPlaceholder",
button_width: 61,
button_height: 22,
// The event handler functions are defined in handlers.js
swfupload_loaded_handler : swfUploadLoaded,
file_queued_handler : fileQueued,
file_queue_error_handler : fileQueueError,
file_dialog_complete_handler : fileDialogComplete,
upload_start_handler : uploadStart,
upload_progress_handler : uploadProgress,
upload_error_handler : uploadError,
upload_success_handler : uploadSuccess,
upload_complete_handler : uploadComplete,
queue_complete_handler : queueComplete, // Queue plugin event
// SWFObject settings
minimum_flash_version : "9.0.28",
swfupload_pre_load_handler : swfUploadPreLoad,
swfupload_load_failed_handler : swfUploadLoadFailed
};
swfu = new SWFUpload(settings);
}
</script>
</head>
<body>
<div id="header">
<h1 id="logo"><a href="../">SWFUpload</a></h1>
<div id="version">v2.2.0</div>
</div>
<div id="content">
<h2>SWFObject Demo</h2>
<form id="form1" action="index.php" method="post" enctype="multipart/form-data">
<p> This page demonstrates the SWFObject plugin. Do each of the following (one at a time) to see the plugin work: </p>
<ul>
<li>Uninstall your Flash Player or install a version less than 9.0.28</li>
<li>Cause the SWF file to fail to load by deleting or renaming swfupload.swf (simulating a very slow or failed download)</li>
<li>Disable JavaScript</li>
</ul>
<p>
Each of these tests demontrate how these issues can be handled by SWFUpload and the SWFObject libraries.
</p>
<div id="divSWFUploadUI">
<div class="fieldset flash" id="fsUploadProgress">
<span class="legend">Upload Queue</span>
</div>
<p id="divStatus">0 Files Uploaded</p>
<p>
<span id="spanButtonPlaceholder"></span>
<input id="btnCancel" type="button" value="Cancel All Uploads" disabled="disabled" style="margin-left: 2px; height: 22px; font-size: 8pt;" />
<br />
</p>
</div>
<noscript>
<div style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px;">
We're sorry. SWFUpload could not load. You must have JavaScript enabled to enjoy SWFUpload.
</div>
</noscript>
<div id="divLoadingContent" class="content" style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;">
SWFUpload is loading. Please wait a moment...
</div>
<div id="divLongLoading" class="content" style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;">
SWFUpload is taking a long time to load or the load has failed. Please make sure that the Flash Plugin is enabled and that a working version of the Adobe Flash Player is installed.
</div>
<div id="divAlternateContent" class="content" style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;">
</div>
</form>
</div>
</body>
</html>
|
核心处理程序php代码
代码如下 |
复制代码 |
if (isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) {
$upload_file = $_FILES['Filedata'];
$file_info = pathinfo($upload_file['name']);
$file_type = $file_info['extension'];
$save = 'image/' . md5(uniqid($_FILES["Filedata"]['name'])) . '.' . $file_info['extension'];
$name = $_FILES['Filedata']['tmp_name'];
if (!move_uploaded_file($name, $save)) {
exit;
}
//将数组的输出存起来以供查看
$fileName = 'test.txt';
$postData = var_export($file_info, true);
$file = fopen('' . $fileName, "w");
fwrite($file,$postData);
fclose($file);
}
|
swfUpload注意事项
swfuplaod在上传时,会新开一个进程,和原来的进程不一致,要解决这个问题,需要指定session_id,然后在登录页面判断,如果有post过来的session_id,那么就用函数session_id( $_POST['PHP_SESSIONID'])指定一下。
上传页的JS里面,可以获取当前的SESSION_ID的。
例如上传页的JS中:
代码如下 |
复制代码 |
post_params: {"PHPSESSID": "<?php echo session_id(); ?>"},
|
在验证的判断页中:
代码如下 |
复制代码 |
if (isset($_POST["PHPSESSID"])) {
session_id($_POST["PHPSESSID"]);
}
|
(这一段是网上的注释:在带有Session验证的网站后台中SWFUpload无法正常工作,这是因为SWFUpload在上传时相当于重新开辟了一个新的Session 进程,因此无法与原有程序的Session保持一致,这就需要在上传时传递原有程序的SessionID,根据它来“找回”其应有的Session。)
完整实例下载地址:http://file.111cn.net/download/2013/05/14/swfupload.zip
本文章来给大家介绍一个jQuery+Ajax+PHP实现“喜欢”评级功能代码,用户点击页面中自己喜欢的图片上的红心按钮时,前端页面向后台发送一个ajax请求,后台PHP程序接收请求后,查询IP库中是否已经有该用户的点击记录,如果没有,则将对应的数值+1,同时将该用户IP信息写入IP库,反之则告诉用户已经“喜欢过了”。
数据库设计
先准备两张表,pic表保存的是图片信息,包括图片对应的名称、路径以及图片“喜欢”总数,pic_ip则记录用户点击喜欢后的IP数据。
CREATE TABLE IF NOT EXISTS `pic` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pic_name` varchar(60) NOT NULL,
`pic_url` varchar(60) NOT NULL,
`love` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `pic_ip` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pic_id` int(11) NOT NULL,
`ip` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
index.php
在index.php中,我们通过PHP读取pic表中的图片信息并展示出来,结合CSS,提升页面展示效果。
代码如下 |
复制代码 |
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="keywords" content="jquery">
<meta name="description" content="">
<title>jQuery+Ajax+PHP实现"喜欢"评级</title>
<link rel="stylesheet" type="text/css" href="../css/main.css" />
<script type="text/javascript"" width=100% src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$("p a").click(function(){
var love = $(this);
var id = love.attr("rel");
love.fadeOut(300);
$.ajax({
type:"POST",
url:"love.php",
data:"id="+id,
cache:false,
success:function(data){
love.html(data);
love.fadeIn(300);
}
});
return false;
});
});
</script>
<style type="text/css">
.clear{clear:both}
.list{width:760px; margin:20px auto}
.list li{float:left; width:360px; height:280px; margin:10px; position:relative}
.list li p{position:absolute; top:0; left:0; width:360px; height:24px; line-height:24px; background:#000; opacity:.8;filter:alpha(opacity=80);}
.list li p a{padding-left:30px; height:24px; background:url(images/heart.png) no-repeat 4px -1px;color:#fff; font-weight:bold; font-size:14px}
.list li p a:hover{background-position:4px -25px;text-decoration:none}
</style>
</head>
<body>
<div id="main">
<ul class="list">
<?php
include_once("connect.php");
$sql = mysql_query("select * from pic");
while($row=mysql_fetch_array($sql)){
$pic_id = $row['id'];
$pic_name = $row['pic_name'];
$pic_url = $row['pic_url'];
$love = $row['love'];
?>
<li><img" width=100% src="images/<?php echo $pic_url;?>" alt="<?php echo $pic_name;?>"><p><a href="#" title="我喜欢" class="img_on" rel="<?php echo $pic_id;?>"><?php echo $love;?></a></p></li>
<?php }?>
</ul>
</div>
</body>
</html>
|
CSS中,我们将定义鼠标滑向和离开红心按钮的动态效果,并定位按钮的位置。
代码如下 |
复制代码 |
.list{width:760px; margin:20px auto}
.list li{float:left; width:360px; height:280px; margin:10px; position:relative}
.list li p{position:absolute; top:0; left:0; width:360px; height:24px; line-height:24px;
background:#000; opacity:.8;filter:alpha(opacity=80);}
.list li p a{padding-left:30px; height:24px; background:url(images/heart.png) no-repeat
4px -1px;color:#fff; font-weight:bold; font-size:14px}
.list li p a:hover{background-position:4px -25px;text-decoration:none}
|
jQuery代码
当用户点击自己喜欢的图片上的红心按钮时,向后台love.php发送ajax请求,请求响应成功后,更新原有的数值。
代码如下 |
复制代码 |
$(function(){
$("p a").click(function(){
var love = $(this);
var id = love.attr("rel"); //对应id
love.fadeOut(300); //渐隐效果
$.ajax({
type:"POST",
url:"love.php",
data:"id="+id,
cache:false, //不缓存此页面
success:function(data){
love.html(data);
love.fadeIn(300); //渐显效果
}
});
return false;
});
});
|
love.php
后台love.php接收前端的ajax请求,根据提交的图片id值,查找IP表中是否已有该用户ip的点击记录,如果有则告诉用户已“喜欢过了”,反之,则进行一下操作:
1、更新图片表中对应的图片love字段值,将数值加1。
2、将该用户IP信息写入到pic_ip表中,用以防止用户重复点击。
3、获取更新后的love值,即喜欢该图片的用户总数,并将该总数输出给前端页面。
代码如下 |
复制代码 |
<?php
$host="localhost";
$db_user="root";
$db_pass="";
$db_name="demo";
$timezone="Asia/Shanghai";
$link=mysql_connect($host,$db_user,$db_pass);
mysql_select_db($db_name,$link);
mysql_query("SET names UTF8");
?>
<?php
include_once("connect.php");
$ip = get_client_ip();
$id = $_POST['id'];
if(!isset($id) || empty($id)) exit;
$ip_sql=mysql_query("select ip from pic_ip where pic_id='$id' and ip='$ip'");
$count=mysql_num_rows($ip_sql);
if($count==0){
$sql = "update pic set love=love+1 where id='$id'";
mysql_query( $sql);
$sql_in = "insert into pic_ip (pic_id,ip) values ('$id','$ip')";
mysql_query( $sql_in);
$result = mysql_query("select love from pic where id='$id'");
$row = mysql_fetch_array($result);
$love = $row['love'];
echo $love;
}else{
echo "喜欢过了..";
}
//获取用户真实IP
function get_client_ip() {
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else
if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else
if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else
if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return ($ip);
}
?>
|
代码中get_client_ip()函数是用来获取用户的真实IP
本文章来给大家介绍二种利用php来实现页面跳转与跨站提交伪造Referer地址来源具体实现,方法主要用到了fsockopen,curl两个函数,有需要了解的朋友可进入参考。
一、尝试过的URL跳转方法
代码如下 |
复制代码 |
echo '<meta http-equiv="refresh" content="0; URL='.$url.'">';
echo '<scrīpt language="Javascrīpt">window.location.href="'.$url.'";</scrīpt>';
echo '<script language="Javascrīpt">window.location.replace="'.$url.'";</ script>';
|
以上三种方法均无法传递REFERER地址。
二、使用PHP Socket函数伪造REFER
下面是PHP伪造REFERER代码部分,经过测试可以实现REFERER地址传递,其中$url是输入地址。
代码如下 |
复制代码 |
$uinfo = parse_url($url);//解析URL地址,比如http://111cn.net/archives/1.html
if($uinfo['path']) //
$data = $uinfo['path'];//这里得到/archives/1.html
else
$data = '/';//默认根
if(!$fsp = @fsockopen($uinfo['host'], (($uinfo['port']) ? $uinfo['port'] : "80"), $errno, $errstr, 12)){
echo "对不起对方网站暂时无法打开,请您稍后访问:".$uinfo['host']; exit;
}else{
fputs($fsp, "GET “.$data .” HTTP/1.0rn");//如果是跨站POST提交,可使用POST方法
fputs($fsp, "Host: ".$uinfo['host']."rn");
fputs($fsp, "Referer: 111cn.netrn");//伪造REFERER地址
fputs($fsp, "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)rnrn");
$res='';
while(!feof($fsp)) {
$res.=fgets($fsp, 128);
if(strstr($res,"200 OK")) {
header("Location:$url"); exit;
}
}
}
//如果是301或302状态码可以继续处理
//返回地址大概形式:HTTP/1.1 301 Moved PermanentlynContent-Length: 164nContent-Type: text/htmlnLocation: http://111cn.net/
$arr=explode("n",$res);
$arr=explode(": ",$arr[3]);//Location后面是真实重定向地址
header("location:".$arr[0]);//跳转目标地址
exit;
|
利用另一种方法 curl)伪造HTTP_REFERER
代码如下 |
复制代码 |
//PHP(前提是装了curl):
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "http://www.111cn.net/");
curl_setopt ($ch, CURLOPT_REFERER, "http://www.111cn.net/");
curl_exec ($ch);
curl_close ($ch);
//PHP(不装curl用sock)
$server = 'blog.qita.in';
$host = 'blog.qita.in';
$target = '/xxx.asp';
$referer = 'http://www.baidu.com/'; // Referer
$port = 80;
$fp = fsockopen($server, $port, $errno, $errstr, 30);
if (!$fp)
{
echo "$errstr ($errno)<br />n";
}
else
{
$out = "GET $target HTTP/1.1rn";
$out .= "Host: $hostrn";
$out .= "Cookie: ASPSESSIONIDSQTBQSDA=DFCAPKLBBFICDAFMHNKIGKEGrn";
$out .= "Referer: $refererrn";
$out .= "Connection: Closernrn";
fwrite($fp, $out);
while (!feof($fp))
{
echo fgets($fp, 128);
}
fclose($fp);
}
|
标签:[!--infotagslink--]