创建并返回文本数据流

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DannyIsCoder/article/details/83414893

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

猜你喜欢

转载自blog.csdn.net/DannyIsCoder/article/details/83414893