Как я могу возобновить загрузку на ftp с php - PullRequest
1 голос
/ 19 января 2010

У меня есть php-скрипт, который загружает файлы на ftp-сервер из местоположения с очень низкой пропускной способностью и низкой надежностью соединения. В настоящее время я использую ftp функции php .

Иногда соединение прерывается в середине передачи. Есть ли способ позже возобновить загрузку? Как это можно сделать?

Edit: Люди не поняли, что это происходит из браузера. Однако, это не так. Это скрипт php cli. Так что речь идет о локальном файле, загружаемом на FTP, без взаимодействия с пользователем.

Ответы [ 6 ]

2 голосов
/ 19 января 2010

Попробуйте получить размер удаленного файла, а затем введите команду APPE ftp с разницей. Это добавит в файл. См. http://webmasterworld.com/forum88/4703.htm для примера. Если вам нужен реальный контроль над этим, я рекомендую использовать функции PHP cURL.

1 голос
/ 24 августа 2010

Я думаю, что все предыдущие ответы неверны. 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 голосов
/ 28 января 2014

РЕДАКТИРОВАТЬ: Другой пример : от cballou

Смотрите здесь .Очень простой и хороший пример.

Вы можете сделать что-то вроде этого:

<?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 голосов
/ 19 января 2010

просто использовать filezilla может сделать все для вас ... я имею в виду процесс загрузки ... он сохранит данные и снова откроется после закрытия, вы сможете продолжить процесс q ...

для автоматизации и отслеживания, просто используйте наш способ ... который является git и capistrano есть опция для php попробуй гуглить ...

0 голосов
/ 19 января 2010

ftp_(f)put имеет параметр $ startpos.Вы должны быть в состоянии сделать то, что вам нужно, используя этот параметр.(начинает передачу с размера файла на вашем сервере).Однако я никогда не использовал его, поэтому я не знаю о надежности.Ты должен попробовать.

0 голосов
/ 19 января 2010

Вы имеете в виду, что собираетесь разрешить загрузку резюме пользователя с вашего веб-интерфейса? тебе это подходит? http://www.webmasterworld.com/php/3931706.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...