2015-10-24 3 views
0

Я нашел PHP-скрипт для передачи файлов FTP, и он работает точно так же, как мне нужно для одной части моего проекта. Скрипт может загружать файлы через FTP на другой сервер, только отлично, и может выводить прогресс по мере его поступления.Как изменить PHP FTP сценарий загрузки для загрузки файлов вместо

код я использую:

$fp = fopen($local_file, 'r'); 
    $conn_id = ftp_connect($source_ftp_server); 
    $login_result = ftp_login($conn_id, $source_ftp_user_name, $source_ftp_user_pass); 
    $ret = ftp_nb_fput($conn_id, $remote_file, $fp, FTP_BINARY); 
    while ($ret == FTP_MOREDATA) { 
     // Establish a new connection to FTP server 
     if(!isset($conn_id2)) { 
      $conn_id2 = ftp_connect($source_ftp_server); 
      $login_result2 = ftp_login($conn_id2, $source_ftp_user_name, $source_ftp_user_pass); 
     } 

     // Retreive size of uploaded file. 
     if(isset($conn_id2)) { 
      clearstatcache(); // <- this must be included!! 
      $remote_file_size = ftp_size($conn_id2, $remote_file); 
     } 

     // Calculate upload progress 
     $local_file_size = filesize($local_file); 
     if (isset($remote_file_size) && $remote_file_size > 0){ 
      $i = ($remote_file_size/$local_file_size)*100; 
        printf("%d%% uploaded<br>", $i); 
        flush(); 

     } 
     $ret = ftp_nb_continue($conn_id); 

    } 


    if ($ret != FTP_FINISHED) { 
     echo "<span style='color:red;'><b>There was an error uploading the file...</b></span><br>"; 
     exit(1); 
    } 
    else { 
     echo "<br>Files successfully uploaded!<br><br>";  
    } 

    fclose($fp); 

Я вынул некоторые несущественные детали, такие как дополнительную информацию, которая вторит сценария и т.д.

Этот код работает отлично для загрузки файлов другого сервера. Однако мне также нужно загрузить файл с сервера, используя FTP.

Я бы очень хотел использовать тот же код, что и выше, с индикатором прогресса и т. Д., Но я не уверен, как изменить этот код, чтобы загрузить файл, а не загружать его.

Это может быть пара простых изменений - это все, что необходимо.

Есть ли какие-либо части этого кода, в частности, которые необходимо будет изменить, или это может не работать так же, как и при загрузке?

Я бы очень признателен, если бы кто-нибудь мог указать мне в правильном направлении, чтобы разобраться в этом.

Как легко изменить команду ftp_nb_fput команде ftp_nb_get? Я не совсем понимаю весь этот код, поэтому трудно сказать, что нужно будет изменить.

Благодарим за помощь.

+1

Хотя я повторно я понимаю ваш поисковый запрос, вы должны осознать к настоящему времени (рассматривая свою репутацию), что это не значит, что вы делаете свою работу за вас. Это поможет вам с кодом, который не работает. С проблемами вы не можете понять себя на вещах, которые вы пробовали. Поэтому попробуйте найти учебные пособия в Интернете о FTP-клиентах PHP. Учитесь у них и работайте над чем-то. Затем, если возникают проблемы, вы можете задать здесь вопросы. – icecub

+0

Я не уверен, почему такое отношение так распространено на SO. Когда вы читаете инфо-информацию SO, в ней говорится: «Задавайте вопросы, получайте ответы, не отвлекайтесь». Нигде на этой странице не говорится, что вы ожидаете, что потратите часы, пытаясь разобраться в своих делах в первую очередь. Общество строилось в значительной степени частично потому, что люди обмениваются знаниями. Я уверен, что вы задали вопросы в своей жизни, что люди ответили за вас, не говоря вам, чтобы вы сами это выяснили. Это мнение, похоже, идет вразрез со всем, что здесь сказано: http://stackoverflow.com/tour –

+0

Когда вы читаете эту страницу, это делает SO звучать как место, где люди готовы помочь, если у вас есть вопросы. Однако, похоже, у многих людей есть отношение, что лучшая помощь - «разобраться в себе». Это не похоже на то, каким должно быть SO, из информации, которую они публикуют на своем веб-сайте. Я не просил кого-либо переписать весь мой код, но даже некоторые рекомендации о том, какую часть мне нужно искать, помогут.Я всегда считал, что, если я могу помочь кому-то, я должен. Я никогда не давал людям отношения, которые просили меня о помощи. –

ответ

1

Вот сценарий, с необходимыми изменениями, чтобы сделать его скачать файл Вместо этого:

$fp = fopen($local_file2, 'w+'); 
    $conn_id = ftp_connect($source_ftp_server); 
    $login_result = ftp_login($conn_id, $source_ftp_user_name, $source_ftp_user_pass); 
    $ret = ftp_nb_fget($conn_id, $fp, $remote_file2, FTP_BINARY); 
    while ($ret == FTP_MOREDATA) { 
     // Establish a new connection to FTP server 
     if(!isset($conn_id2)) { 
      $conn_id2 = ftp_connect($source_ftp_server); 
      $login_result2 = ftp_login($conn_id2, $source_ftp_user_name, $source_ftp_user_pass); 
     } 

     // Retreive size of source file. 
     if(isset($conn_id2)) { 
      clearstatcache(); // <- this must be included!! 
      $remote_file2_size = ftp_size($conn_id2, $remote_file2); 
     } 

     // Calculate download progress 
     $local_file2_size = filesize($local_file2); 
     if (isset($remote_file2_size) && $remote_file2_size > 0){ 
      $i = ($local_file2_size/$remote_file2_size)*100; 
        printf("%d%% downloaded<br>", $i); 

     } 
     $ret = ftp_nb_continue($conn_id); 

    } 

    if ($ret != FTP_FINISHED) { 
     echo "<span style='color:red;'><b>There was an error downloading the file...</b></span><br>"; 
     exit(1); 
    } 
echo "<br>Files successfully downloaded!<br><br>"; 

    fclose($fp); 
+0

Молодцы. +1 за то, что вы потратили время и эргон сами! – icecub

1

Вы ищете ftp_get

Похоже, следует использовать что-то вроде следующего:

$conn_id = ftp_connect($source_ftp_server); 

$login_result = ftp_login($conn_id, $source_ftp_user_name, $source_ftp_user_pass); 

$success = ftp_get($conn_id, $local_file, $server_file, FTP_BINARY); 

http://php.net/manual/en/function.ftp-get.php

+0

Спасибо за предложение помочь. Из того, что я читал, похоже, что команда ftp_get похожа на команду ftp_nb_get, за исключением того, что последняя не блокирует. Мне просто придется немного поиграть с этим. Главное, что я предполагаю, что другие функции в моем цикле While также должны быть изменены, так как они первоначально были для загрузки файлов. Мне никогда не приходилось использовать FTP через PHP раньше, поэтому не совсем уверен, как работают все функции. Похоже, есть только один способ понять это ... Спасибо за вашу помощь, хотя это очень ценится. –

Смежные вопросы