具体的概念区别你可以查看php帮助手册,我说下个人的理解:通常来说,array是数组,而object是对象,两者有很大的区别,最主要的区别我觉得对象一般要定义行为,其目的是为了封装,而数组主要定义数据结构。但这两种在php语言里区别比较模糊,因为php是支持范数据类型,所以array可以是object,反之亦然。
引言前天的文章,我们说到了如何高效的下载网络资源,对于小体积的文件。可以便捷的使用file_put_contents()进行请求。与之配对的函数file_get_contents()则是读取资源。
今天我们讨论一下,有没有一种可能,使用一个函数,就可以给服务器发送post请求的数据呢?
学习时间上一段中我们已经提示了,有一个函数可以用于读取网络资源,也就是间接的发起网络请求。默认file_get_contents()是使用get请求,如果是post请求按道理也应该做的来。不过要怎么写呢?
file_get_contents()函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技术来增强性能。
其参数形式如下:
stringfile_get_contents(string$filename[,bool$use_include_pathfalse[,resource$context[,int$offset-1[,int$maxlen]]]])
复杂的功能,我们需要组装后面的参数即可。我们需要使用流操作的上下文context,传入该函数。
首先构造请求的参数,也就是键值对,这里需要使用amp进行多参数连接:
$postdatahttp_build_query(array(namegtjoe,agegt13))
接着构造请求结构体:
$optsarray(httpgtarray(methodgtpost,headergtcontent-type:application/x-www-form-urlencoded,contentgt$postdata))
最重要的一步,创建基于流的上下文,使用
$contextstream_context_create($opts)
写到这里就“万事俱备只欠东风”了。我们隆重地清楚主旨函数处理这些参数:
$resultfile_get_contents(,false,$context)
之后结果,或者错误内容,就会输出到$result对象。使用false判断,或者使用已知的接口返回数据类型,进一步处理。
深度定制上一节的内容并没有考虑网络超时,接口授权,等等情形。本节我们说一个复杂度高一些的,要求处理一个https请求,并配置了basicauth的url,并使用post上传数据。
首先还是裁剪请求体:
$optsarray(httpgtarray(methodgtpost,headergtcontent-type:text/xml
.authorization:basic.base64_encode($https_user:$https_password).