PHP没有按顺序执行

时间:2016-11-22 16:39:54

标签: php exec sleep

我正在使用PHP脚本来解决我在Raspberry Pi 3中配置WiFi网络的问题。它应该从POST获取SSID和PW变量,对ajax调用回答“ok”并且然后执行脚本(按此顺序,之后RPi重新启动,以便连接丢失)。问题是在发送“ok”响应之前正在执行脚本。这是代码:

<?php
    header('Access-Control-Allow-Origin: *');
    header('content-type: text/html; charset:utf-8');
    require_once "chkSession.php";
    ini_set('display_errors', 1);

    $servername = "localhost";
    $username_db = "xxx";
    $password_db = "xxx";
    $dbname = "xxx";

    $conn = new mysqli($servername, $username_db, $password_db, $dbname);
    if ($conn->connect_error) {
        die("died" . $conn->connect_error);
    }

    $username = $_POST['username'];
    $sessionKey = $_POST['sessionKey'];

    if (chkSession($conn,$username,$sessionKey)){
        $ssid = $_POST['ssid'];
        $wifipwd = $_POST['wifipwd'];
        echo json_encode(["auth"=>"ok"]);
        sleep(5);
        exec("sudo /var/www/scripts/configwifi.sh \"".$ssid."\" \"".$wifipwd."\"");
    } else {
        echo json_encode(["auth"=>"skErr"]);
    }
?>

正如您所看到的,exec是......好吧,在发送“ok”响应后执行了5秒。或者应该,但是响应没有到来。

我搜索过类似的问题,但没有找到任何有用的(或类似的)。

编辑:

我已经尝试了@ steven-jackson的回答,没有结果:

echo json_encode(["auth"=>"ok"]);
flush();
ob_flush();
sleep(5);
exec("sudo /var/www/scripts/configwifi.sh \"".$ssid."\" \"".$wifipwd."\"");

编辑2:

尝试将sleep从php脚本更改为shell脚本,将其作为exec("sudo /var/www/scripts/configwifi.sh \"".$ssid."\" \"".$wifipwd."\" &");执行,但也无效。

1 个答案:

答案 0 :(得分:0)

你想在调用sleep之前刷新()。

echo json_encode(["auth"=>"ok"]);
flush();
sleep(5);
exec("sudo /var/www/scripts/configwifi.sh \"".$ssid."\" \"".$wifipwd."\"");