Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]in_array i problem z uploadem
Forum PHP.pl > Forum > PHP
felixk
Witam, piszę upload plików i chciałbym aby uploadowany plik miał sprawdzane rozszerzenie i dopiero jeśli będzie ono takie jak sobie życzę dokonywany był upload. Napisałem to w następujący sposób:


  1. $allow = array("jpg", "jpeg", "gif", "png", "bmp"); // linijka 48
  2.  
  3. $rozszerzenie_pliku = substr( $file_name, strrpos( $file_name, '.' ) +1 );
  4.  
  5. if (in_array($rozszerzenie_pliku, $allow))
  6. {
  7.  
  8. $result = move_uploaded_file($temp_name, $file_path);
  9. }
  10.  
  11. else
  12. {
  13. echo "<script language=\"javascript\">alert('Dozwolone tylko pliki graficzne')</script>";
  14.  
  15. }


Jednak w trakcie pojawił się błąd o treści:

Warning: in_array() [function.in-array]: Wrong datatype for second argument in /home/c/h/o/chojnowski/www/test/index.php on line 48

i bladego pojęcia nie mam jak to rozwiązać, jakieś pomysły questionmark.gif

Pozdrawiam i z góry dziękuję za pomoc
darko
zamień
  1. $rozszerzenie_pliku = substr( $file_name, strrpos( $file_name, '.' ) +1 );

na
  1. $tmp = pathinfo($file_name);
  2. $rozszerzenie_pliku = $tmp['extension'];
wookieb
Tak jeden magiczny.
Przed ifem daj
  1. var_dump($allow);

I zobacz czy rzeczywiście jest tablicą.
felixk
Cytat(wookieb @ 24.12.2009, 14:24:24 ) *
Tak jeden magiczny.
Przed ifem daj
[PHP] pobierz, plaintext
  1. var_dump($allow);
[PHP] pobierz, plaintext
I zobacz czy rzeczywiście jest tablicą.


Chyba klops, zwraca wartość NULL. Jakiś pomysł questionmark.gif
darko
Co po drodze do warunku if (in_array($rozszerzenie_pliku, $allow)) robisz ze zmienną $allow ? To kompletny kod?
felixk
Cytat(darko @ 24.12.2009, 14:33:31 ) *
Co po drodze do warunku if (in_array($rozszerzenie_pliku, $allow)) robisz ze zmienną $allow ? To kompletny kod?


Nie, tu jest tylko samo sprawdzenie pliku. Kompletny kod całego skryptu wygląda tak:

  1.  
  2. $site_name = $_SERVER['HTTP_HOST'];
  3. $url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
  4. $url_this = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
  5.  
  6. $upload_dir = "upload_files/";
  7. $upload_url = $url_dir."/upload_files/";
  8. $message ="";
  9. $allow = array("jpg", "jpeg", "gif", "png", "bmp");
  10. $rozszerzenie_pliku = substr( $file_name, strrpos( $file_name, '.' ) +1 );
  11. $ext = substr( $file_name, strrpos( $file_name, '.' ) +1 );
  12.  
  13. //create upload_files directory if not exist
  14. //If it does not work, create on your own and change permission.
  15. if (!is_dir("upload_files")) {
  16. die ("Folder nie istnieje");
  17. }
  18.  
  19. if ($_FILES['userfile']) {
  20. $message = do_upload($upload_dir, $upload_url);
  21. }
  22.  
  23. print $message;
  24.  
  25. function do_upload($upload_dir, $upload_url) {
  26.  
  27. $temp_name = $_FILES['userfile']['tmp_name'];
  28. $file_name = $_FILES['userfile']['name'];
  29. $file_type = $_FILES['userfile']['type'];
  30. $file_size = $_FILES['userfile']['size'];
  31. $result = $_FILES['userfile']['error'];
  32. $file_url = $upload_url.$file_name;
  33. $file_path = $upload_dir.$file_name;
  34.  
  35. //File Name Check
  36. if ( $file_name =="") {
  37. $message = "Brak nazwy pliku";
  38. return $message;
  39. }
  40. //File Size Check
  41. else if ( $file_size > 500000) {
  42. $message = "Plik powyżej 500KB. Proszę zmniejszyć rozmiar do 500 KB.";
  43. return $message;
  44. }
  45. //File Type Check
  46.  
  47. var_dump($allow); //zwróciło wartość NULL
  48.  
  49. if (in_array($rozszerzenie_pliku, $allow)) //linijka o którą czepia się parser
  50. {
  51. $result = move_uploaded_file($temp_name, $file_path);
  52.  
  53. }
  54. else
  55. {
  56. echo "<script language=\"javascript\">alert('Dozwolone tylko pliki graficzne')</script>";
  57. }
  58. return $message;
  59. }
  60.  
  61.  
darko
To zmienia postać rzeczy, zasięg zmiennych, podstawy, funkcja do_upload nie widzi zmiennej $allow. Daj na początku w funkcji do_upload: global $allow, albo przekaż jej tablicę $allow parametrem.
felixk
Cytat(darko @ 24.12.2009, 14:41:53 ) *
To zmienia postać rzeczy, zasięg zmiennych, podstawy, funkcja do_upload nie widzi zmiennej $allow. Daj na początku w funkcji do_upload: global $allow, albo przekaż jej tablicę $allow parametrem.


Działa, tylko mi menda wyświetla całą tablicę jako wynik, oto efekt

  1. array(5) { [0]=> string(3) "jpg" [1]=> string(4) "jpeg" [2]=> string(3) "gif" [3]=> string(3) "png" [4]=> string(3) "bmp" }


średnio to wygląda, jak się mogę tego pozbyć questionmark.gif To już efekt po weryfikacji


Dziękuję, znalazłem rozwiązanie. Jeszcze raz dziękuję za pomoc
darko
zakomentuj var_dump($allow); smile.gif
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.