我有一个类,在该类中我注册了一个关闭函数,如下所示
class test{
function __construct() {
$self = $this;
$shutdown = function () use (&$self) {
$self->shutdown();
};
register_shutdown_function($shutdown);
}
public function shutdown()
{
echo 'shutdown';
}
public function doThing(){
$tools = new tools();
$tools->loadUrl('https://google.com');
}
}
Run Code Online (Sandbox Code Playgroud)
工具类
class tools {
function loadUrl($url){
include('url.php');
return openUrl($url);
}
}
Run Code Online (Sandbox Code Playgroud)
网址.php
function openUrl($url){
//use the fsockopen function
}
Run Code Online (Sandbox Code Playgroud)
这是主要文件结构,我无法更改它,所以请不要给我答案,包括更改与更改功能或结构相关的任何内容
如果由于测试类中的函数导致最大excu时间超过30秒,则问题会正常工作,但是当最大excu时间发生在on函数中时,问题就会发生,fsockopen关闭openUrl函数不会被调用
您应该阅读有关流操作和最大执行时间的 PHP 文档说明:
注意:set_time_limit()函数和配置指令max_execution_time仅影响脚本本身的执行时间。在确定脚本运行的最长时间时,不包括在脚本执行之外发生的任何活动所花费的时间,例如使用 system() 的系统调用、流操作、数据库查询等。在 Windows 上情况并非如此,因为测量的时间是真实的。
因此,只要您的连接打开,脚本就不会完成,并且您的关闭函数也不会被调用,因为连接尚未完成。
如果您尝试连接的主机没有响应或响应速度很慢,则可能会出现这种情况。
如果要定义调用超时fsockopen,则必须定义变量default_socket_timeout或使用 fsockopen 函数的第五个参数(http://php.net/fsockopen)
| 归档时间: |
|
| 查看次数: |
1147 次 |
| 最近记录: |