Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]wgrywanie plików przez użyytkowników
Forum PHP.pl > Forum > Przedszkole
sweter
Spisałem z mojej książki skrypt do wgrywania plików przez użytkowników na serwer. Oto on:
  1. <?php
  2. if(!is_uploaded_file($HTTP_POST_FILES['zdjecie']['tmp_name'])){
  3.        echo "Pliku nie przeslano";
  4.        unlink($HTTP_POST_FILES['zdjecie']['tmp_name']);
  5.      }else{
  6.        /*przetwarzanie pliku*/
  7.        $maksymalny_rozmiar_pliku=102400;
  8.          if($HTTP_POST_FILES['zdjecie']['size'] > $maksymalny_rozmiar_pliku){
  9.            echo "Rozmiar pliku nie może przekroczyć 100 kB";
  10.            unlink($HTTP_POST_FILES['zdjecie']['tmp_name']);
  11.          }else{
  12.            /*przetwarzanie pliku*/
  13.            if($HTTP_POST_FILES['zdjecie']['type'] != "image/gif" AND
  14.           $HTTP_POST_FILES['zdjecie']['type'] != "image/pjpeg" AND
  15.           $HTTP_POST_FILES['zdjecie']['type'] != "image/jpeg"){
  16.               echo "Można pzesyłać jednynie pliki z rozszerzeniem .jpg i .gif";
  17.               unlink($HTTP_POST_FILES['zdjecie']['tmp_name']);
  18.        }else{
  19.               /*format plik jest poprawny*/
  20.               echo "ok";
  21.            }
  22.          }
  23.      }
  24. ?>

Jednak wciąż pojawia mi się napis "Pliku nie przeslano".
Poza tym wyświetla mi się błąd: "Warning: unlink() [function.unlink]: No such file or directory in (wskazuje na pierwszą funkcję unlink)";

Co trzeba naprawić?
erix
  1. <?php
  2. $HTTP_POST_FILES
  3. ?>

Coś stara ta książka...

Sprawdzałeś w ogóle użycie w manualu? is_uploaded_file" title="Zobacz w manualu PHP" target="_manual
homik
Jeżeli robiłeś to z takiego formularza:
  1. <form enctype="multipart/form-data" action="upload.php" method="POST">
  2. <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> /* maksymalna wielkość pliku w bajtach */
  3. Plik do wysłania: <input name="userfile" type="file" />
  4. <input type="submit" value="Wyślij" />
  5. </form>

gdzie jest pole typu file, to wszystkie informacje odnośnie tego pliku znajdziesz w tablicy $_FILES.
Wg mnie powinienes zamienić $HTTP_POST_FILES na $_FILES.
Jesli pole <input type="file"> ma właściwośc name="zdjecia", to zamiast $HTTP_POST_FILES['zdjecia'] zostawiasz $_FILES['zdjecia'].

http://webmade.org/porady/upload-plikow-wg...-serwer-php.php
Tam więcej się dowiesz.
sweter
Okej. zmieniłem według waszych rad $HTTP_POST_FILES na $FILES i w pierwszym if'ie usunąłem "!".
kod wygląda teraz tak:
Kod
  if(isset($_SESSION['login'])){
      if(is_uploaded_file($FILES['zdjecie']['tmp_name'])){
        echo "Pliku nie prezeslano";
        unlink($FILES['zdjecie']['tmp_name']);
      }else{
        /*przetwarzanie pliku*/
        $maksymalny_rozmiar_pliku=102400;
          if($FILES['zdjecie']['size'] > $maksymalny_rozmiar_pliku){
            echo "Rozmiar pliku nie może przekroczyć 100 kB";
            unlink($FILES['zdjecie']['tmp_name']);
          }else{
            /*przetwarzanie pliku*/
            if($FILES['zdjecie']['type'] != "image/gif" AND
           $FILES['zdjecie']['type'] != "image/pjpeg" AND
           $FILES['zdjecie']['type'] != "image/jpeg"){
               echo "Można pzesyłać jednynie pliki z rozszerzeniem .jpg i .gif";
               unlink($FILES['zdjecie']['tmp_name']);
        }else{
               /*format plik jest poprawny*/
               echo "ok";
            }
          }
      }
    }

Jednak teraz występuje mi błąd w linijce z ostatnią funkcją unlink(). Brzmi on tak:
Cytat
Warning: unlink() [function.unlink]: No such file or directory in C:\Program Files\WebServ\httpd-users\siedlczanin.net\uzytkownicy\wgranie_zdjecia.php on line 111


Poza tym wyświetla mi się komunikat "Można pzesyłać jednynie pliki z rozszerzeniem .jpg i .gif", mimo że wgrywałem plik, który jest z rozszerzeniem .gif !

Co jest źle?
erix
Cytat
$FILES

Oj, jak czytasz, to czytaj uważnie, bo nie ma takiej tablicy. winksmiley.jpg

Kurs PHP się kłania.
jsmp
Cytat
if($HTTP_POST_FILES['zdjecie']['type'] != "image/gif" AND
$HTTP_POST_FILES['zdjecie']['type'] != "image/pjpeg" AND
$HTTP_POST_FILES['zdjecie']['type'] != "image/jpeg"){

A nie lepiej sprawdzać MIME ?
erix
Przecież to jest sprawdzanie MIME... Sęk w tym, że używa nie tej tablicy, co trzeba.
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.