在昨天做端口测试的基础上研究一下PHP上传与下载的代码,结果想起前段时间笔试题有一道题是在上传文件时显示文件内容,让我对PHP实现读取远程文件的功能很感兴趣,以下是代码:
01 | function urlfopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE , $ip = '', $timeout = 15, $block = TRUE, $encodetype = 'URLENCODE') { |
02 | $return = ''; |
03 | $matches = parse_url($url); |
04 | $host = $matches['host']; |
05 | $path = $matches['path'] ? $matches['path'].(isset($matches['query']) ? '?'.$matches['query'] : '') : '/'; |
06 | $port = !empty($matches['port']) ? $matches['port'] : 80; |
07 |
08 | if($post) { |
09 | $out = "POST $path HTTP/1.0\r\n"; |
10 | $out .= "Accept: */*\r\n"; |
11 | $out .= "Accept-Language: zh-cn\r\n"; |
12 | $boundary = $encodetype == 'URLENCODE' ? '' : ';'.substr($post, 0, trim(strpos($post, "\n"))); |
13 | $out .= $encodetype == 'URLENCODE' ? "Content-Type: application/x-www-form-urlencoded\r\n" : "Content-Type: multipart/form-data$boundary\r\n"; |
14 | $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; |
15 | $out .= "Host: $host\r\n"; |
16 | $out .= 'Content-Length: '.strlen($post)."\r\n"; |
17 | $out .= "Connection: Close\r\n"; |
18 | $out .= "Cache-Control: no-cache\r\n"; |
19 | $out .= "Cookie: $cookie\r\n\r\n"; |
20 | $out .= $post; |
21 | } else { |
22 | $out = "GET $path HTTP/1.0\r\n"; |
23 | $out .= "Accept: */*\r\n"; |
24 | $out .= "Accept-Language: zh-cn\r\n"; |
25 | $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; |
26 | $out .= "Host: $host\r\n"; |
27 | $out .= "Referer: \r\n"; |
28 | $out .= "Connection: Close\r\n"; |
29 | $out .= "Cookie: $cookie\r\n\r\n"; |
30 | } |
31 | $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr,$timeout); |
32 | if(!$fp) { |
33 | return ''; |
34 | } else { |
35 | stream_set_blocking($fp, $block); |
36 | stream_set_timeout($fp, $timeout); |
37 | @fwrite($fp, $out); |
38 | $status = stream_get_meta_data($fp); |
39 | if(!$status['timed_out']) { |
40 | while (!feof($fp)) { |
41 | if(($header = @fgets($fp)) && ($header == "\r\n" $header =="\n")) { |
42 | break; |
43 | } |
44 | } |
45 |
46 | $stop = false; |
47 | while(!feof($fp) && !$stop) { |
48 | $data = fread($fp, ($limit == 0 $limit > 8192 ? 8192 :$limit)); |
49 | $return .= $data; |
50 | if($limit) { |
51 | $limit -= strlen($data); |
52 | $stop = $limit |
53 | } |
54 | } |
55 | } |
56 | @fclose($fp); |
57 | return $return; |
58 | } |
59 | } |
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
刺客信条阴影:贝壳谜语解决方案
2 周前ByDDD
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1
好用且免费的代码编辑器

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Dreamweaver CS6
视觉化网页开发工具

WebStorm Mac版
好用的JavaScript开发工具