您当前的位置: 首页 > 网站编程 > PHP教程 > 解析php下载远程图片函数 可伪造来路

解析php下载远程图片函数 可伪造来路

作者:不详 来源:网络 发布时间: 2014-08-19 09:09 点击:
gurl 要下载的图片地址 $rfurl 来路。如果目标图像做了防盗链设置,可以绕过。 $filename 下载图片保存的文件名,相对路径,不要用realpath $gcookie 调整cookie 伪造的cookie $JumpCount 跳转计数 $maxtime 最大次数 调用方法:DownImageKeep(http://www.baidu.com/im

解析php下载远程图片函数 可伪造来路

  gurl 要下载的图片地址

  $rfurl 来路。如果目标图像做了防盗链设置,可以绕过。

  $filename 下载图片保存的文件名,相对路径,不要用realpath

  $gcookie 调整cookie 伪造的cookie

  $JumpCount 跳转计数

  $maxtime 最大次数

  调用方法:DownImageKeep(“http://www.baidu.com/img/baidu_jgylogo2.gif”,”http://baidu.com”,”a.gif”,”",0,10);

  复制代码 代码如下:

  <?php

  function DownImageKeep($gurl, $rfurl, $filename, $gcookie="", $JumpCount=0, $maxtime=30)

  {

  $urlinfos = GetHostInfo($gurl);

  $ghost = trim($urlinfos['host']);

  if($ghost=='')

  {

  return FALSE;

  }

  $gquery = $urlinfos['query'];

  if($gcookie=="" && !empty($rfurl))

  {

  $gcookie = RefurlCookie($rfurl);

  }

  $sessionQuery = "GET $gquery HTTP/1.1rn";

  $sessionQuery .= "Host: $ghostrn";

  $sessionQuery .= "Referer: $rfurlrn";

  $sessionQuery .= "Accept: */*rn";

  $sessionQuery .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)rn";

  if($gcookie!="" && !preg_match("/[rn]/", $gcookie))

  {

  $sessionQuery .= $gcookie."rn";

  }

  $sessionQuery .= "Connection: Keep-Alivernrn";

  $errno = "";

  $errstr = "";

  $m_fp = fsockopen($ghost, 80, $errno, $errstr,10);

  fwrite($m_fp,$sessionQuery);

  $lnum = 0;

  //获取详细应答头

  $m_httphead = Array();

  $httpstas = explode(" ",fgets($m_fp,256));

  $m_httphead["http-edition"] = trim($httpstas[0]);

  $m_httphead["http-state"] = trim($httpstas[1]);

  while(!feof($m_fp))

  {

  $line = trim(fgets($m_fp,256));

  if($line == "" || $lnum>100)

  {

  break;

  }

  $hkey = "";

  $hvalue = "";

  $v = 0;

  for($i=0; $i<strlen($line); $i++)

  {

  if($v==1)

  {

  $hvalue .= $line[$i];

  }

  if($line[$i]==":")

  {

  $v = 1;

  }

  if($v==0)

  {

  $hkey .= $line[$i];

  }

  }

  $hkey = trim($hkey);

  if($hkey!="")

  {

  $m_httphead[strtolower($hkey)] = trim($hvalue);

  }

  }

  //分析返回记录

  if(preg_match("/^3/", $m_httphead["http-state"]))

  {

  if(isset($m_httphead["location"]) && $JumpCount<3)

  {

  $JumpCount++;

  DownImageKeep($gurl,$rfurl,$filename,$gcookie,$JumpCount);

  }

  else

  {

  return FALSE;

  }

  }

  if(!preg_match("/^2/", $m_httphead["http-state"]))

  {

  return FALSE;

  }

  if(!isset($m_httphead))

  {

  return FALSE;

  }

  $contentLength = $m_httphead['content-length'];

  //保存文件

  $fp = fopen($filename,"w") or die("写入文件:{$filename} 失败!");

  $i=0;

  $okdata = "";

  $starttime = time();

  while(!feof($m_fp))

  {

  $okdata .= fgetc($m_fp);

  $i++;

  //超时结束

  if(time()-$starttime>$maxtime)

  {

  break;

  }

  //到达指定大小结束

  if($i >= $contentLength)

  {

  break;

  }

  }

  if($okdata!="")

  {

  fwrite($fp,$okdata);

  }

  fclose($fp);

  if($okdata=="")

  {

  @unlink($filename);

  fclose($m_fp);

  return FALSE;

  }

  fclose($m_fp);

  return TRUE;

  }

  /**

  * 获得某页面返回的Cookie信息

  *

  * @access public

  * @param string $gurl 调整地址

  * @return string

  */

  function RefurlCookie($gurl)

  {

  global $gcookie,$lastRfurl;

  $gurl = trim($gurl);

  if(!empty($gcookie) && $lastRfurl==$gurl)

  {

  return $gcookie;

  }

  else

  {

  $lastRfurl=$gurl;

  }

  if(trim($gurl)=='')

  {

  return '';

  }

  $urlinfos = GetHostInfo($gurl);

  $ghost = $urlinfos['host'];

  $gquery = $urlinfos['query'];

  $sessionQuery = "GET $gquery HTTP/1.1rn";

  $sessionQuery .= "Host: $ghostrn";

  $sessionQuery .= "Accept: */*rn";

  $sessionQuery .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)rn";

  $sessionQuery .= "Connection: Closernrn";

  $errno = "";

  $errstr = "";

  $m_fp = fsockopen($ghost, 80, $errno, $errstr,10) or die($ghost.'<br />');

  fwrite($m_fp,$sessionQuery);

  $lnum = 0;

  //获取详细应答头

  $gcookie = "";

  while(!feof($m_fp))

  {

  $line = trim(fgets($m_fp,256));

  if($line == "" || $lnum>100)

  {

  break;

  }

  else

  {

  if(preg_match("/^cookie/i", $line))

  {

  $gcookie = $line;

  break;

  }

  }

  }

  fclose($m_fp);

  return $gcookie;

  }

  /**

  * 获得网址的host和query部份

  *

  * @access public

  * @param string $gurl 调整地址

  * @return string

  */

  function GetHostInfo($gurl)

  {

  $gurl = preg_replace("/^http:///i", "", trim($gurl));

  $garr['host'] = preg_replace("//(.*)$/i", "", $gurl);

  $garr['query'] = "/".preg_replace("/^([^/]*)//i", "", $gurl);

  return $garr;

  }

  ?>
分享到:
本文"解析php下载远程图片函数 可伪造来路"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4