fsockopen

是比较底层的调用,属于网络系统的socket调用。

返回的是没有处理过的数据,包括数据的长度数据内容和数据的结束符。因此获取结果可能需要再做处理。

每次请求都会重新做DNS查询,并不对DNS信息进行缓存。

curl

经过了包装。因此可以支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证,HTTP上传, 代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。

返回的是处理后的内容。

自动对DNS信息进行缓存。对同一域名下的网页或者图片的请求只需要一次DNS查询。这大大减少了DNS查询的次数。

file_get_contents

需要php.ini里开启allow_url_fopen。

获取https链接内容的时候,需要php 中mod_ssl的支持(或安装opensll)。

每次请求都会重新做DNS查询,并不对DNS信息进行缓存。

效率对比

file_get_contents() 调用外部文件容易超时报错。curl 效率比 file_get_contents() 和 fsockopen() 高一些,原因是CURL会自动对DNS信息进行缓存。

总之,file_get_contents 和 curl 能干的,socket都能干。socket能干的,curl 就不一定能干了 。file_get_contents 更多的时候只是去拉取数据。效率比较高也比较简单。

 

作者 admin

百度广告效果展示