前言
一开始我不是很理解php中的context的是什么意思
因为在中间件中同样有这个概念
在同一个中间件实例下
可以根据不同的上下文来区分不同的应用程序
但是用同样的方式去理解php的context就解释不通了
后来发现这个东西其实很简单
HTTP中的context
通俗的说就是python在使用requests库时指定的headers
在请求一个http或者https的请求时
通常要指定比如编码方式、请求体报文、User-Agent等附属的信息
而php中的context就是充当了requests库中headers这个添加信息的角色
<?php
$postdata = http_build_query(
array(
'var1' => 'some content',
'var2' => 'doh'
)
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = file_get_contents('http://example.com/submit.php', false, $context);
?>
SSL请求中的context
比如说SSL中要添加SNI
<?php
$context = stream_context_create([
'ssl' => [
'SNI_enabled' => true,
'SNI_server_certs' => [
'host1.com' => '/path/host1.com.pem',
'host2.com' => '/path/host2.com.pem',
],
]
]);
?>
ZIP文件中的context
打开带有密码的zip文件
<?php
// 读取加密归档
$opts = array(
'zip' => array(
'password' => 'secret',
),
);
// 创建上下文...
$context = stream_context_create($opts);
// ...并且使用它读取数据
echo file_get_contents('zip://test.zip#test.txt', false, $context);
?>
写入文件时标注权限
$context = stream_context_create([ 'file' => [ 'mode' => '0644' ] ]);
$file = fopen("example.txt", "w", false, $context);
文章评论