html 양식으로 프롬프트되는 bash 스크립트를 어떻게 실행합니까? echo (“ERROR.”); } ?> 그래서 스크립트가

현재 진행중인 방법은 PHP exec를 사용하는 것입니다.

<?php

$filename = "log.txt";
$text = $_POST['form'];

$fp = fopen ($filename, "w");
if ($fp) {
    fwrite ($fp, $text);
    fclose ($fp);
    exec('/var/www/html/bash.sh');
header('Location: /next.html');
}
else {
    echo ("ERROR.");

}

?>

그래서 스크립트가 log.txt에 잘 작성되기 때문에 적어도 스크립트가 실행되고 있음을 알고 있지만 bash.sh에서 아무것도 볼 수없는 것은 실제로 실행 중입니다. 내가 실행하면 명령 줄에

“exec sudo bash /full/path/bash.sh”

그런 다음 잘 실행합니다. 이것이 권한 오류인지 또는 무엇인지 확실하지 않습니다. 내가 잘못하고 있습니까, 아니면 더 좋은 방법이 있습니까? 도움을 주셔서 감사합니다.



답변

여기서 적어도 세 가지 문제가 있습니다.

  • 이 코드는 양식 내용을 log.txt(알 수없는 디렉토리에있는) 파일에 쓴 다음 관련되지 않은 파일 을 실행합니다./var/www/html/bash.sh
  • 코드는 /var/www/html/bash.sh인터프리터를 지정하지 않고 실행 되므로 스크립트에서 적절한 shebang에 의존합니다 (외부 테스트에서 인터프리터를 지정 함).sudo bash ...
  • 스크립트는 루트가 아닌 서버의 ID (www-data 등)로 실행됩니다.