开云优惠活动 - 开云(中国)

7个月前 (08-20)

引言前天的文章,我们说到了如何高效的下载网络资源,对于小体积的文件。 同题参见可以便捷的采用 file_put_contents() 进行请求。与之配对的函数 file_get_contents() 则是读取资源。

今天我们讨论一下,有没有一种可能,使用一个函数。 对照阅读就可以给服务器发送post请求的数据呢?

开云优惠活动时间上一段中我们已经提示了,有一个函数可以用于读取网络资源,也就是间接的发起网络请求。 延伸阅读默认 file_get_contents()是使用 GET 请求。如果是POST请求按道理也应该做的来。不过要怎么写呢?

file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。事实上如果操作系统支持还会使用内存映射技术来增强性能。

其参数形式如下:

string file_get_contents( string $filename[, bool $use_include_path = false[, resource $context[, int $offset = -1[, int $maxlen]]]] )

复杂的功能,我们需要组装后面的参数即可。我们需要采用流操作的上下文 context,传入该函数。

首先构造请求的参数,也就是键值对,这里需要使用 & 进行多参数连接:

$postdata = ' ) );

接着构造请求结构体:

$opts = array(' ) );

最重要的一步,创建基于流的上下文,使用

$context = stream_context_create($opts);

写到这里就“万事俱备只欠东风”了。一般来说我们隆重地清楚主旨函数处理这些参数:

$result = file_get_contents(');

之后结果,或者错误内容,就会输出到 $result 对象。采用 false 判断,或者采用已知的接口返回数据类型。进一步处理。

深度定制上一节的内容并没有考虑网络超时,接口授权,等等情形。本节我们说一个复杂度高一些的。要求处理一个 上传数据。

首先还是裁剪请求体:

$opts = array(' ) );

注意我们在请求上添加了 header,这是根据目标 url 的要求添加的。$body 就是上一节中的 $postdata 结构类型。

接着创建流上下文:

$context = stream_context_create($opts);

最后调用函数:

$url = ';

$result = file_get_contents($url, false, $context, -1, 40000);

写在最后通过上面两个细节的函数处理,大家是不是对 file_get_contents() 有了更加深入的看法,原来这家伙还可以这么用,真是开了眼界!

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

你可能想看:

分享给朋友:

继续阅读

若需了解「开云优惠活动」的上下文,可结合站内栏目与相关篇目交叉阅读。

栏目用于追新,文内链接用于对照细节。两者配合可减少漏读与重复检索。

继续浏览时优先选择同栏目或相近主题,避免被站外镜像带偏。

频道列表

wiki · 科技 · 文化 · 主页

页面按栏目组织。可先看导读,再进入相关篇目或返回列表。