Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] pobieranie pliku z serwera
Forum PHP.pl > Forum > PHP
qwe
Witam

Jestem początkujący ale próbuje zrobić stronkę gdzie będzie można uplodować plik na serwer albo ściągnąć.

Za pomocą formularza zrobiłem upload pliku do katalogu pliki

index.html

Kod
<FORM ENCTYPE="multipart/form-data" action="upload.php" method=post>
<FORM ENCTYPE="multipart/form-data" method=post>
<INPUT TYPE="FILE" NAME="plik" SIZE="50">
<br>
<INPUT TYPE="SUBMIT" VALUE="WYSLIJ">
</form>



upload.php

Kod
<?php
$uploaddir = 'pliki/';
if(move_uploaded_file($_FILES['plik']['tmp_name'], $uploaddir.$_FILES['plik']['name']))
{
echo 'Plik zostal zaladowany poprawnie <br><br>';

}
else
echo 'Blad podczas wysylania pliku.';


I mam problem jak zrobić aby za pomocą formularza wpisać nazwę pliku np plik.txt i z katalogu pliki został on ściągnięty na dysk np na dysk c

Szukałem w necie jakichś bardzo prostych skryptów (tak jak ten z wysyłaniem pliku) ale nic nie znalazłem, wszystkie skrypty są rozbudowane a mi taki nie potrzebny. Chciałbym pobierać pliki które mają max 500kb


proszę o pomoc

z góry dziękuję
matixrr
  1. <?php
  2.  
  3. echo'<form action="test.php" method="post">
  4.    wpisz nazwe pliku <br>
  5.    <input type="text" name="nazwa" id="nazwa" value="">
  6.    
  7.    <br><input type="submit" name="download" value="znajdz">
  8.    <input type="reset" value="wyczyść">
  9.    </form>';
  10.  
  11. if(isset($_POST['download']))
  12. {
  13.  $nazwa = $_POST['nazwa'];  
  14.    
  15.    if (!file_exists($nazwa))
  16.    {
  17.    echo("Na serwerze nie ma pliku o nazwie $nazwa");
  18.    }
  19.    else
  20.    {
  21.    echo("Plik o nazwie $nazwa został odnaleziony.<br><br>W ciągu kilku sekund powinno rozpocząć się pobieranie pliku.
  22. Jeśli pobieranie nie rozpoczęło się automatycznie, proszę kliknąć na ten <a href=$nazwa>link</a>
  23. <META HTTP-EQUIV='Refresh' CONTENT='2; URL=$nazwa'>");
  24.    }
  25.  
  26. }
  27. ?>


Plik musi być umieszczony w katalogu z którego mają być pobierane pliki.
qwe
umiescilem kod w katalogu download - wyszukuje plik wyswietla

Cytat
Plik o nazwie $nazwa został odnaleziony.<br><br>W ciągu kilku sekund powinno rozpocząć się pobieranie pliku.
Jeśli pobieranie nie rozpoczęło się automatycznie, proszę kliknąć na ten <a href=$nazwa>link</a>


ale nie pobiera pliku na serwer tylko pokazuje jakohttp://www.strona.pl/download/test.txt
matixrr
Niestety ja się poddaje. Teoretycznie miałem kod który powinien działać, ale mi za nic nie chciał zadziałać.

Tutaj daje linka jakby do rozwiazania:

http://www.google.pl/search?q=%22header(&#...-8&oe=utf-8

Oczywiscie probowalem pobierac jakby na sztywno czyli okreslajac konkretny plik jak i ze zmiennymi, ale efekt w sumie zawsze ten sam. Sciaga mi sie plik ze zrodlem strony, nic, bledna nazwa lub rozszerzenie.

Sam jestem ciekaw jak to ktos rozwiaze, moze jest osoba ktora sie juz z tym meczyla.
qwe
matixrr ale i tak dziękuje smile.gif będę próbował jakoś to zrobić i popytam jeszcze ludzi jak coś będę miał to dam znać
matixrr
Ukłon należy się dla @NuLL za skrypt do sciagania.

  1. <?php
  2.  
  3. echo'<form action=test.php method=post>
  4.   <input type=text name=cos id=cos>
  5.   <br><input type=submit name=pobierz value=pobierz>
  6.   </form>';
  7.  
  8. if(isset($_POST['pobierz']))
  9. {
  10. $file = $_POST['cos'];  
  11.  
  12.    //First, see if the file exists
  13.    if (!is_file($file)) { die("<b>404 File not found!</b>"); }
  14.  
  15.    //Gather relevent info about file
  16.    $len = filesize($file);
  17.    $filename = basename($file);
  18.    $file_extension = strtolower(substr(strrchr($filename,"."),1));
  19.  
  20.    //This will set the Content-Type to the appropriate setting for the file
  21.    switch( $file_extension ) {
  22.          case "pdf": $ctype="application/pdf"; break;
  23.      case "exe": $ctype="application/octet-stream"; break;
  24.      case "zip": $ctype="application/zip"; break;
  25.      case "doc": $ctype="application/msword"; break;
  26.      case "xls": $ctype="application/vnd.ms-excel"; break;
  27.      case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
  28.      case "gif": $ctype="image/gif"; break;
  29.      case "png": $ctype="image/png"; break;
  30.      case "jpeg":
  31.      case "jpg": $ctype="image/jpg"; break;
  32.      case "mp3": $ctype="audio/mpeg"; break;
  33.      case "wav": $ctype="audio/x-wav"; break;
  34.      case "mpeg":
  35.      case "mpg":
  36.      case "mpe": $ctype="video/mpeg"; break;
  37.      case "mov": $ctype="video/quicktime"; break;
  38.      case "avi": $ctype="video/x-msvideo"; break;
  39.  
  40.      //The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
  41.      case "php":
  42.      case "htm":
  43.      case "html":
  44.      case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;
  45.  
  46.      default: $ctype="application/force-download";
  47.    }
  48.  
  49.    //Begin writing headers
  50.    header("Pragma: public");
  51.    header("Expires: 0");
  52.    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  53.    header("Cache-Control: public");
  54.    header("Content-Description: File Transfer");
  55.    
  56.    //Use the switch-generated Content-Type
  57.    header("Content-Type: $ctype");
  58.  
  59.    //Force the download
  60.    @$header="Content-Disposition: attachment; filename=".$filename.";";
  61.    header($header );
  62.    header("Content-Transfer-Encoding: binary");
  63.    header("Content-Length: ".$len);
  64.    @readfile($file);
  65.    exit;
  66. }
  67.  
  68. ?>


Nie wiem czy nie wymagane jest aby było output_buffering=on
qwe
matixrr wielkie dzięki smile.gif działa

tylko muszę przerobić aby pobierał pliki txt bo reszta rozszerzeń nie jest potrzebna

ale jeszcze raz

bardzo dziękuje za pomoc smile.gif
matixrr
No szkoda że teraz powiedziałeś że to ma być jeden format pliku, ale trudno smile.gif

Jbc to:
  1. <?php
  2. case "txt": $ctype="text/plain"; break;
  3. ?>
qwe
w poście napisałem

Cytat
I mam problem jak zrobić aby za pomocą formularza wpisać nazwę pliku np plik.txt i z katalogu pliki został on ściągnięty na dysk np na dysk c

Szukałem w necie jakichś bardzo prostych skryptów (tak jak ten z wysyłaniem pliku) ale nic nie znalazłem, wszystkie skrypty są rozbudowane a mi taki nie potrzebny. Chciałbym pobierać pliki które mają max 500kb



ale dziękuje i przepraszam za dodatkowy kłopot - może niezbyt konkretnie sprecyzowałem
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.