ホームページ  >  記事  >  php教程  >  PHPはリモートファイルを読み取る機能を実装します

PHPはリモートファイルを読み取る機能を実装します

WBOY
WBOYオリジナル
2016-06-21 08:50:34962ブラウズ

昨日のポートテストに基づいて、PHP のアップロードとダウンロードのコードを勉強しました。少し前の筆記試験の問題の 1 つが、ファイルのアップロード時にファイルの内容を表示するというもので、読み取りを実装するように求められたことを思い出しました。 PHP のリモート ファイルの関数に非常に興味があります。コードは次のとおりです:

01 function urlfopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE  , $ip = '', $timeout = 15, $block = TRUE, $encodetype  = 'URLENCODE') {
01

02           $return = '';

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 = '';

テーブル>
07  

08           if($post) {
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";

20             $out .= $post;

21           } else {

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";

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 == "rn"   $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 <= 0;

53                 }

54               }

55             }

56             @fclose($fp);

57             return $return;

58           }

59         }



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。