Napisałem na początku mały skrypcik pobierający liste plików z serwera za pomoca funkcji ftp_rawlist, ładnie sformatowałem z użyciem formularzy, itp, itd, ale...
...kolega zażyczył sobie żeby użytkownicy nie widzieli loginu i hasła do serwera FTP (chociaż i tak ten użytkownik mógł tylko pobierać pliki) które aktualnie bylo w żródle strony w HTML w postaci:
to wymyśliłem, że php będzie otwierać plik i wyświetlać poprzez funkcje echo/print treść pliku do przeglądarki. Niestety jednak plik pobierał się albo za duży 3 razy, albo tylko połowe, albo kilka MB/KB - różnie ponieważ kombinowałem z warunkiem w while oraz funkcją fread/readfile.
I teraz moje pytanie brzmi co teraz zrobić żeby działo jak trzeba?
Kod odpowiedzialny za pobierani pliku to:
<?php switch($file_ext) { [ ...tutaj długa lista rozszerzeń... ] } $size = 0; $result = @ftp_chdir($conn_id, $folder); if(!$result) { $message = 'Nie mozna przejść do katalogu <b>' . $folder . '</b> na serwerze <b>' . $serwer . '</b>.'; message_die(GENERAL_ERROR, $message); } else { $zawartosc = get_files($conn_id, '.'); // // Lista plików // { foreach($zawartosc[2] as $key => $val) { if($val['name'] == $file) { $size = $val['size']; } } } } // Przesyłamy typ pliku do przeglądarki { # workaround for IE filename bug with multiple periods / multiple dots in filename # that adds square brackets to filename - eg. setup.abc.exe becomes setup[1].abc.exe } else { } //check if http_range is sent by browser (or download manager) { //if yes, download missing part $size2=$size-1; $new_length=$size2-$range; } else { $size2=$size-1; } // Odczytujemy treśc pliku $nazwa_pliku = 'ftp://' . $user . ':' . $pass . '@' . $serwer . '/' . $folder . '/' . $file; //seek to start of missing part { } exit; ?>
część kodu pochodzi z komentarzy do funkcjii fread z manuala php - http://pl.php.net/manual/pl/function.fread.php