私はRaspberry Pi 3でWiFiネットワークを設定するために使用しているPHPスクリプトに問題があります。POSTからSSIDとPW変数を取得し、 ajax呼び出しに接続し、スクリプトを実行します(その順番で、RPiがリブートして接続が失われます)。問題は、 "ok"応答を送信する前にスクリプトが実行されていることです。ここでは、コードは次のとおりです。PHPが順番に実行されていません
<?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秒に実行されます。そうでなければなりませんが、応答は到着していません。
私は同様の質問を検索しましたが、有用な(または類似した)ものは実際には見つかりませんでした。
EDIT:
echo json_encode(["auth"=>"ok"]);
flush();
ob_flush();
sleep(5);
exec("sudo /var/www/scripts/configwifi.sh \"".$ssid."\" \"".$wifipwd."\"");
EDIT 2:シェルへのPHPスクリプトからsleep
を変更しようとしました
私はスティーブン・ジャクソンは結果なしで、答え@何
試してみましたスクリプトをexec("sudo /var/www/scripts/configwifi.sh \"".$ssid."\" \"".$wifipwd."\" &");
として実行しましたが、どちらもうまくいきませんでした。
これは予想されます。 okメッセージはバッファに送信され、スクリプトの最後まで解放されません。 –
私はあなたがセッションロックを経験していると思いますが、あなたのスクリプトに '$ _SESSION'変数は見当たりませんが、' chkSession.php'ファイルの中にあると仮定します...これを解決するには 'session_write_close (); 'あなたの' echo'文の上に。 – cmorrissey
@cmorrissey実際に私はユーザーの検証にPHPセッションを使用していません、 'chkSession.php'は単純なセッション検証用に書いたスクリプトです(基本的には、ユーザーが送信したセッションキーがサーバ)。 –