广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP中超时的设置方法有哪些
  • 167
分享到

PHP中超时的设置方法有哪些

2023-06-15 06:06:12 167人浏览 独家记忆
摘要

这篇文章主要介绍了PHP中超时的设置方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、php文件 执行超时(1)初始设置脚本执行时间打开php.ini文件,找到:m

这篇文章主要介绍了PHP中超时的设置方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、php文件 执行超时

(1)初始设置脚本执行时间

打开php.ini文件,找到:

max_execution_time=30

修改为:

max_execution_time=600

如果你没有服务器修改权限,可通过内置PHP脚本的方法设置超时时间,在需要执行长时间操作的PHP文件中添加以下代码:

<?phpini_set('max_execution_time', 600);//秒为单位,自己根据需要定义

还可以通过.htaccess 文件设置超时时间,在文件中添加以下代码:

php_value max_execution_time 600

(2)重新设置脚本执行时间,并重置计时器

set_time_limit ( int $seconds ) : bool

seconds------最大的执行时间,单位为秒。如果设置为0(零),没有时间方面的限制。

设置允许脚本运行的时间,单位为秒。如果超过了此设置,脚本返回一个致命的错误。默认值为30秒,或者是在php.ini的max_execution_time被定义的值,如果此值存在。

当此函数被调用时,set_time_limit()会从零开始重新启动超时计数器。换句话说,如果超时默认是30秒,在脚本运行了了25秒时调用 set_time_limit(20),那么,脚本在超时之前可运行总时间为45秒。

二、PHP Curl 请求超时

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

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

a 、CURLOPT_TIMEOUT 设置CURL允许执行的最长秒数。

b、CURLOPT_TIMEOUT_MS 设置CURL允许执行的最长毫秒数。

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

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

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

三、PHP Socket 请求超时

<?php$socket = socket_create(AF_INET, SOCK_STREAM, SOL_tcp);socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,array("sec"=> 1, "usec"=> 0 ) ); // 接收socket_set_option($socket,SOL_SOCKET,SO_SNDTIMEO,array("sec"=> 3, "usec"=> 0 ) );  // 发送

虽然PHP中对fsockopen()方法有连接socket的超时参数,但是没有类似C中的连接成功后对数据的读写超时参数设置。没关系,PHP中对stream提供了一系列的方法以防止超时。

stream_set_blocking( $fp , false )

设置数据流为阻塞模式,以防止数据没读完就退出

如果模式为 false, 给定的 socket 描述符将切换到非块模式, 如果为 true, 则切换到块模式. 这个效果类似于 fgets() 从 socket 读的情况. 在非块模式 fgets() 将会立即返回,而在块模式将等待数据满足要求。

stream_set_timeout( $fp , 10 )

设置超时,应该在成功建立连接之后立即加上此句,后面的参数单位为秒

从封装协议文件指针中取得报头/元数据,返回的是一个数组,其中格式为:

Array(  [stream_type] => tcp_socket  [mode] => r+  [unread_bytes] => 0  [seekable] =>  [timed_out] =>  [blocked] => 1  [eof] =>)

其中索引timed_out为超时信息,超时则为true,未超时则为false,我们可以籍由此来判断socket是否超时,需要注意的是此句应该加在每次需要等待的语句之后,比如fwrite(),fread(),并且每读一次,都要判断一次是否超时,而对于一个连接只需一次超时设置stream_set_timeout( $fp , 10 )就可以了。

$fp = @fsockopen( $ip , $port, $errNo , $errstr, 30 );if( !$fp ){  return false;}else{  stream_set_timeout( $fp , 3 ) ;  //发送数据  fwrite( $fp , $packet ) ;  $status = stream_get_meta_data( $fp ) ;  //发送数据超时  if( $status['timed_out'] )  {    echo "Write time out" ;    fclose( $fp );    return false;  }  //读取数据  $buf = fread( $fp , 16 ) ;  $status = stream_get_meta_data( $fp ) ;  //读取数据超时  if( $status['timed_out'] )  {    echo "Read time out" ;    fclose( $fp );    return false;  }}

四、file_get_contents 超时处理(封装socket,file_put_contents类似)

从 PHP5 开始,file_get_content 已经支持 context 了(手册上写着:5.0.0 Added the context support. ),也就是说,从5.0开始,file_get_contents 其实也可以 POST 数据。类似的还有,fopen(也是从PHP5开始加入context支持),file (PHP5加入支持)。

<?php$get_opts = array(     'http'=>array(       'method' => "GET",       'timeout' => 1,//单位秒, 默认使用php.ini中default_socket_timeout的设置   )   );$post_opts = array('http'=>array(       'method' => "POST",       'timeout' => 60,//单位秒, 可用ini_set('default_socket_timeout', 120);进行默认设置    'content' =>  http_build_query($param_array, '', '&')   )   ); $opts = $get_opts;$res = file_get_contents($url, FALSE, stream_context_create($opts)); //返回string,失败返回FALSE

五、PHP Soap 请求超时

    ini_set('default_socket_timeout', 30); //定义响应超时为30秒     try {      $options = array(        'cache_wsdl' => 0,        'connection_timeout' => 5, //定义连接超时为5秒,默认php.ini中default_socket_timeout的值      );      libxml_disable_entity_loader(false);      $client = new \SoapClient($url, $options);      return $client->__soapCall($function_name, $arguments);     } catch (\SoapFault $e) {      //超时、连接不上      if($e->faultcode == 'HTTP'){        throw new TimeoutException('连接或请求超时', $e->getCode());      }    }

soap请求也可以使用资源流context,可以将请求超时写到stream_context_create( )中。

try {         $arrContextOptions=array("ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false,'crypto_method' => STREAM_CRYPTO_METHOD_TLS_CLIENT));           //$arrContextOptions=array("http"=>array( "method"=>'GET', 'timeout'=>10));         $options = array(                 'soap_version'=>SOAP_1_2,                 'exceptions'=>true,                 'trace'=>1,                 'cache_wsdl'=>WSDL_CACHE_NONE,                 'stream_context' => stream_context_create($arrContextOptions)         );         $client = new SoapClient('https://url/dir/file.wsdl', $options);          } catch (Exception $e) {         echo "<h3>Exception Error!</h3>";         echo $e->getMessage();     }

感谢你能够认真阅读完这篇文章,希望小编分享的“PHP中超时的设置方法有哪些”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网PHP编程频道,更多相关知识等着你来学习!

--结束END--

本文标题: PHP中超时的设置方法有哪些

本文链接: https://www.lsjlt.com/news/278170.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP中超时的设置方法有哪些
    这篇文章主要介绍了PHP中超时的设置方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、PHP文件 执行超时(1)初始设置脚本执行时间打开php.ini文件,找到:m...
    99+
    2023-06-15
  • Springboot RestTemplate设置超时时间的简单方法
    目录排查:Java Config配置配置文件指定RestTemplate 设置超时时间注意点总结RestTemplate未设置超时时间,导致RabbitMQ队列大量堆积,消费者假死,...
    99+
    2022-11-13
  • java超时异常处理的方法有哪些
    Java中超时异常处理的方法有以下几种: 使用线程的interrupt()方法:在执行任务的线程中设置一个定时器,当任务执行时间...
    99+
    2023-10-26
    java
  • php有哪些设置时区的函数
    这篇文章主要介绍“php有哪些设置时区的函数”,在日常操作中,相信很多人在php有哪些设置时区的函数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php有哪些设置时区的函数”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-20
  • mybatis设置sql执行时间超时时间的方法
    存在这样的场景,当一些比较耗时的查询时,如果不中断,则会导致数据库堵塞,进而会拖垮整个数据库服务的正常运行。 1.如果你使用的是HikariCP连接池的话,可以在配置文件设置conn...
    99+
    2022-11-13
  • Linux系统设置系统时间的方法有哪些
    小编给大家分享一下Linux系统设置系统时间的方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先我们会先设日期   dat...
    99+
    2023-06-28
  • SpringBoot设置接口超时的方法小结
    1、配置文件  application.properties中加了,意思是设置超时时间为20000ms即20s, spring.mvc.async.request-timeout...
    99+
    2022-11-12
  • Springboot2 session设置超时时间无效的解决方法
    本篇内容介绍了“Springboot2 session设置超时时间无效的解决方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题:今天项目...
    99+
    2023-06-20
  • MySQL数据库超时设置配置的方法实例
    目录前言1. JDBC超时设置2. 连接池超时设置3. MyBatis查询超时4. 事务超时总结前言 最近备战京东双11,在配置MySQL的超时配置发现有很多地方可以设置。这么多超时...
    99+
    2022-11-12
  • java中Socket设置超时时间的两种方式
    目录Socket设置超时时间的两种方式方法1方法2整理一下二者的区别设置socket超时时间的那些坑Socket设置超时时间的两种方式 方法1 调用Socket的connct 方法打...
    99+
    2022-11-13
    java Socket Socket设置超时时间 java Socket超时设置
  • php 5.6设置时区的方法
    本文操作环境:windows7系统、PHP5.6版、DELL G3电脑php 5.6设置时区一://获取默认时区 echo date_default_timezone_get(); //将时区设置为中国 date_default_timez...
    99+
    2016-03-22
    php 5.6
  • python脚本设置超时机制系统时间的方法
    本文为大家介绍了python脚本设置系统时间的方法,一共有两种,其一是调用socket直接发送udp包到国家授时中心,其二是调用ntplib包。我在本地电脑ping 国家授时中心地址cn.pool.ntp....
    99+
    2022-06-04
    脚本 机制 时间
  • jmeter设置变量的方法有哪些
    在JMeter中,有以下几种方法可以设置变量:1. 通过用户定义的变量:可以在Test Plan中添加一个用户定义的变量元素,然后在...
    99+
    2023-09-15
    jmeter
  • 服务器设置的方法有哪些
    以下是一些常见的服务器设置方法:1. 配置网络设置:包括IP地址、子网掩码、网关、DNS等。2. 安装和配置防火墙:保护服务器免受网...
    99+
    2023-06-07
    服务器设置 服务器
  • Redis设置密码的方法有哪些
    这篇文章主要介绍了Redis设置密码的方法有哪些,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。方法一:通过配置文件(/etc/redis.con...
    99+
    2022-10-18
  • div边框设置的方法有哪些
    今天小编给大家分享一下div边框设置的方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2022-10-19
  • vps安全设置的方法有哪些
    vps安全设置的方法有:1、禁止默认共享,使用记事本输入相关代码或修改注册表;2、删除除system外所有添加用户组允许使用的管理员...
    99+
    2023-02-21
    vps安全设置 vps
  • win10优化设置的方法有哪些
    本文小编为大家详细介绍“win10优化设置的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“win10优化设置的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。win10优化设置方法:用360优...
    99+
    2023-07-01
  • ssl网关设置的方法有哪些
    设置SSL网关的方法有以下几种:1. 通过域名服务器 (DNS) 代理:将域名服务器配置为将请求重定向到SSL网关。这样,当用户访问...
    99+
    2023-09-05
    ssl
  • html中设置超链接的方法
    这篇文章主要介绍了html中设置超链接的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。html中设置超链接的方法:首先在html的body部分中,添加“<a>...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作