2014-04-25 9 views
2

1기가바이트 + 파일 메모리가 실행됩니다. 1GB 미만의 파일은 문제없이 전송됩니다. 그러나 큰 파일은 전송 중에 1GB 표시에 도달하면 곧 실패합니다.Phpseclib SFTP를 넣어 내가 phpseclib의 SFTP를 <a href="http://phpseclib.sourceforge.net/sftp/examples.html#put" rel="nofollow">put</a> 방법을 사용하여 큰 zip 파일을 전송하려고

"PHP Fatal error: Out of memory (allocated 89653248) 
(tried to allocate 3717163274 bytes) in 
../lib/phpseclib/Net/SSH2.php on line 1553". 

이 코드 :

require_once('phpseclib/Net/SFTP.php'); 
require_once('phpseclib/Crypt/RSA.php'); 

$sftp = new Net_SFTP($host); 
$key = new Crypt_RSA(); 
$key->loadKey(file_get_contents($privatekey)); 
$sftp->login($username, $key); 

$sftp->put($remotefile, $localfile, NET_SFTP_LOCAL_FILE); 

내 php.ini 파일에서 memory_limit를 설정 -1로 설정되어

나는이 PHP의 오류가 발생합니다. 이 제한을 초래할 수있는 다른 PHP 설정이 있습니까? 또는 phpseclib 라이브러리의 모든 설정이 도움이 될 수 있습니까?

+1

32bit PHP를 사용하고 계십니까? 3.7GB의 RAM을 할당하려고합니다. 여러 가지 이유 때문에, 32 비트 프로그램은 단일 블록에서 ~ 3gig까지 할당 할 수 있습니다. OS에 따라 약간의 수정이 있습니다. –

+0

@MarcB 사실 진술이지만 특히 도움이되지는 않습니다. 파일을 SFTP로 처리하는 과정에서 모든 것을 한 번에 메모리로 읽을 필요는 없습니다. –

+1

사용중인 phpseclib의 버전은 무엇입니까? –

답변

4

phpseclib의 이전 버전이 실행 중입니다. 당신이 말하는 1.21/1.46 버전은 CVS keyword $Id: $으로 채워지고 phpseclib는 수년 동안 CVS를 사용하지 않았습니다.

사용 phpseclib의 (개별 파일 커밋 버전 반대) 마지막 릴리스 버전은 그 0.2.1이고 해당 버전이 2010 년 4 월이었다 위해 마지막 커밋 :

https://github.com/phpseclib/phpseclib/blob/0.2.1/phpseclib/Net/SFTP.php#L51

대비

https://github.com/phpseclib/phpseclib/blob/0.2.2/phpseclib/Net/SFTP.php#L48

phpseclib는 다음 0.2.2 릴리스하는이 CVS keyword $Id: $ 물건을 가지고 있지 않습니다 현재 0.3.7이다. 0.2.1 (0.2.2, 0.3.0, 0.3.1, 0.3.5, 0.3.6 및 0.3.7)부터 6 버전이 출시되었으므로 upgrading을 사용해보십시오.

+0

최신 버전의 phpseclib로 업그레이드하면 문제가 해결 된 것 같습니다. Magento EE 1.11은 이전 버전과 함께 제공되므로 이미 사용 가능한 것을 사용하려고했습니다. – brendanmckeown