Ich erstelle eine Ajax-Post-Methode, um Befehle an das PHP-Backend zu senden. Eine davon ist ein "Neustart". Ich versuche, die Antwort zurück zu bekommen, bevor das Skript endet:PHP-Antwort wird nicht gesendet, bevor das Skript endet
<?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;
}
Der Ajax-Aufruf (auf Client-Seite) mal aus und erhält nie die Antwort. Natürlich kann ich dem Neustartbefehl eine kleine Verzögerung hinzufügen, aber ich möchte verstehen, warum mein Code nicht funktioniert.
Ich bin es auf einem RPi mit Lighttpd und Fast-CGI ausgeführt.
Es ist besser, wenn Sie nicht von hier aus Ihren "Neustart" aufrufen. Tun Sie alles andere, kehren Sie zu Ihrem Ajax-Rückruf zurück und rufen Sie innerhalb des Rückrufs eine andere PHP-Funktion über einen AJAX, der neu startet, auf. Plus, soweit ich weiß, können Sie nicht "System" -Befehl aus browserbasierten PHP-Funktionsaufruf ausgeben. –
Eigentlich funktioniert es ... Ich gewährte 'www-data' die Sudoprivilegien für Neustart und halt. Wie auch immer, deine "Workaround" ist besser als meine :) – Mark