当前位置: 首页 > 软件库 > 开发工具 > PHP开发工具 >

Timeout-PHP

PHP 函数执行超时控制扩展
授权协议 BSD
开发语言 C/C++
所属分类 开发工具、 PHP开发工具
软件类型 开源软件
地区 国产
投 递 者 田博远
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

PHP 函数执行超时控制扩展 (For PHP7+)

控制PHP函数的执行时间,超时终止执行,支持毫秒级配置,在call_user_func()基础上加了超时控制机制。

版本 v1.0.0

环境&依赖

  • OS: linux

  • Version: PHP 7.0.0及以上

  • SAPI: php-fpm or cli

特性

  • 通用:函数级控制超时

  • 支持毫秒级配置

函数

int call_func_with_timeout(mixed callable, int interval [, array args [, mixed retval]]

Parames:
$callable array|string 调用函数名称,普通function传函数名,类方法传数组:array(class|object, method)
$interval int          超时时间,单位:ms
$args     array        (可选)调用函数的参数数组
$retval   mixed        (可选)调用函数的返回值,此值以引用传入

Return:
TT_CALL_FUNCTION_SUCC: 执行成功(未超时)
TT_CALL_FUNCTION_TIMEOUT: 执行超时
TT_SET_FUNCTION_CALL_INFO_ERROR: 调用函数不合法(如:类或者对象不存在)
TT_FUNCTION_CALL_FAILURE: 调用失败(如:方法不存在、调用私有方法等)
TT_SET_SIGNAL_ERROR: 设置signal handler错误(系统不支持此扩展)
TT_SET_TIMER_ERROR: 同上

安装

git clone git@github.com:pangudashu/timeout.git
cd timeout
phpize
./configure
make && make install

add "extension=timeout.so" to php.ini

Demo

<?php

class sync {

    public function send($a,$b,$c,$d){
        sleep(2);

        print_r(get_defined_vars());

        return 1024;
    }
}

$sync_send_ret = null;
$r = call_func_with_timeout(array("sync", "send"), 1200, array(1,2,3,4), $sync_send_ret);

echo "sync::send() return value:" . $sync_send_ret . "\n";
switch($r)
{
    case TT_CALL_FUNCTION_SUCC:
        echo 'call function success';
        break;
    case TT_SET_FUNCTION_CALL_INFO_ERROR:
        echo 'set function call info error';
        break;
    case TT_FUNCTION_CALL_FAILURE:
        echo 'call function failure';
        break;
    case TT_SET_SIGNAL_ERROR:
        echo 'set signal handler error';
        break;
    case TT_SET_TIMER_ERROR:
        echo 'set timer error';
        break;
    case TT_CALL_FUNCTION_TIMEOUT:
        echo 'call function timeout';
        break;
}
?>

执行结果:

sync::send() return value:
call function timeout

如果将sleep(2)注释掉则输出:

Array
(
    [a] => 1
    [b] => 2
    [c] => 3
    [d] => 4
)
sync::send() return value:1024
call function success


  • 今天发现了一个很神奇的事情,php日志中有一条超时的日志,但是我request_terminate_timeout中设置的是0,理论上应该没有超时时间才对。 PHP Fatal error:  Maximum execution time of 30 seconds exceeded in ... OK,先列出现在的配置: php-fpm: request_terminate_timeout =

  • PHP cURL 的超时设置有两个 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT,他们的区别是: CURLOPT_CONNECTTIMEOUT 用来告诉 PHP 在成功连接服务器前等待多久(连接成功之后就会开始缓冲输出),这个参数是为了应对目标服务器的过载,下线,或者崩溃等可能状况。 CURLOPT_TIMEOUT 用来告诉成功 PHP 从服务器接收缓冲完成前需

  • 转自:微点阅读  https://www.weidianyuedu.com 最近最近在学习些PoC,发现大部分PoC都会有这样一句ini_set('default_socket_timeout', 5) ,意思就是设置default_socket_timeout这个配置参数为5。不知道这个配置是什么意思,到官网上查了下,给出的解释也很简单 Default timeout (in seconds)

  • PHP执行超时解决方案方法有三种: 1.修改php的配置文件,找到php.ini文件,它一般应该放在你的C:\WINDOWS目录下,然后找到max_execution_time= 30 ;//设置成你想要的值,单位是秒 这一行,这就是设置的执行时间最大值为30秒,你可以对这个值进行一下修正,改为你的期望值。(也可以直接设置成:max_execution_time= 0) 2.使用ini_set()

  • 一、PHP文件 执行超时 (1)初始设置脚本执行时间 打开php.ini文件,找到: max_execution_time=30  修改为: max_execution_time=600 如果你没有服务器修改权限,可通过内置PHP脚本的方法设置超时时间,在需要执行长时间操作的PHP文件中添加以下代码: <?php ini_set('max_execution_time', 600);//秒为单位,

  • <script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>   当PHP页面处理大事务时,页面往往会发生超时的错误,我解决此问题的方法如下: 1.优化程序代码: 这种方法

  • 转载:http://www.nginx.cn/2035.html 很多站长转到nginx+php-fpm后,饱受500,502问题困扰。 当nginx收到如上错误码时,可以确定后端php-fpm解析php出了某种问题,比如,执行错误,执行超时。 php-fpm.conf的配置文件中有一个参数request_slowlog_timeout是这样描述的 ; The timeout for servin

  • 有些朋友要通过自己的网站后台,包括论坛,来上传一些文件,php一般为2m,或8m(以下我们按默认为2m),接下来就是来讲怎么修改上传文件大小的。 1.首先修改执行上传文件限制 一般的文件上传,除非文件很小.就像一个5M的文件,很可能要超过一分钟才能上传完. 但在php中,默认的该页最久执行时间为 30 秒.就是说超过30秒,该脚本就停止执行. 这就导致出现 无法打开网页的情况.这时我们可以修改 m

  • CURLOPT_CONNECTTIMEOUT用来告诉PHP脚本在成功连接服务器前等待多久(连接成功之后就会开始缓冲输出),这个参数是为了应对目标服务器的过载,下线,或者崩溃等可能状况; CURLOPT_TIMEOUT 用来告诉成功PHP脚本,从服务器接收缓冲完成前需要等待多长时间。如果目标是个巨大的文件,生成内容速度过慢或者链路速度过慢,这个参数就会很有用。 使用cURL下载MP3文件是一个对开发

  • PHP限定脚本执行时长的方式有几种,下面说下php.ini中的max_execution_time和php-fpm.conf中的request_terminate_timeout 1. php.ini中的max_execution_time ; Maximum execution time of each script, in seconds ; http://php.net/max-execut

  • 对于 Nginx + FastCGI上的504网关超时错误(php-fpm),我们可以修改PHP和nginx的执行超时时间。 配置php 修改 php.ini(CentOS路径是/etc/php.ini)最大执行时间为300秒 max_execution_time = 300 修改 php-fpm配置文件(CentOS路径是/etc/php-fpm.d/www.conf) 请求超时时间为300秒

  • 虽然这个问题已经很久远了, time()函数返回当前时间的时间戳,时间戳就是从某一个标准时间点(1970/1/1-00:00:00)到现在的某一个时间点所经过的秒数。那么返回的既然是秒数,那肯定就是一串数字了。 另外对于date()函数,date()函数的原型是:date(format,timestamp),作用是将时间戳timestamp按format格式进行转换。具体的可参考这个:http:/

  • 如下: 我通过php在一个已经建好的数据库上发起curl请求.这个数据库非常庞大,因此它始终需要很长时间返回XML响应.为了解决这个问题,我准备了一个应该有长超时时间的curl请求. $ch = curl_init(); $headers["Content-Length"] = strlen($postString); $headers["User-Agent"] = "Curl/1.0"; cu

  • 你在使用PHP时会不会遇到下面几种问题呢? 1. 异步获取数据如果某个后端数据源获取不成功则跳过,不影响整个页面展现 2. 为了保证Web服务器不会因为当个页面处理性能差而导致无法访问其他页面,则会对某些页面操作设置 3. 对于某些上传或者不确定处理时间的场合,则需要对整个流程中所有超时设置为无限,否则任何一个环节设置不当,都会导致莫名执行中断 4. 多个后端模块(MySQL、Memcached、

  • 搞爬虫的时候一两条链接可以正常爬取,但是一到几百条链接的时候总会报错 ErrnoOperation timed out after 30063 milliseconds with 0 out of -1 bytes rec 上网查了一下资料发现是超时报错的问题。于是顺便查了下PHP中的set_time_limit与用curl库时其中CURLOPT_TIMEOUT设置的区别。         set

  •                 PHP cURL 的超时设置有两个 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT,他们的区别是: CURLOPT_CONNECTTIMEOUT 用来告诉 PHP 在成功连接服务器前等待多久(连接成功之后就会开始缓冲输出),这个参数是为了应对目标服务器的过载,下线,或者崩溃等可能状况。 CURLOPT_TIMEOUT 用来告诉成功

  • 软件简介 PHP 函数执行超时控制扩展 (For PHP7+) 控制PHP函数的执行时间,超时终止执行,支持毫秒级配置,在call_user_func()基础上加了超时控制机制。 版本 v1.0.0 环境&依赖 OS: linux Version: PHP 7.0.0及以上 SAPI: php-fpm or cli 特性 通用:函数级控制超时 支持毫秒级配置 函数 int call_func_wi

  • 最近最近在学习些PoC,发现大部分PoC都会有这样一句ini_set('default_socket_timeout', 5) ,意思就是设置default_socket_timeout这个配置参数为5。不知道这个配置是什么意思,到官网上查了下,给出的解释也很简单 Default timeout (in seconds) for socket based streams。意思是socket流的超时

  • 最近最近在学习些PoC,发现大部分PoC都会有这样一句ini_set('default_socket_timeout', 5) ,意思就是设置default_socket_timeout这个配置参数为5。不知道这个配置是什么意思,到官网上查了下,给出的解释也很简单 Default timeout (in seconds) for socket based streams。意思是socket流的超时

  • tp的报错很模糊,需要自己判断是不是超时问题 首先给Apache的配置文件httpd.conf添加几行: <IfModule mod_fcgid.c> FcgidProcessLifeTime 8200 FcgidIOTimeout 8200 FcgidConnectTimeout 4000 </IfModule> 说明,Apache默认的默认执行时间是40s,超过40s就会报错,这行的作用

 相关资料
  • PyGTK API的gobject模块有一个很有用的功能来创建一个定期调用的超时函数。 source_id = gobject.timeout_add(interval, function, …) 第二个参数是你希望在每毫秒之后调用的回调函数,它是第一个参数的值 - interval。 其他参数可以作为函数数据传递给回调。 该函数的返回值是source_id 。 使用它,回调函数停止调用。 go

  • 本文向大家介绍node.js超时timeout详解,包括了node.js超时timeout详解的使用技巧和注意事项,需要的朋友参考一下 如果在指定的时间内服务器没有做出响应(可能是网络间连接出现问题,也可能是因为服务器故障或网络防火墙阻止了客户端与服务器的连接),则响应超时,同时触发http.ServerResponse对象的timeout事件. response.setTimeout(time,

  • PHPPHP 是一个用 PHP 实现的 PHP 虚拟机。 使用方法:php php.php -r "var_dump('foo');"

  • 本文向大家介绍C#线程执行超时处理与并发线程数控制实例,包括了C#线程执行超时处理与并发线程数控制实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#线程执行超时处理与并发线程数控制的方法。分享给大家供大家参考。具体实现方法如下: 特别说明: 1、为了测试方便,这里对存储过程的执行是模拟的 2、这里限制了并发执行存储过程的最大个数,但并没有对并发线程数进行控制,与文章标题略有不符,但程

  • 可以限制并行运行的函数的最大数量吗? 我看了留档,发现了这个: 当多个触发事件发生的速度快于单线程函数运行时处理它们的速度时,运行时可能会并行多次调用该函数。 如果函数应用正在使用消耗托管计划,函数应用可以自动横向扩展。函数应用的每个实例(无论应用是在消耗托管计划还是常规应用服务托管计划上运行)都可能使用多个线程并行处理并发函数调用。 每个函数应用程序实例中并发函数调用的最大数量因使用的触发器类型

  • 超时控制 使用 Bolt 协议进行通信的时候,SOFARPC 的超时时间默认为 3 秒,用户可以在引用服务的时候去设置超时时间,又分别可以在服务以及方法的维度设置超时时间,SOFARPC 的超时时间的设置的单位都为毫秒。 服务维度 如果需要在发布服务的时候在服务维度设置超时时间,设置对应的 timeout 参数到对应的值即可。 XML 方式 如果使用 XML 的方式引用服务,设置 <sofa:bi

  • 问题内容: 您好,可以仅将时间限制设置为命令或功能,例如: 我只想将时间限制设置为function1。 有退出set_time_limit,但我认为这将整个脚本的时间限制。有人有想法吗? 问题答案: set_time_limit()确实在全局运行,但是可以在本地重置。 设置允许脚本运行的秒数。如果达到此目的,脚本将返回致命错误。默认限制为30秒,如果存在,则为php.ini中定义的max_exec