PHP 드롭다운 메뉴는 매개변수를 사용하여 스크립트를 실행합니다.

PHP 드롭다운 메뉴는 매개변수를 사용하여 스크립트를 실행합니다.

이렇게 실행하는 쉘 스크립트가 있습니다

/var/www/test.sh 2015

또는

/var/www/test.sh 2014

이 스크립트가 실행되면 실제로 freeradius에서 데이터를 가져오고 www 폴더의 특정 연도에 대한 gnuplot 기본 플롯을 생성합니다.

/var/www/output.jpg 

이제 2015년, 2014년 등을 포함하는 PHP 드롭다운 메뉴를 만들고 싶습니다. 사용자가 연도를 선택하면 선택한 특정 연도로 스크립트를 실행해야 합니다.하지만 어떻게 연도를 쉘 스크립트에 전달할 수 있습니까?

지금까지 이것을 시도했지만 작동하지 않습니다.

root@rm:/var/www# cat test5.php

<html>
<head><title>some title</title></head>
<body>
  <form method="post" action="">
    <input type="text" name="something" value="<?= isset($_POST['something']) ? htmlspecialchars($_POST['something']) : '' ?>" />
    <input type="submit" name="submit" />
  </form>

<?php
if(isset($_POST['submit'])) {
echo ($_POST['something']);
// Now the script should be executed with the selected year 
      $message=shell_exec("/var/www/test.sh $something");
// and after executing the script, this page should also open the output.jpg in the browser

}
?>
</body>
<html>
root@rm:/var/www#

답변1

HTML의 드롭다운 메뉴는 선택 항목입니다.

<form method="post" action="">
    <select name="something">
        <option value="2014">year 2014</option>
        <option value="2015">year 2015</option>
    </select>
    <input type="submit" name="submit" />
</form>

그럼 제출 후

$something = $_POST["something"];
shell_exec("/var/www/test.sh $something");

답변2

PHP가 명령을 실행하도록 허용하는 것은 위험합니다. SELinux, Apparmor, chroot를 실행하는 PHP, 안전 모드에서 실행 중인 PHP, PHP에서 비활성화된 기능 등 목표 달성을 방해할 수 있는 많은 것들이 있습니다.

코드를 확인하려면오직당신이 원하는 것을 하기 위해 당신이 필요로 하는 것입력 검증

// Since value appears to be a numeric year, lets insist that its a number
$arg=(integer)$_POST['something']; 
// in an appropriate range
if ((1970<$arg) && (3000>$arg)) {
    // this part is redundant given the checks above but included for completeness
    $arg=escapeshellarg($arg);
    $message=shell_exec("/var/www/test.sh $something");
}

귀하의 코드는 작동할 것입니다(비록 매우 안전하지는 않지만). 작동하지 않는 이유는 로그 파일에 있어야 합니다.

관련 정보