현재 웹 웹 생성 및 삭제시 처리를 처리하기 위해 다양한 쉘 스크립트를 실행하는 PHP 웹 응용 프로그램을 만들려고합니다.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 암호를 입력하면 작동합니다. '$ result = $ ssh-> exec ("cd/var/www/sites; echo password | sudo -S /usr/local/bin/delete_property_folder.sh -c $ comp -p $ prop "); ' –
코드가 어떻게 실패했는지 또는 실행할 때 어떤 일이 발생하는지는 말하지 않습니다. 실제로는 어떻게됩니까? 오류 메시지가 나타 납니까? – Kenster
이 예제의 경우, Bash 스크립트를 보면 값을 반향하는 것만 알 수 있습니다. 평범하고 단순합니다. "재미있는 부분은 퍼티를 통해 완벽하게 작동합니다 .Ajax를 통해 PHP에서이 기능을 실행하면 쉘 스크립트의 종료 상태와 Ajax의 예상 결과가 반환되지만 쉘 스크립트에서 처리 한 변경 사항은 실제로 적용되지 않습니다 . " 의미 올바른 출력 값이 쉘 스크립트 (즉, 0)에 의해 반환되지만 원격 서버의 모든 변경 사항에는 영향을 미치지 않습니다. 그것은 모두 거기에 ... –