加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP-FPM fastcgi_finish_request可靠吗?

发布时间:2020-12-13 17:22:46 所属栏目:PHP教程 来源:网络整理
导读:在fastcgi_finish_request()之后在我的php脚本中实现一些后处理之后;声明,我担心一些差异. 看起来PHP在fastcgi_finish_request之后没有执行所有脚本. 在日志文件中,我找不到关于此部分的通知,没有警告,没有错误或违规行为. 使用文档中未提及的fastcgi_finish
在fastcgi_finish_request()之后在我的php脚本中实现一些后处理之后;声明,我担心一些差异.

看起来PHP在fastcgi_finish_request之后没有执行所有脚本.

在日志文件中,我找不到关于此部分的通知,没有警告,没有错误或违规行为.

使用文档中未提及的fastcgi_finish_request有限制或提示吗?

解决方法

哇,我也受到了这个打击.到目前为止,行为似乎是这样的:
在调用fastcgi_finish_request()之后,函数内的任何echo语句就像是一个return语句一样,停止执行该函数.

我会更多地测试它并向bugs.php.net提交一个bug,也许吧.

更新:

调用fastcgi_finish_request()后,任何显式或隐式输出刷新都将导致退出PHP脚本,而不会出现任何警告或错误.换句话说,在调用fastcgi_finish_request()之后调用flush()将表现得像调用exit()而不是flush().

我将创建一个PHP错误票据以防万一.

代码重现:
????

function writestamp($case,$file){
  file_put_contents($file,"". $case . ": " . time() . "" . PHP_EOL,FILE_APPEND);
}

// Flush buffers and stop output buffering
while (@ob_end_flush());

// Destroy session,otherwise request can't be finished
if(session_status() > 1) session_destroy();

$file = tempnam(sys_get_temp_dir(),'flushbug_');
echo 'Writing 4 timestamps to: '.$file;

// this one gets called
writestamp('1',$file);

// and this
register_shutdown_function('writestamp','4',$file);

// finish the request
fastcgi_finish_request();

// as does this
writestamp('2',$file);

// but this one does NOT - calling flush() after fastcgi_finish_request() exits PHP without errors or warnings
flush();
writestamp('3',$file);

https://bugs.php.net/bug.php?id=68772

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读