Przesyłanie plików na FTP

Tips & Tricks Zostaw komentarz

Ostatnio miałem taki drobny problem: otóż chciałem wrzucić pewien większy plik na trzy różne serwery FTP (wiadomo, są limity transferu, więc wrzucenie pliku na jeden serwer mogłoby spowodować, że szybko bym wykorzystał ten limit). Niestety ale mam dość wolne połączenie internetowe jeśli chodzi o upload i wrzucenie pliku, który ma 600 MB zajmuje mi około 2 godziny czasu. Jednak postanowiłem wykorzystać pewną sztuczkę: plik wrzuciłem na jeden serwer FTP a następnie napisałem (a dokładnie zaadaptowałem z manuala) pewien skrypt, który wrzuca plik na inny serwer. Poniżej prezentuję ten kod:

<?php
set_time_limit(0);
$start=time();

//Ustaw dane konfiguracyjne
$ftp_server='';
$ftp_user_name='';
$ftp_user_pass='';

$plik_zrodlowy='duzy_plik.zip';
$plik_docelowy='public_html/download/'.$plik_zrodlowy;

// ustaw podstawowe połączenie
$conn_id = ftp_connect($ftp_server); 

// zaloguj się nazwą użytkownika i hasłem
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

// sprawdź połączenie
if ((!$conn_id) || (!$login_result)) { 
 echo "Połączenie FTP się nie powiodło!";
 echo "Próbowano połączyć się do $ftp_server jako użytkownik"
 . $ftp_user_name;
 exit; 
 } else {
 echo "Połączony z $ftp_server jako użytkownik $ftp_user_name";
 }

// prześlij plik
$upload = ftp_put($conn_id, $plik_docelowy, $plik_zrodlowy, FTP_BINARY); 

// sprawdź stan operacji
if (!$upload) { 
 echo "Błąd z wysłaniem pliku!";
 } else {
 echo "Przesłano $plik_zrodlowy na FTP";
}

// rozłącz się z serwerem FTP
ftp_close($conn_id); 


$stop=time();
$ile=round($stop-$start, 2);
echo("<p>Trwało to $ile sekund</p>");
?>

Oto krótkie wyjaśnienie:

  1. W pierwszej linijce instrukcja set_time_limit mówi interpreterowi PHP, aby nie zabijał skryptu. Domyślnie gdy skrypt się wykonuje powyżej 30 sekund, to interpreter PHP może przerwać jego wykonywanie. Z doświadczenia wiem, że plik mający 600 MB wrzuca się na serwer około 2-3 minuty (czasami nawet nieco dłużej, zależy to pewnie od chwilowego obciążenia serwera źródłowego i docelowego)
  2. Poniżej są wpisane dane serwera na który plik będzie wrzucany (serwer FTP, login, hasło) oraz nazwa pliku źródłowego (domyślnie jest on w tym samym katalogu co plik php) i pliku docelowego (wraz ze ścieżką bo nie wrzucamy go raczej do głównego katalogu na FTP tylko np. do podkatalogu public_html)
  3. Następnie za pomocą instrukcji ftp_connectftp_login logujemy się na serwerze
  4. Jeśli wszystko poszło po naszej myśli, to za pomocą instrukcji ftp_put wrzucamy plik na serwer. Użyłem tutaj flagi FTP_BINARY gdyż będzie to plik binarny. Jeśli bym wrzucał plik tekstowy, to można użyć flagi FTP_ASCII, ale nie zawsze jest pewność, czy każdy plik tekstowy zawiera tylko znaki alfanumeryczne więc ja zawsze wszystko wrzucam jako pliki binarne
  5. Następnie sprawdzamy czy plik się udało wrzucić i jest wyświetlany odpowiedni komunikat
  6. Później rozłączamy się z serwerem FTP za pomocą instrukcji ftp_close
  7. Na koniec wypisujemy ile czasu zajęło nam wrzucenie pliku

Wskazówka: Czasami na KEI po kilku minutach pracy przeglądarka mi zwracała komunikat w stylu „proxy error”, ale pomimo takiego komunikatu błędu (pewnie przeglądarka zbyt długo czekała na wyświetlenie się strony) plik FTP był dalej wysyłany.

Tagi: , ,

Zanim dodasz komentarz, zapoznaj się z kilkoma podstawowymi zasadami:

  1. Jeśli zamiast imienia (lub pseudonimu) wpiszesz jakiś mało logiczny ciąg znaków np. asdfg, to taki komentarz zostanie usunięty.
  2. Jeśli się za kogoś podszywasz, to taki komentarz zostanie usunęty
  3. Jeśli zamiast imienia (pseudonimu) wpiszesz jakieś słowo kluczowe (np. tani hosting), to taki komentarz zostanie usunięty
  4. Jeśli Twoim jedynym celem jest zareklamowanie się, to taki komentarz zostanie niezwłocznie usunięty
  5. Komentarze nie związane z tematem notki są kasowane.
  6. Komentarze, które zawierają wulgarne słowa, bądź są obraźliwe (nie dotyczy konstruktywnej krytyki) są kasowane.
  7. Komentarze z mailem typu "nie.podam@coś.tam.pl" są kasowane
  8. Komentarze pisane niechlujnie (bez interpunkcji, w błędami ortograficznymi, z licznymi literówkami, pisane WIELKIMI LITERAMI) są kasowane

Jeden komentarz do “Przesyłanie plików na FTP”

  1. Krzysztof Trybulski Says:

    Ach, kiedyś to były czasy. Trzeba było kombinować na każdym kroku, żeby zrobić coś sensownego. Jak na tamte czasy, tekst bardzo dobry.

Zostaw komentarz

WordPress - Hosting: Twój hosting - Skórka: N.Design Studio - Spolszczenie: Adam Klimowski.
RSS wpisów RSS komentarzy Zaloguj się