PHP stream_context_create()作用和用法分析

  作用:创建并返回一个文本数据流并应用各种选项,可用于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.glzy8.com

  with additional headers shown above */

  $fp = fopen('http://www.glzy8.com', '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('http://www.glzy8.com', 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("http://www.glzy8.com", $postdata, $files);

  ?>