GULHTML5中文学习网 - HTML5先行者学习网
在昨天做端口测试的基础上研究一下PHP上传与下载的代码,结果想起前段时间笔试题有一道题是在上传文件时显示文件内容,让我对PHP实现读取远程文件的功能很感兴趣,以下是代码:GULHTML5中文学习网 - HTML5先行者学习网
01 | function urlfopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE , $ip = '', $timeout = 15, $block = TRUE, $encodetype = 'URLENCODE') { |
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; |
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"; |
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"; |
31 | $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr,$timeout); |
35 | stream_set_blocking($fp, $block); |
36 | stream_set_timeout($fp, $timeout); |
38 | $status = stream_get_meta_data($fp); |
39 | if(!$status['timed_out']) { |
41 | if(($header = @fgets($fp)) && ($header == "/r/n" $header =="/n")) { |
47 | while(!feof($fp) && !$stop) { |
48 | $data = fread($fp, ($limit == 0 $limit > 8192 ? 8192 :$limit)); |
51 | $limit -= strlen($data); |
GULHTML5中文学习网 - HTML5先行者学习网GULHTML5中文学习网 - HTML5先行者学习网