如何进行php curl超时设置

php curl超时设置的方法:1、使用“curl_setopt($ch, opt)”进行一些超时的设置;2、使用“CURLOPT_DNS_CACHE_TIMEOUT”设置在内存中保存DNS信息的时间。

如何进行php curl超时设置

推荐:《PHP教程》

在php中使用curl时,进行超时设置的详细方法

访问HTTP方式很多,可以使用curl, socket, file_get_contents() 等方法。

在访问http时,需要考虑超时的问题。

立即学习“PHP免费学习笔记(深入)”;

一、CURL 访问HTTP

CURL 是常用的访问HTTP协议接口的lib库,性能高,还有一些并发支持的功能等。

curl_setopt($ch, opt) 可以设置一些超时的设置,主要包括:

*(重要) CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数。 

*(重要) CURLOPT_TIMEOUT_MS 设置cURL允许执行的最长毫秒数。

(在cURL 7.16.2中被加入。从PHP 5.2.3起可使用)

CURLOPT_CONNECTTIMEOUT 在发起连接前等待的时间,如果设置为0,则无限等待。 

CURLOPT_CONNECTTIMEOUT_MS 尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。

(在cURL 7.16.2中被加入。从PHP 5.2.3开始可用)

CURLOPT_DNS_CACHE_TIMEOUT 设置在内存中保存DNS信息的时间,默认为120秒。 

1,curl普通秒级超时:

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TIMEOUT,60);   //只需要设置一个秒的数量就可以 curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_USERAGENT, $defined_vars['HTTP_USER_AGENT']);

登录后复制

2,curl普通秒级超时使用:

curl_setopt($ch, CURLOPT_TIMEOUT,60);

登录后复制

3,curl如果需要进行毫秒超时,需要增加:

curl_easy_setopt(curl, CURLOPT_NOSIGNAL,1L); //或者 curl_setopt ( $ch,  CURLOPT_NOSIGNAL,true);//支持毫秒级别超时设置

登录后复制

curl超时设置的例子。

1,curl一个毫秒级超时的例子:

0){                  echo "cURL Error ($curl_errno): $curl_error";          }else{                  echo "Data received: $data";          }  }else{          // Server          sleep(10);          echo "Done.";  }

登录后复制

技巧:

1,cURL 版本 >= libcurl/7.21.0 版本,毫秒级超时是一定生效的,切记。

2,curl_multi的毫秒级超时的问题,单次访问是支持ms级超时的,curl_multi并行调多个会不准。

二、流处理方式访问HTTP

除了curl,还经常使用fsockopen、或file操作函数来进行HTTP协议的处理。

下面说说这方面的超时设置。

一般连接超时可以直接设置,但是流读取超时需要单独处理。

可以参考以下实现代码:

 $this->_intReadTimeoutUS){             returnfalse;         }

登录后复制

或使用内置流处理函数 stream_set_timeout() 和 stream_get_meta_data() 处理:

<?php // Timeout in seconds   $timeout =5;   $fp = fsockopen("example.com",80, $errno, $errstr, $timeout);if($fp){           fwrite($fp,"GET / HTTP/1.0");           fwrite($fp,"Host: example.com");           fwrite($fp,"Connection: Close");           stream_set_blocking($fp,true);   //重要,设置为非阻塞模式          stream_set_timeout($fp,$timeout);   //设置超时          $info = stream_get_meta_data($fp);           while((!feof($fp))&&(!$info['timed_out'])){                   $data .= fgets($fp,4096);                   $info = stream_get_meta_data($fp);                   ob_flush;                   flush();           }           if($info['timed_out']){                   echo "Connection Timed Out!";           }else{                   echo $data;           }}

登录后复制

file_get_contents 超时:

 array(          'timeout'=>5//设置一个超时时间,单位为秒      )  );  $ctx = stream_context_create($timeout);  $text = file_get_contents("http://example.com/",0, $ctx);

登录后复制

fopen 超时:

 array(         'timeout' => 5 //设置一个超时时间,单位为秒     )  );    $ctx = stream_context_create($timeout);    if ($fp = fopen("http://example.com/", "r", false, $ctx)) {   while( $c = fread($fp, 8192)) {     echo $c;   }   fclose($fp);  }

登录后复制

以上就是如何进行php curl超时设置的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2131613.html

(0)
上一篇 2025年2月24日 22:58:43
下一篇 2025年2月22日 19:03:51

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何解决php linux 乱码问题

    php linux乱码的解决办法:首先找到并打开“php.ini”文件;然后按下“/default_charset”进行搜索;接着找到“default_charset”的位置,进行修改;最后把“iso-8859-1”改为“utf-8”即可。…

    2025年2月24日 编程技术
    200
  • php如何关闭gzip

    php关闭gzip的方法:首先使用“ob_start(‘ob_gzhandler’);”方法开启gzip压缩;然后通过“ob_end_clean();”方法关闭gzip压缩即可。 推荐:《PHP教程》 php在程序取…

    2025年2月24日
    200
  • php如何使用curl设置header头传参

    php curl设置header的方法:首先初始化浏览器;然后设置浏览器,并把参数url传到浏览器的设置当中;接着以字符串形式返回到浏览器当中,并判断data是否有数据;最后通过“curl_setopt”方法设置header头即可。 推荐:…

    2025年2月24日
    200
  • 如何解决apache php配置报错问题

    apache php配置报错的解决办法:首先检查php的配置,并将“display_startup_errors”的值修改成“On”;然后启动apache;接着找到“extension=php_XXXX.dll”并在前面添加分号即可。 推荐…

    2025年2月24日
    200
  • 前端和PHP的有区别吗?

    前端和PHP的有区别吗? 前端和PHP的有区别,PHP主要用于后端处理数据和操作数据,增删改查,而Web前端所包括的HTML、JS、CSS等用于把界面和数据显示给用户,其次就是语法各不相同,运行的环境或位置不同。 PHP和前端区别 一个后端…

    2025年2月24日
    200
  • PHP面向对象的魔术方法有哪些?

    PHP面向对象的魔术方法有:__construct()、__destruct()、__call()、__callStatic()、__get()、__set()、__isset()、__unset()、__sleep()等等。 什么是魔术方…

    2025年2月24日
    200
  • PHP如何判断是文件夹还是文件?

    PHP如何判断是文件夹还是文件? 1、使用“is_file()”函数来判断是否为文件,如果是文件,其返回结果为true,否则为false; 使用示例 登录后复制 结果 立即学习“PHP免费学习笔记(深入)”; bool(true)bool(…

    2025年2月24日
    200
  • 工厂模式和抽象工厂模式的区别?

    工厂模式和抽象工厂模式的区别? 1、工厂模式在使用时可以随时设置变量,不用提前进行设置,抽象工厂模式则需要每次增加产品时,进行修改类方法; 2、工厂模式可以使用两个接口以及三个接口。 工厂模式 抽象工厂模式 推荐教程:《PHP》 以上就是工…

    2025年2月24日
    200
  • 如何解决curl php中文乱码问题

    curl php中文乱码的解决办法:首先打开相应的PHP代码文件;然后使用“mb_convert_encoding($res, ‘UTF-8’, ‘UTF-8,GBK,GB2312,BIG5’…

    2025年2月24日
    200
  • 如何解决mac php乱码问题

    mac php乱码的解决办法:首先创建一个文本文件命名为“my.cnf”;然后将内容改为“utf8[mysql]default-character-set=utf8”;接着将该文件放置在conf下;最后重启mysql服务器即可。 推荐:《P…

    2025年2月24日
    200

发表回复

登录后才能评论