昨日のポートテストに基づいて、PHP のアップロードとダウンロードのコードを勉強しました。少し前の筆記試験の問題の 1 つが、ファイルのアップロード時にファイルの内容を表示するというもので、読み取りを実装するように求められたことを思い出しました。 PHP のリモート ファイルの関数に非常に興味があります。コードは次のとおりです:
01
|
function urlfopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE , $ip = '', $timeout = 15, $block = TRUE, $encodetype = 'URLENCODE') {
|
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'];
|
02
05
|
$path = $matches['path'] ? $matches['path'].(isset($matches['query']) ? '?'.$matches['query'] : '') : '/';
|
|
06
|
$port = !empty($matches['port']) ? $matches['port'] : 80;
|
$return = '';
|
テーブル>
03
|
09
|
$out = "POST $path HTTP/1.0rn";
|
$matches = parse_url($url);
10
|
$out .= "Accept: */*rn";
|
|
テーブル>
11
|
$out .= "Accept-Language: zh-cnrn";
|
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.0rn"; |
テーブル>
10 |
$out .= "Accept: */*rn"; |
テーブル>
11 |
$out .= "Accept-Language: zh-cnrn"; |
テーブル>
12
|
$boundary = $encodetype == 'URLENCODE' ? '' : ';'.substr($post, 0, trim(strpos($post, "n")));
|
13
|
$out .= $encodetype == 'URLENCODE' ? "Content-Type: application/x-www-form-urlencodedrn" : "Content-Type: multipart/form-data$boundaryrn";
|
14
|
$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]rn";
|
15
|
$out .= "Host: $hostrn";
|
16
|
$out .= 'Content-Length: '.strlen($post)."rn";
|
17
|
$out .= "Connection: Closern";
|
18
|
$out .= "Cache-Control: no-cachern";
|
19
|
$out .= "Cookie: $cookiernrn";
|
22
|
$out = "GET $path HTTP/1.0rn";
|
23
|
$out .= "Accept: */*rn";
|
24
|
$out .= "Accept-Language: zh-cnrn";
|
25
|
$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]rn";
|
26
|
$out .= "Host: $hostrn";
|
27
|
$out .= "Referer: rn";
|
28
|
$out .= "Connection: Closern";
|
29
|
$out .= "Cookie: $cookiernrn";
|
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 == "rn" $header =="n")) {
|
47
|
while(!feof($fp) && !$stop) {
|
48
|
$data = fread($fp, ($limit == 0 $limit > 8192 ? 8192 :$limit));
|
51
|
$limit -= strlen($data);
|