我正在使用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."\" &");
执行,但也无效。
答案 0 :(得分:0)
你想在调用sleep之前刷新()。
echo json_encode(["auth"=>"ok"]);
flush();
sleep(5);
exec("sudo /var/www/scripts/configwifi.sh \"".$ssid."\" \"".$wifipwd."\"");