1. 程式人生 > >建立並返回文字資料流

建立並返回文字資料流

作用:建立並返回一個文字資料流並應用各種選項,可用於fopen(),file_get_contents()等過程的超時設定、代理伺服器、請求方式、頭資訊設定的特殊過程。  函式原型:resource stream_context_create ([ array $options [, array $params ]] )  用法 例子一: 

複製程式碼程式碼如下:

<?php  $opts = array( 'http-->array(  'method'=>"GET",  'header'=>"Accept-language: en\r\n" .  "Cookie: foo=bar\r\n"  )  );  $context = stream_context_create($opts);  /* Sends an http request to www.jb51.net  with additional headers shown above */  $fp = fopen('//www.jb51.net', 'r', false, $context);  fpassthru($fp);  fclose($fp);  ?> 

例子二: 

複製程式碼程式碼如下:

<?php  $opts = array( 'http-->array(  'method'=>"GET",  'header'=>"Accept-language: en\r\n" .  "Cookie: foo=bar\r\n"  )  );  $context = stream_context_create($opts);  ?>  You would setup the header this way:  <?php  $opts = array( 'http-->array(  'method'=>"GET",  'header'=>array("Accept-language: en",  "Cookie: foo=bar",  "Custom-Header: value")  )  );  $context = stream_context_create($opts);  ?> 

例子三: 

複製程式碼程式碼如下:

<?php  $opts = array('http' => array('proxy' => 'tcp://127.0.0.1:8080', 'request_fulluri' => true));  $context = stream_context_create($opts);  $data = file_get_contents('//www.jb51.net', false, $context);  echo $data;  ?> 

例子四: 

複製程式碼程式碼如下:

<?php  function do_post_request($url, $postdata, $files = null)  {  $data = "";  $boundary = "---------------------".substr(md5(rand(0,32000)), 0, 10);  //Collect Postdata  foreach($postdata as $key => $val)  {  $data .= "--$boundary\n";  $data .= "Content-Disposition: form-data; name=\"".$key."\"\n\n".$val."\n";  }  $data .= "--$boundary\n";  //Collect Filedata  foreach($files as $key => $file)  {  $fileContents = file_get_contents($file['tmp_name']);  $data .= "Content-Disposition: form-data; name=\"{$key}\"; filename=\"{$file['name']}\"\n";  $data .= "Content-Type: image/jpeg\n";  $data .= "Content-Transfer-Encoding: binary\n\n";  $data .= $fileContents."\n";  $data .= "--$boundary--\n";  }  $params = array('http' => array(  'method' => 'POST',  'header' => 'Content-Type: multipart/form-data; boundary='.$boundary,  'content' => $data  ));  $ctx = stream_context_create($params);  $fp = fopen($url, 'rb', false, $ctx);  if (!$fp) {  throw new Exception("Problem with $url, $php_errormsg");  }  $response = @stream_get_contents($fp);  if ($response === false) {  throw new Exception("Problem reading data from $url, $php_errormsg");  }  return $response;  }  //set data (in this example from post)  //sample data  $postdata = array(  'name' => $_POST['name'],  'age' => $_POST['age'],  'sex' => $_POST['sex']  );  //sample image  $files['image'] = $_FILES['image'];  do_post_request("//www.jb51.net", $postdata, $files);  ?> 

public function query($params = []) {     $url = Yii::$app->params['deviceInterfaceUrl'] . self::META_URL;     $params['token'] =\Yii::$app->params['token'];     if ($params) {         $url .= '?' . http_build_query($params);     }     $options = [         'https' => [             'method' => 'GET',             'header' => "Content-type: application/x-www-form-urlencoded",         ],         'ssl' => [             'verify_peer' => false,             'verify_peer_name' => false,             'allow_self_signed' => true,             'verify_depth'      => 0         ]     ];     $context = stream_context_create($options);     $fp = fopen($url, 'r', false, $context );     $data = [];     while ( $line = stream_get_line($fp, 1000000, "\r\n") ) {         if ($line == 'change')             break;         $data[] = json_decode($line,true);     }     return $data; }