現在、さまざまなシェルスクリプトを実行して、Webサイトの生成と削除時のクリーンアップを処理するPHP Webアプリケーションを作成しようとしています。Phpseclib SSH2がシェルスクリプトを実行していない
$ssh = new Net_SSH2($server);
if(!$ssh->login("username", "password")) {
$result['result'] = 'ERROR';
$result['message'] = 'Login failed to server ' . $server;
} else {
$result = $ssh->exec("cd /var/www/sites ; sudo /usr/local/bin/delete_property_folder.sh -c $comp -p $prop");
echo $result;
}
delete_property_folder.sh
が私のリモートサーバー上のbashスクリプトです
と-c $comp -p $prop
は私のスクリプトのオプション/パラメータです:
は、ここに私のdeletePropertyProcess.phpからの抜粋です。
楽しい部分は、このすべてが完璧にパテを介して動作します。 PHPからAjaxを介してこの機能を実行すると、シェルスクリプトの終了ステータスとAjaxからの予想される出力が返されますが、実際にシェルスクリプトで処理された変更は適用されません。
私が言ったように、これは私は問題はシェルスクリプトである疑いが、ここで、それはとにかくあるパテから完璧に動作します:
#!/bin/bash
function fix_file_permissions() {
chown -Rf username:username $1/$2
echo $?;
}
function delete_specified_folder() {
rm -rf $1/$2
echo $?;
}
##Main Script Body
POSITIONAL=()
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
-c|--company)
COMPANY="$2"
shift
shift
;;
-p|--property)
PROPERTY="$2"
shift
shift
;;
*) #unknown option
POSITIONAL+=("$1") #save it in an array for later
shift
;;
esac
done
set -- "${POSITIONAL[@]}" #restore positional parameters
PERMISSIONS_FIXED=$(fix_file_permissions $COMPANY $PROPERTY)
if [ $PERMISSIONS_FIXED -eq 0 ]; then
FOLDER_DELETED=$(delete_specified_folder $COMPANY $PROPERTY)
echo $FOLDER_DELETED
exit
fi
echo 1
この時点で、すべての推奨は有用であろう。これ以上の情報が必要な場合はお知らせください。私はそれが以下のものを使用して、シェルスクリプトのフルパスに--stdinを経由してsudoのパスワードを供給することにより、作業を取得するために管理してきました
私は、以下を使って--STDIN経由でsudoのパスワードを入力することで動作させることができました: '$ result = $ ssh-> exec(" cd/var/www/sites; echo password | sudo -S /usr/local/bin/delete_property_folder.sh -c $ comp -p $ prop "); ' –
あなたのコードがどのように失敗しているのか、実行したときに何が起こったのかは言わないでください。実際に何が起こるのですか?エラーメッセージが出ますか? – Kenster
この例では、Bashスクリプトを見ると、ちょうど値をエコーしていることがわかります。簡潔でシンプル。"Funの部分は、すべてがパテで完璧に動作します。PHPからAjax経由でこの機能を実行すると、シェルスクリプトの終了ステータスとAjaxからの予想される出力が返されますが、 " 意味正しい出力値がシェルスクリプト(つまり0)によって返されますが、リモートサーバの変更には影響しません。それはすべてそこにあります... –