2009-10-19 3 views
0

쉘 세션을 PHP로 닫을 때까지 계속 열어 둘 수 있습니까?여러 통화를 허용하려면 PHP로 셸을 열어 두시겠습니까?

필자의 예에서는 NcFtp를 사용하여 셸 명령을 통해 일부 파일을 게시하려고합니다. 나는 훨씬 더 느리고 성능이 문제이기 때문에 PHP에 내장 된 FTP를 떠나고 싶다.

ncftpput을 사용하면 파일이나 디렉토리를 게시하기가 쉽습니다. 하지만 10 개의 파일을 배열로 반복하고 싶다면 스크립트는 로그인, 게시, 로그 아웃, 로그 아웃, 게시, 로그 아웃해야합니다.

다음과 같은 경우 훨씬 더 편리합니다. 이것은 효과가있을 수 있습니다.

shell_exec('ncftp -u username -p password'); 

foreach ($files as $file) 
{ 
    shell_exec('put '.$file['local_path'].' '.$file['remote_path']); 
} 

shell_exec('quit'); 

가능합니까?

감사합니다.

+0

기대 : http://expect.nist.gov/ – Eddy

+0

ncftp에서 명령을 중첩 할 수는 없습니까? ncftp -u username -p password && put ... && put ... –

답변

1

하나의 프로세스에 액세스하기 만하면 popen() 또는 proc_open()을 사용하면됩니다. 이 같은

뭔가 작업을 할 수 있습니다 :이 PHP의를위한 작업이 될 수 있었던 것처럼

$handle = popen('ncftp -u username -p password' , 'w'); 

foreach ($files as $file) { 
    fwrite($handle, 'put ' . $file['local_path']. ' '.$file['remote_path'] . "\n"); 
} 

pclose($handle); 
+0

고맙습니다. proc_open()이 맞을 수도 있습니다. – Christoffer

0

당신이 할 수 있다고 생각지 않지만, 여러 매개 변수를 수용 할 쉘 스크립트에서 두 번째 실행을 감싸는 것이거나 STDIN에서 파일 이름의 피드를 가져 오는 것입니다.
일반적으로 이러한 것들은 내가 믿는 php의 정신력 (웹 요청 수명)에 위배됩니다.
기존 PHP 함수 또는 래퍼를 사용하여 원하는 부분을 이미 확인할 수도 있습니다.

1

것 같다 내장에 FTP 기능이나 Expect.

+0

나는 이미 PHP의 내장 FTP를 사용하여 작동하는 구현을 만들었지 만, 쉘 실행을 통해 NcFtp를 실행하는 것보다 훨씬 느리다. – Christoffer

+0

호기심에서 비싼 부분은 무엇입니까? 연결 중입니까? 여러 호스트에 연결해야합니까? 실제로 이전이 느린가요? –

관련 문제