Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] upload plików - temat wałkowany
Forum PHP.pl > Forum > Przedszkole
raak07
Cześć
Napisałem „coś takiego” (kod poniżej - przepraszam że taki obszerny) do pobierania plików. Został napisany na podstawie informacji zaciągniętych z Internetu, nie jestem w przedszkolu ale raczkuję w PHP.
Testuję to na moim localhoscie pod FF i IE6 - prawie działa
Już wyjaśniam co znaczy prawie.
Z plikami typu jpg, txt, msi, mp3, xls, rar, htm, php, cdr, psd, fla, pdf, bmp jest ok. - czyli sprawdza ich typ i wielkość - otrzymuję odpowiedni komunikat, że błędny typ, za duży lub plik jest OK. Pliki typu iso, zip, avi, nrg, (tylko te sprawdzałem) w moim skrypcie(po długim czasie) brak komunikatu - a tak nie powinno być.
Proszę o pomoc.

P.S.
explode('.',basename($_FILES['plik']['name'])); - czy są (a zapewne są) inne sposoby wydzielenia samego rozszerzenia pliku pobieranego pliku
Pozdrawiam
  1. <?php
  2.    if (!empty($_POST))    {
  3.  
  4. print "<pre>";
  5. print_r (explode('.',$_FILES['plik']['name']));
  6. print_r ($_POST);
  7. print_r ($_FILES);
  8. Print "<pre>";
  9. $duzy = 0;
  10. $format = 0;
  11.        if ( is_uploaded_file($_FILES['plik']['tmp_name']) &&  $_FILES["plik"]["type"] == "image/pjpeg" || $_FILES["plik"]["type"] == "image/gif" || $_FILES["plik"]["type"] == "image/jpeg") {        
  12.            if ( $_FILES["plik"]["size"] < 60000) {     }                                        
  13.            else
  14.            $duzy = 1;
  15.             }
  16.            else
  17.            $format = 1;                    
  18.        if ($duzy == 0 && $format == 0) {print " - ".basename($_FILES['plik']['name'])." plik OK <br>";}        
  19.        if ($duzy == 1) {print " - ".basename($_FILES['plik']['name'])." za duży plik <br>";}
  20.        if ($format == 1) {print " - ".basename($_FILES['plik']['name'])." nie właściwy format pliku <br>";    }
  21. }
  22. ?>
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  4. <title>Untitled Document</title>
  5. </head>
  6. <body >
  7. <form action="test.php" method="post" enctype="multipart/form-data" name="dane" >
  8. <table width="342" cellspacing="0" cellpadding="0">
  9. <tr>
  10. <td><input name="plik" type="file" /></td>
  11. </tr>
  12. <table width="443" cellspacing="0" cellpadding="0">
  13. <tr>
  14. <td width="446">&nbsp;</td>
  15. <td width="70"><input type="submit" name="przycisk" value="Zapisz" /></td>
  16. <td width="26">&nbsp;</td>
  17. <td width="70"><input type="submit" name="przycisk" value="Koniec" /></td>
  18. </tr>
  19. </form>
  20. </body>
  21. </html>
kefirek
Cytat(raak07 @ 5.06.2009, 21:39:36 ) *
P.S.
explode('.',basename($_FILES['plik']['name'])); - czy są (a zapewne są) inne sposoby wydzielenia samego rozszerzenia pliku pobieranego pliku
Pozdrawiam


  1. <?php
  2. $roz = pathinfo($_FILES['plik']['name'], PATHINFO_EXTENSION);
  3. ?>
raak07
Dziękuję
Pozdrawiam
Maxik
Podejrzewam, że wrzucasz pliki większe niż rozmiar ustalony w dyrektywie upload_max_filesize
raak07
Cześć
Dziękuję za zainteresowanie moim postem.
Tak, rzeczywiście opisana przeze mnie sytuacja ma miejsce podczas przesyłania dużych plików powyżej 8MB. Wartości w php.ini upload_max_filesize = 2M a post_max_size = 8M.
Byłem przekonany iż linia if ($_FILES["plik"]["size"] < 60000) „załatwi” sprawę.
Czy system nie powinien generować jakiegoś komunikatu?
Pozdrawiam
erix
Cytat
Czy system nie powinien generować jakiegoś komunikatu?

Zainteresuj się jeszcze $_FILES['plik']['error']. [;
raak07
Hej
Dziękuję za odpowiedź.
Wyświetlałem i otrzymywałem kod błędu:
0 – wszystko OK.
1 – nie właściwy format pliku
4 – brak pliku
Jak już pisałem w pierwszym moim poście gdy plik jest duży(<8MB) to jest brak jakiego kol wiek komunikatu nawet tych moich.
Pozdrawiam
erix
Cytat
UPLOAD_ERR_INI_SIZE
Value: 1; The uploaded file exceeds the upload_max_filesize directive in php.ini.

[;
raak07
Hej
Jeszcze raz dziękuję za zainteresowanie.
Chyba źle napisałem, spróbuję raz jeszcze.
Jak chcę przesłać plik graficzny(i nie tylko) większy niż 2MB a mniejszy od 8MB to otrzymuję kod błędu - 1 natomiast jeżeli jest próba przesłania pliku ponad 8MB to następuje tylko przeładowanie strony i nie ma nr błędu(wartość pusta).Czas tej operacji jest dosyć długi zależny od wielkości pliku, to dzieje się na localhoscie a co będzie w sieci?. Zastanawia mnie po co pisać polecenie sprawdzania wielkości jak to "załatwi" serwer.
Pozdrawiam
erix
Na jakim systemie działa Twój localhost?
raak07
Hej
Windows XP sp3
Apache 2.0.49
PHP Version 4.3.6

Dziękuję za zainteresowanie
Pozdrawiam
erix
Potestuj na jakimś Unixie... Pod Windows czasem dziwnie działa... Np. przez LAMP pod VM na jakimś Linuxie.

Poza tym, z czym do ludzi? PHP4? Najpierw zmień na PHP5, potem pogadamy.
raak07
Cześć
Dziękuję, że nadal interesujesz się moim postem - podziwiam cierpliwość.
Testowałem mój kod na serwerze w sieci, działa i komunikaty otrzymuję jak na moim localhoscie.
Chyba powinna być jakaś możliwość sprawdzenia wielkości pliku przed uploadem bo,
proszę sobie wyobrazić jak użytkownik przez przypadek wybierze plik do przesłania o wadze np.800MB lub większej. Testowałem na plikach trochę większych niż 8MB i trwało to ponad kwadrans by strona się przeładowała i otrzymałem odpowiedni komunikat - korzystam z neostrady opcja 1Mb. Na serwerze jest PHP Version 5.2.9 a ustawione upload_max_filesize = 8M a post_max_size = 8M. Jak już pisałem w PHP to jestem na etapie raczkowania i amatorem, dla tego piszę na forum by zaczerpnąć wiedzy od których chcą się nią podzielić i dziękuję za wszystkie mądre rady.
Pozdrawiam
Maxik
Do forma dodaj: <input type="hidden" name="MAX_FILE_SIZE" value="[maksymalny rozmiar w bajtach]">
raak07
Hej
Dziękuję, ale to nie działa.
Znalazłem za to coś takiego Zobacz tutaj
Cytat
marcini82 10.06.2006, 07:24:54

Czyli to przegladarka powinna zareagowac, a php nie dostaje od niej informacji o rozmiarze pliku zanim sie on caly nie zaladuje?

To w takim razie mozecie mi napisac, w jakich przegladarkach to dziala? Bo probowalem w najnowszych wersjach IE i FF i nic z tego...

Czy to co pisza w manualu php o kontroli rozmiaru przed wyslaniem to tylko nic nie warte pobozne zyczenia?

Pozdrawiam
erix
Cytat
Chyba powinna być jakaś możliwość sprawdzenia wielkości pliku przed uploadem bo,

Użyj czegoś w stylu SWFUpload/Uploadify; tam movik nie pozwoli na dodanie czegoś większego.
raak07
Cześć
Dziękuję wszystkim za udział i podpowiedzi.
Pozdrawiam
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.