2014-12-10 3 views
-1

웹 페이지에서 쉘 스크립트를 실행하고 싶습니다. 그래서 간단한 arithmatic sum 프로그램으로 시작했습니다. 웹 페이지에는 두 개의 필드와 제출 버튼이 있습니다. 사용자가 제출 버튼을 클릭하면 javascipt는 유효성을 검사 한 다음 ajax을 통해 php 파일을 호출합니다. php 파일은 인수를 추출하고 해당 인수로 sum.sh을 호출합니다.
하지만 할 수 없습니다. 여기 내 코드가있다.php가 쉘 스크립트를 호출하지 못했습니다 (js -> php -> sh)

design3.html :

<body> 
<form action='' method='post'> 
     <center> 
      arg1: <input type='text' name='t1' id="arg1"/> <br><br> 
      arg2: <input type='text' name='t2' id="arg2"/> <br><br> 
      <input type='submit' name='use_button' value='Sum' onclick="addContent()"/> 
     </center> 
    </form> 

<script type="text/javascript"> 
    function addContent(){ 
     var a = document.getElementById('arg1').value; 
     var b = document.getElementById('arg2').value; 

     if(a == "" || b == "") { 
      alert("Please fill all fields"); 
      return; 
     } 

     var request = $.ajax({ 
        url: "add.php", 
        type: "POST", 
        dataType: "html", 
        data: {functionname: 'add', arguments:[a, b]} 
     }); 

     request.done(function(msg) { 
        alert(msg); 
      }); 

      request.fail(function(jqXHR, textStatus) { 
        alert("Request failed: " + textStatus); 
      }); 

    } 

</script> 
</body> 

은 add.php :

<?php 
if (is_ajax()) { 
    if(isset($_POST['functionname'])) { 
     switch($_POST['functionname']) { 
      case 'add': 
       $var1 = $_POST['arguments'][0]; 
       $var2 = $_POST['arguments'][1]; 
       $cmd = 'sh ./sum.sh'.' '.$var1.' '.$var2; 
       $output = shell_exec($cmd); 
       echo $output; 
       break; 
     } 
    } 
} 

function is_ajax() { 
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'; 
} 
?> 

sum.sh :

#!/bin/bash 
var1=$1 
var2=$2 
echo `expr $var1 + $var2` 

I을 t 새로운 해요 그의 JS와 PHP. 그러나 이것을하기 위해 열심히 노력했습니다. 내가 별개로 테스트 중이라면 작동하고 있습니다. JS가없는 동일한 파일에 html과 PHP를 작성하면 스크립트가 작동합니다. PHP에서 sum.sh 스크립트 파일을 호출하지 않으면 작동합니다. 전체 통합에 실패했습니다. 브라우저 오류 Request failed: error에서이 오류가 표시됩니다. 서버에

+0

가 is_ajax 기능을 비활성화하려고? 어쩌면 그 것이다 –

+2

보안 참고 사항 : exec 명령에서 사용하기 전에 인수를 탈출하십시오! [escapeshellarg] (http://php.net/manual/en/function.escapeshellarg.php) 및 [escapeshellcmd] (http://php.net/manual/en/function.escapeshellcmd.php)를 참조하십시오. 그렇지 않으면 사용자가 쉘에서 임의의 코드를 실행할 수 있습니다. – enricog

답변

2

당신 POST

functionname: 'add' 

그것은 당신의 서버 측 테스트

switch($_POST['functionname']) { 
    case 'connect': 
+0

Soory. 개선 없음 .. – SGG

0

와 일치하지 않는 나는 문제가 자바 스크립트 나 PHP에 생각했다. 하지만 문제는 내 HTML 코드에 있습니다. 내 친구 중 한 명이이 문제를 해결했습니다.
그는 내가 제출 버튼을했다. 그래서 그는 submit 버튼의 유형을 button으로 변경했습니다. 이제 제대로 작동합니다.

변경이 코드 :

<input type='submit' name='use_button' value='Sum' onclick="addContent()"/> 

에 :

<input type='button' name='use_button' value='Sum' onclick="addContent()"/> 
관련 문제