Skrypt php / coś innego do pobierania plików z serwera strony www. ASAP



  • Potrzebuję pomocy przy napisaniu skryptu umożliwiającego sprawne pobranie pliku z serwera strony internetowej. Jak w temacie ASAP. :)


  • Admin

    Cześć! Co masz na myśli pisząc sprawne pobieranie pliku z serwera? Chodzi ci o pobranie pliku przy pomocy FTP w skrypcie PHP na twój serwer czy jakaś automatyzacja pobierania. Albo potrzebujesz jedynie pobierać część informacji zamieszczonych na zewnętrznej stronie? Skoro potrzebujesz pomocy to wrzuć swój kod na Git'a albo chociaż pastebin inaczej ciężko będzie coś wymyślić.



  • Dobra rozjaśnię trochę sprawę. Mam szkolny projekt o właśnie tworzeniu stron www ( w skład tego wchodzi prezentacja multimedialna, krótkie wideo i ta strona właśnie) na stronie będą zamieszczone artykuły o podstawach html i css. Jednak chciałem iść o krok dalej i dodać możliwość pobrania plików ze strony czyli w tym prezentacji i może krótkich kursów html i css w pormie pdf. ( prezentacja tam w swoim kodeku) I tutaj moje pytanie jak to zrobić aby pliki wrzucone na serwer (hosting) strony czyli tam gdzie znajdują się pliki strony oraz zamieszczone tam prezentacja itd. mogły zostać pobrane na komputer dowolnego użytkownika właśnie bezpośrednio z tego serwera ?


  • Admin

    Wystarczy, że raz wrzucisz je na serwer, zrobisz sobie tam katalog albo podstronę np. host, hosting czy jakikolwiek inny i luzem je tam wgrasz. Następnie podajesz linki do tych plików i tyle - jeżeli jest to format .zip, .rar no to z automatu rozpocznie się pobieranie natomiast to co da się uruchomić w przeglądarce czyli .pdf czy jakieś obrazki zostaną uruchomione od razu w przeglądarce. Można to oczywiście ominąć dodając w tym katalogu z obrazkami prosty skrypt w php:

    <?php
    header('Content-type: image/jpg');
    header('Content-Disposition: attachment; filename="testowy.jpg"');
    readfile('testowy.jpg');
    ?>
    

    Można to nieco rozszerzyć pobierając z GET'a np. id obrazka albo wgl. pliku i za pomocą tego parametru wskazywać nazwa-strony.pl/twojfolder/skrypt.php?id=1 na konkretny plik oraz przełączać w zależności od rozszerzenia. Oczywiście w takiej sytuacji podajesz już adres do skryptu a nie do pojedynczych plików na serwerze znajdujących się w twoim katalogu.



  • Nie bardzo rozumiem :P tu jest strona : http://itproject.ct8.pl/index.html (bardzo surowa) i tam w zakładce pliki do pobrania jest pobierz plik i jak to się kliknę to chciałbym aby rozpoczęło się natychmiastowe pobieranie. Widziałem gdzieś i nawet zrobiłem ,że do tego linku był podpięty plik php ze skryptem i po kliknięciu pojawiał się na dole plik który był pobierany tylko jak się go otwierało to obrazka się nie dało otworzyć w pustym dokumencie tekstowym były jakieś błędy i ścieżki serwera.



  • Skrypt jaki posiadam :

    <?php
    $filePath = "Pliki do pobrania"; 
    $fileName = "dw1.txt";
    
    $fd = fopen($filePath.$fileName,"r");
    $size = filesize($filePath.$fileName);
    $contents = fread($fd, filesize($filePath.$fileName));
    
    fclose($fd);
    
    header("Content-Type: application/octet-stream");
    header("Content-Length: $size;");
    header("Content-Disposition: attachment; filename=$fileName");
    
    echo $contents;
    
    chmod("/Pliki do pobrania/dw1.png", 0755);
    
    ?>
    


  • dw1 to nazwa pliku a Pliki do pobrania to nazwa katalogu


  • Admin

    Tak wygląda prosty skrypt który w zależności od tego co podasz po http://twojastrona.pl/folder/skrypt.php?id=% (w miejscu % numer/nazwa pliku) pobiera z katalogu w którym się znajduje plik o rozszerzeniu .jpg.

    <?php
    
    // Pobierasz z URL id
    $id = intval($_GET['id']);
    
    // Dodajesz rozszerzenie pliku
    $as = $id.'.jpg';
    
    // Sprawdzasz czy plik istnieje w katalogu
    if(file_exists($as)){
    
        // Ustawiasz naglowki
        header('Content-type: image/jpg');
        header('Content-Disposition: attachment; filename='.$as);
        readfile($as);
        
    }
    ?>
    

    Content-type oczywiście zmieniasz w zależności od tego co chcesz pobierać z tego serwera np. text/plain to zwykły .txt - resztę rozszerzeń znajdziesz szukając frazy "mime type" na np. wikipedii.

    Problemem tego rozwiązania jest to, że wszystkie pliki muszą być .jpg (lub jakiegoś innego jednego typu) a nie zawsze jest to możliwe tym bardziej, że chcesz tam (jak sam wspominałeś) wrzucić dokumenty (.pdf) i prezentacje (.pptx). Można jeszcze zakombinować podając np. jako drugi parametr rozszerzenie (wtedy wyglądałoby to tak: skrypt.php?id=1?roz=jpg ).

    W takim dużym skrócie to co się tu dzieje powyżej to sprawdzanie czy plik o nazwie (id) i rozszerzeniu (jpg) istnieje na serwerze - jeżeli tak to zostaje pobrany poprzez ustawienie odpowiedniego nagłówka.