Raspberry Pi 3에서 WiFi 네트워크를 구성하는 데 사용하는 PHP 스크립트에 문제가 있습니다. POST에서 SSID 및 PW 변수를 가져오고 "ok" 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 초를 실행 : 여기에 코드입니다. 그렇지 않으면 응답이 도착하지 않습니다.
비슷한 질문을 검색했지만 유용한 (또는 비슷한) 것을 찾지 못했습니다.
편집 : 나는 아무 결과, 스티븐 - 잭슨 @ 대답 무엇을 시도했습니다
:
echo json_encode(["auth"=>"ok"]);
flush();
ob_flush();
sleep(5);
exec("sudo /var/www/scripts/configwifi.sh \"".$ssid."\" \"".$wifipwd."\"");
편집 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'는 간단한 세션 유효성 검사를 위해 작성한 스크립트입니다 (기본적으로 사용자가 보낸 세션 키가 섬기는 사람). –