• PHP stream_context_create()作用和用法分析


    创建并返回一个文本数据流并应用各种选项,可用于fopen(),file_get_contents()等过程的超时设置、代理服务器、请求方式、头信息设置的特殊过程。

    • 函数原型:resource stream_context_create ([ array $options [, array $params ]] )

    用法

    1. 例子一

      <?php
          $opts = [
              'http' => [
                  'method'=>"GET",
                  'header'=>"Accept-language: en
      " .
                  "Cookie: foo=bar
      "
              ]
          ];
          $context = stream_context_create($opts);
          $fp = fopen('//www.jjxhp.com', 'r', false, $context);
          fpassthru($fp);
          fclose($fp);
      ?>
      
    2. 案例二

      <?php
      	$opts = [ 
      		'http' => [
      			'method'=>"GET",
      			'header'=>"Accept-language: en
      " .
      			"Cookie: foo=bar
      "
      		]
      	];
      	$context = stream_context_create($opts);
      
      	//You would setup the header this way:
      
          $opts = [ 
      	    'http' => [
      			'method'=>"GET",
      			'header'=> [
      				"Accept-language: en",
      				"Cookie: foo=bar",
      				"Custom-Header: value"
      			]
      	 	]
          ];
          $context = stream_context_create($opts);
      ?>
      
    3. 案例三

      <?php
      	$opts = [
      		'http' => [
      			'proxy' => 'tcp://127.0.0.1:8080', 
      			'request_fulluri' => true
      		]
      	];
      	$context = stream_context_create($opts);
      	$data = file_get_contents('//www.www.jjxhp', false, $context);
      	echo $data;
      ?>
      
    4. 案例四

      <?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
      ";
      			$data .= "Content-Disposition: form-data; name="".$key.""
      
      ".$val."
      ";
      		}
      		$data .= "--$boundary
      ";
      		//Collect Filedata
      		foreach($files as $key => $file)
      		{
      			$fileContents = file_get_contents($file['tmp_name']);
      			$data .= "Content-Disposition: form-data; name="{$key}"; filename="{$file['name']}"
      ";
      			$data .= "Content-Type: image/jpeg
      ";
      			$data .= "Content-Transfer-Encoding: binary
      
      ";
      			$data .= $fileContents."
      ";
      			$data .= "--$boundary--
      ";
      		}
      		$params = [
      			'http' => [
      				'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 = [
      		'name' => $_POST['name'],
      		'age'  => $_POST['age'],
      		'sex'  => $_POST['sex']
      	];
      	//sample image
      	$files['image'] = $_FILES['image'];
      	do_post_request("//www.jjxhp.com", $postdata, $files);
      ?>
      
  • 相关阅读:
    MySQL varchar类型数据转tinyint类型
    Spring Boot实战笔记(一)-- Spring简介
    Maven学习(八)-- 使用Nexus搭建Maven私服
    Maven学习(七)-- 使用Maven构建多模块项目
    浮点型 float和double类型的内存结构和精度问题
    Maven学习(六)-- Maven与Eclipse整合
    Maven学习(五)-- 聚合与继承
    关于inline函数
    《The Cg Tutorial》阅读笔记——环境贴图 Environment Mapping
    记录最近工作中遇到的一些坑
  • 原文地址:https://www.cnblogs.com/jjxhp/p/11736082.html
Copyright © 2020-2023  润新知