PHP 无法调用 shell 脚本 (js -> php -> sh)


php is failing to call shell script (js -> php -> sh)

我想从网页执行一个shell脚本。所以我从一个简单的算术和程序开始。网页有两个字段和一个提交按钮。如果用户单击提交按钮,javascipt 将验证,然后通过 ajax 调用 php 文件。Php 文件提取参数并使用这些参数调用sum.sh
但我做不到。这是我的代码。

设计3.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>

添加.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`

我是这个JS和PHP的新手。但努力做到了这一点。如果我单独测试,它就可以工作。当我在没有JS的情况下在同一文件中编写html和php时,我的脚本就可以工作了。如果我没有在 php 中调用sum.sh脚本文件,它就可以工作了。来到完全整合,它正在失败。我从浏览器警报Request failed: error收到此错误。

您 POST 到 服务器

functionname: 'add'

它与您的服务器端测试不匹配

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

我认为问题出在javascript或php上。但问题出在我的 html 代码中。我的一个朋友解决了这个问题。
他告诉我拿了提交按钮。所以他把submit的按钮类型改成了button。现在它工作正常。

更改此代码:

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

自:

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