当前位置:首页 > 技术教程 > 技术文章 > 正文内容

file_get_contents很慢?来看看php访问url的四种方式

atao4年前 (2020-10-20)技术文章2845

在使用file_get_contents方式访问URL的时候,会导致速度变的很慢,据说这是file_get_contents的一个bug,本文主要介绍PHP引入url的四种方式,其中包括file_get_contents,但是并不推荐使用。

本站首页的随机语录原本使用file_get_contents的方式访问API接口,但是在经过测试后发现速度很明显下降,而且file_get_contents还有可能会导致PHP-FPM的进程CPU达到100%,为了解决问题我在百度翻了一圈之后发现curl更合适,速度也更快了,推荐!!


1、fopen方式访问指定URL函数

function access_url($url) {    
    if($url=='') return false;    
    $fp = fopen($url, 'r') or exit('Open url faild!');    
    if($fp){  
     while(!feof($fp)) {    
        $file .= fgets($fp) . "";  
     }  
     fclose($fp);    
    }  
    return $file;  
 }

2、file_get_contents方式打开远程文件的时候会造成CPU飙升。file_get_contents其实也可以post

 //以post方式获取url
 $data = array ('foo' => 'bar');
 
 $data = http_build_query($data);
 $opts['http'] = array (
   'method' => 'POST',
   'header'=> "Content-type:application/x-www-form-urlencodedrn".
   "Content-Length: " . strlen($data) . "rn",
   'content' => $data
 );
 $context = stream_context_create($opts);
 $html = file_get_contents('http://localhost/test.html', false, $context);
 echo $html;

3、curl方式(推荐)

 function curl_file_get_contents($durl){  
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, $durl);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回    
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; // 在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回    
    $data = curl_exec($ch);  
    curl_close($ch);  
    return $data;  
 }

4、fsockopen方式(只能获取网站主页信息,其他页面不可以)

 $fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
 (!$fp) {     
    echo "$errstr ($errno)<br />\n";     
 }else {     
    $out="GET / HTTP/1.1\r\n";     
    $out.="Host: www.example.com\r\n";     
    $out.="Connection: Close\r\n\r\n";     
    fwrite($fp, $out);     
    while (!feof($fp)) {     
        echo fgets($fp, 128);     
    }  
    fclose($fp);     
 }

扫描二维码推送至手机访问。

版权声明:本文由武景涛的博客发布,如需转载请注明出处。

本文链接:http://www.yizhanhongtu.cn/post/32.html

分享给朋友:

相关文章

jQuery Growl 插件(消息提醒) 弹出层插件

jQuery Growl 插件(消息提醒) 弹出层插件

jQuery Growl 插件(消息提醒) 允许您很容易地在一个覆盖层显示反馈消息。消息会在一段时间后自动消失,不需要单击"确定"按钮等。用户也可以通过移动鼠标或点击关闭按钮加快隐...

【推荐】10个提升用户体验图像特效库

【推荐】10个提升用户体验图像特效库

1.imagehover地址:https://github.com/ciar4n/imagehover.css imagehover.css- 纯CSS3鼠标滑过图片效果动画库,44种鼠标滑过效果2....

用PHP如何打造一个高可用高性能的网站

用PHP如何打造一个高可用高性能的网站

1. 说到高可用的话要提一下redis,用过的都知道redis是一个具备数据库特征的nosql,正好弥补了PHP的瓶颈,个人认为PHP的 瓶颈在于数据库,像Apache和Nginx的高级web服务器在...

PHP开发api接口,如何做才算是安全的

PHP开发api接口,如何做才算是安全的

php的api接口在实际工作中,使用PHP写api接口是经常做的,PHP写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json,在这个过程中,服务器并不知道,...

Apache自带的ab压力测试工具用法详解

Apache自带的ab压力测试工具用法详解

ab的原理ab是apache bench命令的缩写。ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apach...

寶塔Linux7.5.1 永久授权专业版wget脚本[测试版禁止外传]

寶塔Linux7.5.1 永久授权专业版wget脚本[测试版禁止外传]

内部测试版本,不确保是否存在漏洞/后门等,禁止外传使用。支持正版!!本次版本更新內容:已修复无法在线更新问题(面板上点修复即可恢复最新版)已修复防火墙8.7.7问题已更新防火墙8.7.8修复已知BUG...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。