2010-01-19 6 views
1

대역폭이 매우 낮고 안정성이 낮은 위치에서 ftp 서버로 파일을 업로드하는 PHP 스크립트가 있습니다. 현재 ftp functions of php을 사용 중입니다.PHP에서 업로드를 재개하려면 어떻게해야합니까

전송 중간에 연결이 끊기는 경우가 있습니다. 나중에 업로드를 재개 할 수있는 방법이 있습니까? 어떻게 할 수 있습니까?

편집 : 사람들은 브라우저에서 이러한 일이 잘못되었다고 오해했습니다. 그러나 이것은 사실이 아닙니다. 그것은 PHP CLI 스크립트입니다. 따라서 로컬 파일이 ftp에 업로드되고 사용자 상호 작용은 없습니다.

답변

2

원격 파일의 크기를 가져 와서 차이점을 고려하여 APPE ftp 명령을 실행 해보십시오. 이 파일에 추가됩니다. 예를 들어 http://webmasterworld.com/forum88/4703.htm을 참조하십시오. 이것에 대한 실질적인 제어를 원하면 PHP의 cURL 함수를 사용하는 것이 좋습니다.

+0

링크가 끊어졌지만 아이디어가 실제로 필요한 것입니다. 당신이 당신의 링크를 수리한다면 나는 행복하게 upvote ... –

+0

바보 같은 날! 완료되고 수정되었습니다. –

-1

당신은 사용자가 웹 인터페이스에서 사용자가 업로드를 계속할 수 있음을 의미합니까? 이이 옷입니까? http://www.webmasterworld.com/php/3931706.htm

+0

을 아니, 웹 인터페이스에서. 질문에 대한 편집을 참조하십시오. –

+0

다음 번에 문자를 입력하십시오. 그러나 다른 사람들의 시간과 신용을 낭비하지 마십시오 !! 불편을 끼쳐 드려서 죄송합니다. – 1myb

+0

다른 사람들의 시간 낭비? 내 원래의 질문에 이미 ftp 함수를 사용하여 PHP에서 업로드에 대해 명확하게 이야기하고있었습니다. 웹 인터페이스와 관련이 있다는 생각이 들었습니다. 네가 너의 시간을 낭비했다는 것이 내 잘못이 아니야. –

0

ftp_(f)put에는 $ startpos 매개 변수가 있습니다. 이 매개 변수를 사용하여 필요한 것을 수행 할 수 있어야합니다. (서버의 파일 크기에서 전송을 시작합니다). 그러나 결코 그것을 사용하지 않았으므로 신뢰성에 대해 알지 못합니다. 시도해야합니다. 당신이 ... 내가 업로드 과정 ... 는 데이터를 보관하고 처리 Q를 계속할 수 닫은 후 다시 열 의미에 대한

+0

이 $ startpos 매개 변수는 어디에 문서화되어 있습니까? 클라이언트와 원격 파일 모두에서이 바이트부터 실제로 시작됩니까? –

+0

이 대답이 확장 될 경우, 나는 그것에 대한 나의 받아 들여진 대답을 바꿀 수 있고 그것을 upvote! –

-2

단지 FileZilla의를 사용하기위한 ...

모든 것을 할 수 있습니다 자동화하고 추적, 단순히 우리의 방법을 사용하여 ... 자식과 카피 스트라 노는 거기에 PHP를위한 옵션이있다 시도 구글 ...

+1

질문을 읽지 않았습니다.그는 이것을 프로그램으로해야합니다. –

1

나는 이전의 모든 대답이 잘못되었다고 생각합니다. PHP는 이력서를 관리합니다. FTP_AUTODESK가 활성화되어 있어야하며 업로드하는 동안 FTP_AUTORESUME을 활성화해야합니다.

$ftp_connect = ftp_connect($host, $port); 
ftp_set_option ($ftp_connect, FTP_AUTOSEEK, TRUE); 
$stream = fopen($local_file, 'r'); 
$upload = ftp_fput($ftp_connect, $file_on_ftp, $stream, FTP_BINARY, FTP_AUTORESUME); 
fclose($stream); 
+0

5 년 동안 유감스럽게 생각합니다.하지만 FTP_AUTORESUME 매개 변수가 ftp_put() 인수 목록의 끝에 올 것이 확실합니까? 이 인수 위치는 탐색 위치 (정수)로 간주됩니다. ftp_fput()을 호출하기 전에 올바른 사용법이'ftp_set_option ($ ftp_connect, FTP_AUTORESUME, true)'을내는 것이라고 생각할 것입니다. – Doin

0

편집 : Another Example : cballou

Look here에 의한 코드는 다음과 같이해야한다. 아주 간단하고 좋은 예입니다.

은 당신이 뭔가를 할 수 있습니다 :

<?php 
    $host = 'your.host.name'; 
    $user = 'user'; 
    $passwd = 'yourpasswd'; 


    $ftp_stream = ftp_connect($host); 
    //EDIT 
    ftp_set_option($ftp_stream, FTP_AUTOSEEK, 1); 
    if (ftp_login($ftp_stream,$user,$passwd)){ 
     //activate passive mode 
     //ftp_pasv($ftp_stream, TRUE); 

     $ret = ftp_nb_put($ftp_stream, $remotefile, $localfile, FTP_BINARY,FTP_AUTORESUME); 
     while (FTP_MOREDATA == $ret) { 
      // continue transfer 
      $ret = ftp_nb_continue($ftp_stream); 
     } 

     if (FTP_FINISHED !== $ret){ 
      echo 'Failure occured on transfer ...'; 
     } 
    } 
    else { 
     print "FAILURE while login ..."; 

    } 

    //free 
    ftp_close($ftp_stream); 
?> 
+0

FTP_AUTORESUME 매개 변수가 ftp_nb_put() 인수 목록의 끝에 오게 확실합니까? 이 인수 위치는 탐색 위치 (정수)로 간주됩니다. ftp_nb_put()을 호출하기 전에 올바른 사용법이'ftp_set_option ($ ftp_connect, FTP_AUTORESUME, true)'을내는 것이라고 생각할 것입니다. – Doin

+0

필자는 PHP.net http://php.net/manual/en/function.ftp-nb-put.php#example-4831 및 http://php.net/manual/ko/의 설명서만을 참조하십시오. ftp.constants.php # constant.ftp-autoresume. ftp_set_option ($ ftp_stream, FTP_AUTOSEEK, true); – creep3007

+0

'FTP_AUTORESUME (정수) GET 및 PUT 요청의 재개 위치와 시작 위치를 자동으로 결정합니다 (FTP_AUTOSEEK가 활성화 된 경우에만 작동합니다). – creep3007

관련 문제