PHP 애플리케이션을 통해 SSH 명령을 실행하려고합니다.
PHP 애플리케이션을 통해 "./SSDownload.sh"를 입력합니다. 터미널 SSH를 통해 "./SSDownload.sh"를 입력합니다.
SSDownload.sh에는 다음이 포함됩니다.
cd /var/www/html/dev/media/mp3/$1
spotify-to-mp3 songs.txt
내 터미널 SSH를 통해 다음 응답을 얻습니다.
Resolving "fancy iggy azalea"
Searching "fancy iggy azalea" on Grooveshark
"Iggy Azalea - Fancy (feat. Charli XCX)" will be downloaded
Downloading tracks...
[1/1] Iggy Azalea - Fancy (feat. Charli 100% [==================================] Time: 00:00:01
Download complete
파일이 성공적으로 다운로드되고 올바른 디렉토리에 파일이 저장됩니다.
다음 코드를 사용하여 PHP로 동일하게 시도했습니다.
include('Net/SSH2.php');
$ssh = new Net_SSH2('iphere');
if (!$ssh->login('root', 'password')) {
exit('Login Failed');
}
echo "1 : " . $ssh->exec('./SSDownload.sh ' . $_GET['player']) . "<br />";
산출:
Resolving "fancy iggy azalea" Searching "fancy iggy azalea" on Grooveshark "Iggy Azalea - Fancy (feat. Charli XCX)" will be downloaded Downloading tracks... [0;31;49mInappropriate ioctl for device[0m [0;32;49mDownload complete[0m
파일이 성공적으로 다운로드되지 않고 파일을 올바른 디렉토리에 배치하지 않습니다.
무엇을 의미하든 " Inappropriate ioctl for device "에 대해 알려 드리고자 합니다.
응답이 다른 이유는 무엇입니까? 어떻게 고칠 수 있습니까?
"ioctl"은 장치에 제어 명령을 보내는 POSIX 작업입니다 ( "I / O 제어"). "부적절한 ioctl"오류는 프로그램이 어떤 방식 으로든 올바르지 않은 장치로 ioctl을 보냈 음을 의미합니다. 문제는 실행 방법에 따라이 spotify 프로그램이 사용할 수있는 ioctls입니다.
명령 줄에서 spotify 프로그램을 실행하면 TTY가 있습니다. PHP 코드가 프로그램을 시작할 때 TTY가 없습니다. 어떤 이유로 표준 출력이 tty가 될 것으로 예상하여 ioctl을 표준 출력으로 보내고있을 것입니다. 내 생각 엔 ioctl을 사용하여 터미널 너비를 가져 와서 진행률 표시 줄 그래픽을 표시 할 수 있습니다.
이 문제를 해결하는 방법에는 두 가지가 있습니다. 이 spotify 프로그램에 대한 설명서를 확인하여 진행률 표시 줄 인쇄를 비활성화하는 비대화 형 모드 또는 배치 모드 또는 자동 모드가 있는지 확인할 수 있습니다. 실패한 ioctl 수행을 피할 수 있습니다.
다른 수정 사항은 PHP가 ssh 세션에 대해 pty (pseudo-TTY)를 요청하도록하는 것입니다. 저는 PHP 코더는 아니지만 이 페이지 는 Net_SSH2 API를 설명하는 것으로 보이며 exec () 호출에 대해 PTY 를 요청하는 기능을 나열합니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다