• 远程读取URL 建议用curl代替file_get_contents


    初学php的朋友们,很容易翻一个错误,在写采集程序或者调用api接口总会有线考虑到使用file_get_contents函数来或许内容,程序的访问量不大倒是没什么影响,但是访问量提升了那非常的悲剧了,你会发现服务器负载飙升,最后服务器宕机.初入公司便遇到这个问题,遂使用curl取代此命令,并且禁用远程file_get_contents,它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP.

    <?php
    $url='http://www.baidu.com';
     
    $ch = curl_init();
     
    $timeout = 5;
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $file_contents = curl_exec($ch);
    curl_close($ch);
     
    echo $file_contents;
     
    //function_exists()替换
     
    if(function_exists('file_get_contents')) {
    $file_contents = file_get_contents($url);
    else {
    $ch = curl_init();
    $timeout = 5;
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $file_contents = curl_exec($ch);
    curl_close($ch);
    }
    return $file_contents;
    ?>

    禁用file_get_contents方法:
    打开php.ini,配置如下:

    allow_url_fopen = On
    改为
    allow_url_fopen = Off

    如果是fastcgi重启php-fpm,如果是apache+php那直接重启apache即可.

    file_get_contents与curl对比结果.

    file_get_contents

    curl替代file_get_contents

    福建省福州市file_get_contents:0.4679060000 seconds
    福建省福州市curl:0.3150200000 seconds

    这边分别使用file_get_contents与curl使用淘宝ip库来获取IP地址信息,可以发现file_get_contents和curl性能的差距还是比较大.file_get_contents耗时0.467秒,curl使用0.315秒.差了0.152秒,有30%性能差距. 淘宝IP库使用方法打开连接

  • 相关阅读:
    如何在Mac OS X上安装 Ruby运行环境
    CocoaPods安装和使用教程
    【Objective-C】07-自定义构造方法和description方法
    window cmd 命令大全 (order)
    vue methods 方法中 方法 调用 另一个方法。
    js ---- 函数防抖
    three.js 运行3D模型
    点击保存网页 (及页面的数据)
    js -- canvas img 封装
    js -- 分页功能
  • 原文地址:https://www.cnblogs.com/vlone/p/4600910.html
Copyright © 2020-2023  润新知