0

ajaxを使用してphpページに投稿しています(投稿されたデータは無視してください、それは重要ではありません)

コマンド php addHit.php を使用して Linux サーバーで php ページを実行すると、リモート サーバーのホスト名が正しくエコーされます。ただし、これはajaxでは発生しません。成功関数がある場所に空白のアラートが表示されるだけです。ここで動作を確認できます: http://ec2-54-244-169-118.us-west-2.compute.amazonaws.com/bootstrap/jumbotron-narrow/index.php

    <script>
        $(function() {  
            $("form[name=addHit]").submit(function() {  
                alert("I am an alert box!");
                var link = $("input[name=link]").val();
                var comments = $("input[name=comments]").val();
                var datastring = "link="+link+"&comments="+comments;
                alert(datastring);
                $.ajax({
                    type: "POST",  
                    url: "/bootstrap/jumbotron-narrow/addHit.php",  
                    data: datastring,  
                    success: function(data, status, xhr) {  
                        alert(data);
                    }, 
                    error: function(httpRequest, textStatus, errorThrown) { 
                       alert("status=" + textStatus + ",error=" + errorThrown);
                    }
                });  
                alert("here");
                return false;
            }); 
        });  
    </script>

私の addHit.php ページ

$commands = "ssh -i adoekey.pem ubuntu@ip-10-250-69-130.us-west-2.compute.internal hostname -f ";
echo exec($commands);
4

3 に答える 3

1

フォルダー /var/www/.ssh を作成する必要があり、アイテムを /root/.ssh フォルダーからこの新しいフォルダーにコピーし、新しいディレクトリの所有権とその内容を www-data に変更しました。次に、pem ファイルのパーミッションを 400 に変更しました。

于 2013-08-12T22:58:47.780 に答える
1

@ Archetype2 が問題をどのように修正したか (彼の投稿から):

フォルダー /var/www/.ssh を作成する必要があり、アイテムを /root/.ssh フォルダーからこの新しいフォルダーにコピーし、新しいディレクトリの所有権とその内容を www-data に変更しました。次に、pem ファイルのパーミッションを 400 に変更しました。

コマンドから stderr 出力を取得する

execを使用してコマンドを実行する代わりに、次を使用します (「 PHP StdErr after Exec()」より):

$descriptorspec = array(
    0 => array("pipe", "r"),  // stdin
    1 => array("pipe", "w"),  // stdout
    2 => array("pipe", "w"),  // stderr
);

$command = "ssh -i adoekey.pem ubuntu@ip-10-250-69-130.us-west-2.compute.internal hostname -f ";
$pipes = '';
$process = proc_open($command, $descriptorspec, $pipes, dirname(__FILE__), null);

$stdout = stream_get_contents($pipes[1]);
fclose($pipes[1]);

$stderr = stream_get_contents($pipes[2]);
fclose($pipes[2]);

echo "stdout : \n";
var_dump($stdout);

echo "stderr :\n";
var_dump($stderr);

$returnCode = proc_close($process);
echo "Return code: " . $returnCode;

コマンドを実行するphp addHit.phpと、ログインしているユーザーとして実行されます (root かな?)。HTTP サーバーには、権限が厳しく制限された独自のユーザーがいる可能性があります。サーバー構成は何ですか? LAMP スタックを実行していますか?

.pemまた、phpスクリプトを実行しているものは何でも現在の作業ディレクトリを別のものに変更する可能性があるため、ファイルへの絶対ファイルパスを使用してみてください.

于 2013-08-12T21:49:24.187 に答える