웹 페이지에서 쉘 스크립트를 실행하고 싶습니다. 그래서 간단한 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
에서이 오류가 표시됩니다. 서버에
가 is_ajax 기능을 비활성화하려고? 어쩌면 그 것이다 –
보안 참고 사항 : exec 명령에서 사용하기 전에 인수를 탈출하십시오! [escapeshellarg] (http://php.net/manual/en/function.escapeshellarg.php) 및 [escapeshellcmd] (http://php.net/manual/en/function.escapeshellcmd.php)를 참조하십시오. 그렇지 않으면 사용자가 쉘에서 임의의 코드를 실행할 수 있습니다. – enricog