0

0

php下载获取远程图片函数(可伪造来路)

php中文网

php中文网

发布时间:2016-07-25 08:54:27

|

1215人浏览过

|

来源于php中文网

原创

  1. //下载获取远程图片
  2. function DownImageKeep($gurl, $rfurl, $filename, $gcookie="", $JumpCount=0, $maxtime=30)
  3. {
  4. $urlinfos = GetHostInfo($gurl);
  5. $ghost = trim($urlinfos['host']);
  6. if($ghost=='')
  7. {
  8. return FALSE;
  9. }
  10. $gquery = $urlinfos['query'];
  11. if($gcookie=="" && !empty($rfurl))
  12. {
  13. $gcookie = RefurlCookie($rfurl);
  14. }
  15. $sessionQuery = "GET $gquery HTTP/1.1\r\n";
  16. $sessionQuery .= "Host: $ghost\r\n";
  17. $sessionQuery .= "Referer: $rfurl\r\n";
  18. $sessionQuery .= "Accept: */*\r\n";
  19. $sessionQuery .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)\r\n";
  20. if($gcookie!="" && !preg_match("/[\r\n]/", $gcookie))
  21. {
  22. $sessionQuery .= $gcookie."\r\n";
  23. }
  24. $sessionQuery .= "Connection: Keep-Alive\r\n\r\n";
  25. $errno = "";
  26. $errstr = "";
  27. $m_fp = fsockopen($ghost, 80, $errno, $errstr,10);
  28. fwrite($m_fp,$sessionQuery);
  29. $lnum = 0;
  30. //获取详细应答头
  31. $m_httphead = Array();
  32. $httpstas = explode(" ",fgets($m_fp,256));
  33. $m_httphead["http-edition"] = trim($httpstas[0]);
  34. $m_httphead["http-state"] = trim($httpstas[1]);
  35. while(!feof($m_fp))
  36. {
  37. $line = trim(fgets($m_fp,256));
  38. if($line == "" || $lnum>100)
  39. {
  40. break;
  41. }
  42. $hkey = "";
  43. $hvalue = "";
  44. $v = 0;
  45. for($i=0; $i
  46. {
  47. if($v==1)
  48. {
  49. $hvalue .= $line[$i];
  50. }
  51. if($line[$i]==":")
  52. {
  53. $v = 1;
  54. }
  55. if($v==0)
  56. {
  57. $hkey .= $line[$i];
  58. }
  59. }
  60. $hkey = trim($hkey);
  61. if($hkey!="")
  62. {
  63. $m_httphead[strtolower($hkey)] = trim($hvalue);
  64. }
  65. }
  66. //分析返回记录
  67. if(preg_match("/^3/", $m_httphead["http-state"]))
  68. {
  69. if(isset($m_httphead["location"]) && $JumpCount
  70. {
  71. $JumpCount++;
  72. DownImageKeep($gurl,$rfurl,$filename,$gcookie,$JumpCount);
  73. }
  74. else
  75. {
  76. return FALSE;
  77. }
  78. }
  79. if(!preg_match("/^2/", $m_httphead["http-state"]))
  80. {
  81. return FALSE;
  82. }
  83. if(!isset($m_httphead))
  84. {
  85. return FALSE;
  86. }
  87. $contentLength = $m_httphead['content-length'];
  88. //保存文件
  89. $fp = fopen($filename,"w") or die("写入文件:{$filename} 失败!");
  90. $i=0;
  91. $okdata = "";
  92. $starttime = time();
  93. while(!feof($m_fp))
  94. {
  95. $okdata .= fgetc($m_fp);
  96. $i++;
  97. //超时结束
  98. if(time()-$starttime>$maxtime)
  99. {
  100. break;
  101. }
  102. //到达指定大小结束
  103. if($i >= $contentLength)
  104. {
  105. break;
  106. }
  107. }
  108. if($okdata!="")
  109. {
  110. fwrite($fp,$okdata);
  111. }
  112. fclose($fp);
  113. if($okdata=="")
  114. {
  115. @unlink($filename);
  116. fclose($m_fp);
  117. return FALSE;
  118. }
  119. fclose($m_fp);
  120. return TRUE;
  121. }
  122. /**
  123. * 获得某页面返回的Cookie信息
  124. *
  125. * @access public
  126. * @param string $gurl 调整地址
  127. * @return string
  128. */
  129. function RefurlCookie($gurl)
  130. {
  131. global $gcookie,$lastRfurl;
  132. $gurl = trim($gurl);
  133. if(!empty($gcookie) && $lastRfurl==$gurl)
  134. {
  135. return $gcookie;
  136. }
  137. else
  138. {
  139. $lastRfurl=$gurl;
  140. }
  141. if(trim($gurl)=='')
  142. {
  143. return '';
  144. }
  145. $urlinfos = GetHostInfo($gurl);
  146. $ghost = $urlinfos['host'];
  147. $gquery = $urlinfos['query'];
  148. $sessionQuery = "GET $gquery HTTP/1.1\r\n";
  149. $sessionQuery .= "Host: $ghost\r\n";
  150. $sessionQuery .= "Accept: */*\r\n";
  151. $sessionQuery .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)\r\n";
  152. $sessionQuery .= "Connection: Close\r\n\r\n";
  153. $errno = "";
  154. $errstr = "";
  155. $m_fp = fsockopen($ghost, 80, $errno, $errstr,10) or die($ghost.'
    ');
  156. fwrite($m_fp,$sessionQuery);
  157. $lnum = 0;
  158. //获取详细应答头
  159. $gcookie = "";
  160. while(!feof($m_fp))
  161. {
  162. $line = trim(fgets($m_fp,256));
  163. if($line == "" || $lnum>100)
  164. {
  165. break;
  166. }
  167. else
  168. {
  169. if(preg_match("/^cookie/i", $line))
  170. {
  171. $gcookie = $line;
  172. break;
  173. }
  174. }
  175. }
  176. fclose($m_fp);
  177. return $gcookie;
  178. }
  179. /**
  180. * 获得网址的host和query部份
  181. *
  182. * @access public
  183. * @param string $gurl 调整地址
  184. * @return string
  185. */
  186. function GetHostInfo($gurl)
  187. {
  188. $gurl = preg_replace("/^http:\/\//i", "", trim($gurl));
  189. $garr['host'] = preg_replace("/\/(.*)$/i", "", $gurl);
  190. $garr['query'] = "/".preg_replace("/^([^\/]*)\//i", "", $gurl);
  191. return $garr;
  192. }
  193. ?>
复制代码


相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

705

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

233

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

117

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

22

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

61

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

30

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

669

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

58

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号