Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]in_array i problem z uploadem, in_array, niezrozumiały komunikat błędu
felixk
post 24.12.2009, 14:12:26
Post #1





Grupa: Zarejestrowani
Postów: 90
Pomógł: 1
Dołączył: 31.01.2009
Skąd: Ostrołęka

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
darko
post 24.12.2009, 14:23:21
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


zamień
  1. $rozszerzenie_pliku = substr( $file_name, strrpos( $file_name, '.' ) +1 );

na
  1. $tmp = pathinfo($file_name);
  2. $rozszerzenie_pliku = $tmp['extension'];


Ten post edytował darko 24.12.2009, 14:23:44


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
wookieb
post 24.12.2009, 14:24:24
Post #3





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Tak jeden magiczny.
Przed ifem daj
  1. var_dump($allow);

I zobacz czy rzeczywiście jest tablicą.


--------------------
Go to the top of the page
+Quote Post
felixk
post 24.12.2009, 14:30:09
Post #4





Grupa: Zarejestrowani
Postów: 90
Pomógł: 1
Dołączył: 31.01.2009
Skąd: Ostrołęka

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
darko
post 24.12.2009, 14:33:31
Post #5





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Co po drodze do warunku if (in_array($rozszerzenie_pliku, $allow)) robisz ze zmienną $allow ? To kompletny kod?


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
felixk
post 24.12.2009, 14:37:44
Post #6





Grupa: Zarejestrowani
Postów: 90
Pomógł: 1
Dołączył: 31.01.2009
Skąd: Ostrołęka

Ostrzeżenie: (0%)
-----


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.  
Go to the top of the page
+Quote Post
darko
post 24.12.2009, 14:41:53
Post #7





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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.

Ten post edytował darko 24.12.2009, 14:42:58


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
felixk
post 24.12.2009, 14:47:42
Post #8





Grupa: Zarejestrowani
Postów: 90
Pomógł: 1
Dołączył: 31.01.2009
Skąd: Ostrołęka

Ostrzeżenie: (0%)
-----


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

Ten post edytował felixk 24.12.2009, 14:59:06
Go to the top of the page
+Quote Post
darko
post 24.12.2009, 14:56:22
Post #9





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


zakomentuj var_dump($allow); smile.gif


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.06.2025 - 23:42