接下来,我们来说说要求高下文又是什么呢?比如说我们要利用PHP来要求一个链接地址,常日我们会利用 curl 来进行要求,但是 curl 的配置实在是比较繁芜的,以是我们在大略利用的情形下会利用 file_get_contents() 这种函数来快捷地要求链接。不过,可能很多人并不知道或者说没怎么利用过它的高下文参数。实在,利用了高下文参数之后,file_get_contents() 不仅可以提交 POST 要求,还可以定义各种要求头内容。这些东西,便是一个要求的高下文,也便是它的实行环境和背景。
首先,我们定义一个做事端,在这里只是输出 $_GET 和 $_POST 里面的内容。同时,我们还打印了 $_SERVER 来看看要求头是否获取到了。
print_r($_SERVER);echo39;GETINFO',PHP_EOL;foreach($_GETas$k=>$v){echo$k,':',$v,PHP_EOL;}echoPHP_EOL,PHP_EOL;echo'POSTINFO',PHP_EOL;foreach($_POSTas$k=>$v){echo$k,':',$v,PHP_EOL;}
接下来,在我们的测试代码中,利用 file_get_contents() 来进行 POST 提交。
$postdata=http_build_query(['var1'=>'somecontent','var2'=>'doh',]);$opts=['http'=>['method'=>'POST','header'=>'Content-type:application/x-www-form-urlencoded','content'=>$postdata,],];$context=stream_context_create($opts);$result=file_get_contents('http://localhost:8088/?a=1',false,$context);print_r($result);var_dump($http_response_header);
在这里,我们只是用到了 stream_context_create() ,就能够轻松地创建一个要求的高下文环境了。stream_context_create() 是创建高下文环境的函数,它吸收的参数是一个选项数组,里面用于定义当前要求的干系选项。把稳,我们这里实在定义的是 http/https 干系的选项,它还可以定义 ftp 、 socket 等干系的要求协议选项。
在利用 file_get_contents() 函数要求远程地址后,我们可以在 $http_response_header 变量内获取到要求返回的相应头信息。而且这个变量是会定义在当前的局部浸染域下,不用担心全局浸染域污染的问题。
非常大略的办法就可以实现 POST 要求了吧,其余我们还可以利用 fopen() 函数来实现类似的效果,不过获取 body 和相应应信息时的办法就不同了。
$url="http://localhost:8088/?a=1";$opts=['http'=>['method'=>'GET','max_redirects'=>'0','ignore_errors'=>'1',],];$context=stream_context_create($opts);$stream=fopen($url,'r',false,$context);//返回相应头var_dump(stream_get_meta_data($stream));//返回内容var_dump(stream_get_contents($stream));fclose($stream);
在这段代码中,我们利用 stream_get_meta_data() 函数来得到相应头,利用 stream_get_contents() 来得到相应的内容(body)。这样实在就真的和 curl 的效果差不多了,而且最紧张的是,当前这种写法更大略方便。
从上面的代码中我们可以看出,这种高下文干系的函数都是 Stream 类型的函数,也便是流函数。它们是专门用来处理各种数据的,包括但不限于文件中的、网络上的、压缩文件以及其他一些操作的数据。在将来的学习中,我们还会打仗到其它的内容。本日的学习,实在是流的网络数据处理中的一小部分内容,大家先消化消化吧!
测试代码: https://github.com/zhangyue0503/dev-blog/blob/master/php/202003/source/%E5%85%B3%E4%BA%8EPHP%E4%B8%AD%E7%9A%84%E8%AF%B7%E6%B1%82%E4%B8%8A%E4%B8%8B%E6%96%87%E7%9A%84%E7%9B%B8%E5%85%B3%E7%9F%A5%E8%AF%86.php
参考文档: https://www.php.net/manual/zh/context.php