在脚本结束之前不发送php响应

时间:2017-09-10 16:36:37

标签: php ajax flush

我发出一个ajax post方法将命令发送到php后端。其中一个是“重启”。我试图在脚本结束之前得到答案:

<?php

set_time_limit(0);

$json = file_get_contents('php://input');
$obj = json_decode($json);

switch ($obj->{'action'}) {
  case "reboot":
    $data = '{"success" : true}';

    ob_start();
    header('Content-Type: application/json');
    echo json_encode($data);
    ob_end_flush();
    ob_flush();
    flush();

    exec("sudo reboot");
    break;

  default:
    $data = '{"success": "fail"}';
    break;
}

ajax调用(在客户端)超时并且从未收到答案。 当然,我可以在reboot命令中添加一个小延迟,但我想了解为什么我的代码无效。

我在带有lighttpd和fast-cgi的RPi上运行它。

1 个答案:

答案 0 :(得分:0)

您可以定义一个每秒运行的cron作业,并检查一些设置,重启或类似的东西。如果这是真的,则发出重新启动。您的AJAX调用发出的脚本可以将此设置设置为true,以便脚本可以响应客户端。重新启动服务器后,重新启动设置可能会自动设置为false。但这似乎是一种极不安全的方法,因为任何用户都可能发送此类请求,导致您的服务器无法使用。