Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] problem z uploadem plikow
Forum PHP.pl > Forum > Przedszkole
piciuuuu
witam,
to niestety znowu ja smile.gif z kolejnym problemem, tym razem robie do stronki upload, skorzystalem z gotowego dosc prostego skryptu, chcialem do niego dolozyc sprawdzanie czy uploadowany plik to gif jpg lub jpeg, oto plik:

  1. <?php
  2.  
  3. $site_name = $_SERVER['HTTP_HOST'];
  4. $url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
  5. $url_this = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
  6.  
  7. $upload_dir = "upload_files/";
  8. $upload_url = $url_dir."/upload_files/";
  9. $message ="";
  10.  
  11. //create upload_files directory if not exist
  12. //If it does not work, create on your own and change permission.
  13. if (!is_dir("upload_files")) {
  14. die ("upload_files directory doesn't exist");
  15. }
  16.  
  17. if ($_FILES['userfile']) {
  18. $message = do_upload($upload_dir, $upload_url);
  19. }
  20. else {
  21. $message = "Wybierz plik z komiksem który chciałbyś uploadować na serwer.";
  22. }
  23.  
  24. print $message;
  25.  
  26. function do_upload($upload_dir, $upload_url) {
  27.  
  28. $temp_name = $_FILES['userfile']['tmp_name'];
  29. $file_name = $_FILES['userfile']['name']; 
  30. $file_type = $_FILES['userfile']['type']; 
  31. $file_size = $_FILES['userfile']['size']; 
  32. $result = $_FILES['userfile']['error'];
  33. $file_url = $upload_url.$file_name;
  34. $file_path = $upload_dir.$file_name;
  35.  
  36. $filetype1 = ".jpg";
  37. $filetype2 = ".gif";
  38. $filetype3 = ".jpeg";
  39. $ext = strrchr($file_name,'.');
  40. print($ext);
  41. //File Name Check
  42. if ( $file_name =="") { 
  43. $message = "Błędna nazwa pliku";
  44. return $message;
  45. }
  46. //File Size Check
  47. else if ( $file_size > 5000000) {
  48. $message = "Rozmiar pliku przekracza 5000K.";
  49. return $message;
  50. }
  51. //File Type Check
  52. else if ( $file_type == "text/plain" ) {
  53. $message = "Przesyłanie skryptów na serwer wzbronione" ;
  54. return $message;
  55. }
  56.  
  57. // else if ($ext != $filetype1) {
  58. else if (($ext != $filetype1 || $ext != $filetype2 || $ext != $filetype3)) {
  59.  
  60. $message = "Przesyłanie na serwer tylko plików gif, jpg, jpeg" ;
  61. return $message;
  62. }
  63.  
  64.  
  65.  
  66.  
  67.  
  68. $result = move_uploaded_file($temp_name, $file_path);
  69. $message = ($result)?"Adres pliku <a href=$file_url>$file_url</a>" :
  70. "Błąd w uploadowaniu pliku.";
  71. $user=$_SESSION['uzytkownik'];
  72. $data=date("Y-m-d");
  73. $url=$file_url;
  74. mysql_query("INSERT INTO upload VALUES(0,'$user','$data','$url')");
  75.  
  76.  
  77.  
  78.  
  79.  
  80. return $message;
  81.  
  82. }
  83. ?>
  84. <form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
  85. <input type="file" id="userfile" name="userfile">
  86. <input type="submit" name="upload" value="Upload">
  87. </form>


przy takim ukladzie nie mozna uploadowac zadnego pliku

natomiast przy zmianie z

  1. <?php
  2.  
  3. // else if ($ext != $filetype1) {
  4. else if (($ext != $filetype1 || $ext != $filetype2 || $ext != $filetype3)) {
  5.  
  6. $message = "Przesyłanie na serwer tylko plików gif, jpg, jpeg" ;
  7. return $message;
  8. }
  9.  
  10. ?>


na

  1. <?php
  2.  
  3. else if ($ext != $filetype1) {
  4. // else if (($ext != $filetype1 || $ext != $filetype2 || $ext != $filetype3)) {
  5.  
  6. $message = "Przesyłanie na serwer tylko plików gif, jpg, jpeg" ;
  7. return $message;
  8. }
  9.  
  10. ?>


pliki jpg sa uploadowane,

bylbym wdzieczny za rade, pozdrawiam
matrach
  1. <?php
  2. $_FILES['pole']['type']
  3. ?>
zwraca typ mime
Zrów sobie tak:
  1. <?php
  2. //dozwolone typy mime
  3. $mimes[] = 'image/jpg';
  4. $mimes[] = 'image/gif';
  5. //przeszukiwanie tablicy
  6. if (in_array($file_type, $mimes))
  7. {
  8. //plik ma poprawny typ mime
  9. }
  10.  
  11. ?>
in_array()
mike
Nie powinno się ufać typowi mime podawanemu w tablicy $_FILES.
Jest to typ wysylany przez przeglądarkę, a one z kolei określają ten typ ... na podstawie rozszerzenia!

Powinno się stosować ype() lub dla plików graficznych
piciuuuu
dzieki za pomoc, zastosowalem sie do rady @matrachi pojawil sie kolejny problem ktorego nie moge rozwiazac
w tym pliku:
  1. <?php
  2.  
  3. $site_name = $_SERVER['HTTP_HOST'];
  4. $url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
  5. $url_this = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
  6.  
  7. $upload_dir = "upload_files/";
  8. $upload_url = $url_dir."/upload_files/";
  9. $message ="";
  10.  
  11. //create upload_files directory if not exist
  12. //If it does not work, create on your own and change permission.
  13. if (!is_dir("upload_files")) {
  14. die ("upload_files directory doesn't exist");
  15. }
  16.  
  17. if ($_FILES['userfile']) {
  18. $message = do_upload($upload_dir, $upload_url);
  19. }
  20. else {
  21. $message = "Wybierz plik z komiksem który chciałbyś uploadować na serwer.";
  22. }
  23.  
  24. print $message;
  25.  
  26. function do_upload($upload_dir, $upload_url) {
  27.  
  28. $temp_name = $_FILES['userfile']['tmp_name'];
  29. $file_name = $_FILES['userfile']['name']; 
  30. $file_type = $_FILES['userfile']['type']; 
  31. $file_size = $_FILES['userfile']['size']; 
  32. $result = $_FILES['userfile']['error'];
  33. $file_url = $upload_url.$file_name;
  34. $file_path = $upload_dir.$file_name;
  35. $mimes[] = 'image/jpg';
  36. $mimes[] = 'image/gif';
  37.  
  38. //File Name Check
  39. if ( $file_name =="") { 
  40. $message = "Błędna nazwa pliku";
  41. return $message;
  42. }
  43. //File Size Check
  44. else if ( $file_size > 5000000) {
  45. $message = "Rozmiar pliku przekracza 5000K.";
  46. return $message;
  47. }
  48. //File Type Check
  49. else if ( $file_type == "text/plain" ) {
  50. $message = "Przesyłanie skryptów na serwer wzbronione" ;
  51. return $message;
  52. }
  53.  
  54. else if (in_array($file_type, $mimes))
  55. {
  56. $message = "Przesyłanie na serwer tylko plików gif, jpg, jpeg" ;
  57. return $message;
  58. }
  59.  
  60.  $result = move_uploaded_file($temp_name, $file_path);
  61. $message = ($result)?"Adres pliku <a href=$file_url>$file_url</a>" :
  62. "Błąd w uploadowaniu pliku.";
  63. $user=$_SESSION['uzytkownik'];
  64. $data=date("Y-m-d");
  65. $url=$file_url;
  66. mysql_query("INSERT INTO upload VALUES(0,'$user','$data','$url')");
  67.  
  68. return $message;
  69.  
  70. }
  71. ?>
  72.  
  73.  
  74. <form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
  75. <input type="file" id="userfile" name="userfile">
  76. <input type="submit" name="upload" value="Upload">
  77. </form>


nie wiem jak poprawic ten fragment tzn zamiast else if.... wstawic zaprzeczenie, czyli jesli $file_type nie zawiera sie w $mimes to zwraca wiadomosc bledu (pewnie jest to bardzo proste ale ja jestem dopiero raczkujacy w temacie

  1. <?php
  2.  
  3. else if (in_array($file_type, $mimes))
  4. {
  5. $message = "Przesyłanie na serwer tylko plików gif, jpg, jpeg" ;
  6. return $message;
  7. }
  8.  
  9. ?>


z gory dzieki za pomoc
matrach
Zastosuj negacje ('!') która przeczy czemuś czyli można powiedzieć, że w if'ie sprawdza czy zwróciło false.
Inaczej mówiąc zamienia false na true,a true na false
  1. <?php
  2. else if (!in_array($file_type, $mimes))
  3. ?>
piciuuuu
dzieki za info, myslalem ze ! spelnia taka role tylko w != takim ukladzie i nie wiedzialem jak to wrzucic do kodu, zaraz sprawdze taka opcje, wczoraj probowalem to pozmieniac samemu w nastepujacy sposob:

  1.  
  2. <?php
  3.  
  4. $site_name = $_SERVER['HTTP_HOST'];
  5. $url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
  6. $url_this =  "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
  7.  
  8. $upload_dir = "upload_files/";
  9. $upload_url = $url_dir."/upload_files/";
  10. $message ="";
  11.  
  12. //create upload_files directory if not exist
  13. //If it does not work, create on your own and change permission.
  14. if (!is_dir("upload_files")) {
  15.     die ("upload_files directory doesn't exist");
  16. }
  17.  
  18. if ($_FILES['userfile']) {
  19.     $message = do_upload($upload_dir, $upload_url);
  20. }
  21. else {
  22.     $message = "Wybierz plik z komiksem który chciałbyś uploadować na serwer.";
  23. }
  24.  
  25. print $message;
  26.  
  27. function do_upload($upload_dir, $upload_url) {
  28.  
  29.     $temp_name = $_FILES['userfile']['tmp_name'];
  30.     $file_name = $_FILES['userfile']['name']; 
  31.     $file_type = $_FILES['userfile']['type']; 
  32.     $file_size = $_FILES['userfile']['size']; 
  33.     $result    = $_FILES['userfile']['error'];
  34.     $file_url  = $upload_url.$file_name;
  35.     $file_path = $upload_dir.$file_name;
  36.     $mimes[] = 'image/gif';
  37.     $mimes[] = 'image/jpg';
  38.  
  39.     
  40.     
  41.     if (in_array($file_type, $mimes))
  42.     {
  43.                 if ( $file_name =="") { 
  44.                 $message = "Błędna nazwa pliku";
  45.                 return $message;
  46.                         }
  47.     //File Size Check
  48.     else if ( $file_size > 5000000) {
  49.         $message = "Rozmiar pliku przekracza 5000K.";
  50.         return $message;
  51.     }
  52.     //File Type Check
  53.     else if ( $file_type == "text/plain" ) {
  54.         $message = "Przesyłanie skryptów na serwer wzbronione" ;
  55.         return $message;}
  56.  
  57.     
  58.     
  59.  
  60.       $result  =  move_uploaded_file($temp_name, $file_path);
  61.      $message = ($result)?"Adres pliku <a href=$file_url>$file_url</a>" :
  62.               "Błąd w uploadowaniu pliku.";
  63.           $user=$_SESSION['uzytkownik'];
  64.           $data=date("Y-m-d");
  65.           $url=$file_url;
  66.           mysql_query("INSERT INTO upload VALUES(0,'$user','$data','$url')");
  67.           
  68.          
  69.           
  70.           
  71.           
  72.     return $message;
  73.    } 
  74.     
  75.     else
  76.     {
  77.      $message = "Przesyłanie na serwer tylko plików gif, jpg, jpeg" ;
  78.     return $message;}
  79.  
  80.    
  81. }
  82.  
  83. ?>
  84. <form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
  85.   <input type="file" id="userfile" name="userfile">
  86.   <input type="submit" name="upload" value="Upload">
  87. </form>  


i efekt jest taki ze skrypt zezwala na wyslanie gifow a niestety nie pozwala jpg
podejrzewam ze blad kryje sie w

  1. <?php
  2.  
  3.     $mimes[] = 'image/gif';
  4.     $mimes[] = 'image/jpg';
  5.  
  6. ?>


bo po zmianie kolejnosci mozna wgrac jpg a nie mozna gifa

edit
niestety po wprowadzeniu poprawek nadal to samo - mozna gify uploadowac a jpg niestety nie
mike
Popularny problem.
badzIEwIE przesyła pliki .jpg z typem image/pjpeg zresztą zapomniałeś o image/jpeg
piciuuuu
Cytat(mike_mech @ 2006-04-29 11:51:10)
Popularny problem.
badzIEwIE przesyła pliki .jpg z typem image/pjpeg zresztą zapomniałeś o image/jpeg

image/pjpeg pomoglo (a bylem przekonany ze to nie to bo dzialam nie na IE tylko linuchowskiej operze), dzieki za wsparcie
free
Nie wiem czy to problem z moim serwerem / www.free.cal.pl/b.php / probne konto 7dniowe.
Wyskoczylo
Cytat
Warning: mysql_query(): Access denied for user 'apache'@'localhost' (using password: NIE) in /home/free/domains/free.cal.pl/public_html/b.php on line 66

Warning: mysql_query(): A link to the server could not be established in /home/free/domains/free.cal.pl/public_html/b.php on line 66
Adres pliku http://www.free.cal.pl//upload_files/small_salony.jpg

Plik zaladowalo, ale ma prawa dostepu 600 blink.gif
co to moze byc ?
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.