Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Filesize, Błąd przy porównywaniu rozmiarów
felixk
post
Post #1





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

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


Witam, kolejny problem z formularzem (ale już chyba ostatni). Chce zrobić porównanie wielkości pliku i w zależności albo komunikat albo plik zostaje na serwerze. Oto co napisałem do tej pory:

  1.  
  2. $max = 512000;
  3. $rozmiar = filesize("$upload_dir$file_name"); //linijka nr 60
  4. echo $rozmiar;
  5. if ($rozmiar > $max)
  6. {
  7. echo "Plik za duży";
  8. }
  9.  

Dodam, że plik się nie ładuje.

a oto treść błędu, który występuje:

Warning: filesize() [function.filesize]: stat failed for upload_files/splyw_08.2009_074.jpg in /home/c/h/o/chojnowski/www/test/index.php on line 60


  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. $allow = array("jpg", "jpeg", "gif", "png", "bmp");
  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.  
  26.  
  27. function do_upload($upload_dir, $upload_url) {
  28. global $allow;
  29.  
  30. $temp_name = $_FILES['userfile']['tmp_name'];
  31. $file_name = $_FILES['userfile']['name'];
  32.  
  33. $rozszerzenie_pliku = substr( $file_name, strrpos( $file_name, '.' ) +1 );
  34.  
  35. $file_name = strtolower($file_name);
  36. $file_name = str_replace("ż","z",$file_name);
  37. $file_name = str_replace("ą","a",$file_name);
  38. $file_name = str_replace("Ľ","z",$file_name);
  39. $file_name = str_replace("ę","e",$file_name);
  40. $file_name = str_replace("ł","l",$file_name);
  41. $file_name = str_replace("Ł","l",$file_name);
  42. $file_name = str_replace("ś","s",$file_name);
  43. $file_name = str_replace("ń","n",$file_name);
  44. $file_name = str_replace("ć","c",$file_name);
  45. $file_name = str_replace("ó","o",$file_name);
  46. $file_name = str_replace(" ", "_",$file_name);
  47.  
  48. $file_type = $_FILES['userfile']['type'];
  49. $file_size = $_FILES['userfile']['size'];
  50. $result = $_FILES['userfile']['error'];
  51. $file_url = $upload_url.$file_name;
  52. $file_path = $upload_dir.$file_name;
  53.  
  54. //File Name Check
  55. if ( $file_name =="") {
  56. echo "<script language=\"javascript\">alert('Brak nazwy pliku.')</script>";
  57. }
  58.  
  59. // File Size check
  60. $max = 512000;
  61. $rozmiar = filesize("$upload_dir$file_name");
  62. echo $rozmiar;
  63. if ($rozmiar > $max)
  64. {
  65. echo "Plik za duży";
  66. }
  67.  
  68. //File Type Check
  69. if (in_array($rozszerzenie_pliku, $allow))
  70. {
  71. $result = move_uploaded_file($temp_name, $file_path);
  72. echo "<a href=$file_url>$file_url</a>";
  73. }
  74. else
  75. {
  76. echo "<script language=\"javascript\">alert('Dozwolone tylko pliki graficzne')</script>";
  77. }
  78.  
  79. }
  80.  
  81. echo ' <form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
  82. Obrazek <input type="file" id="userfile" name="userfile">
  83. <input type="hidden" name="MAX_FILE_SIZE" value="512000" />
  84. <input type="submit" name="upload" value="Załaduj">
  85. </form> ';
  86.  
  87. ?>
  88.  

Powyżej pełny kod skryptu. Drugim problemem jest to, że nie wiem jak połączyć wynik sprawdzenia rozmiaru z tym, żeby upload dokonywał się po uzyskiwaniu poprawnego rozmiaru.

Z góry dziękuję za pomoc.
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
wookieb
post
Post #2





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




Przed filesize użyj http://pl2.php.net/clearstatcache
Go to the top of the page
+Quote Post
felixk
post
Post #3





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

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


Cytat(wookieb @ 25.12.2009, 13:19:20 ) *


Teraz pliki się ładują, ale błąd przeniósł się do 61 linii. Jest nadal ten sam.

Ten post edytował felixk 25.12.2009, 13:33:46
Go to the top of the page
+Quote Post
Lion_87
post
Post #4





Grupa: Zarejestrowani
Postów: 850
Pomógł: 120
Dołączył: 15.02.2007
Skąd: Łódź

Ostrzeżenie: (10%)
X----


  1. $rozmiar = filesize("$upload_dir$file_name");


moze jakaś kropka? ukośnik? przecinek?....
Go to the top of the page
+Quote Post
felixk
post
Post #5





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

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


Cytat(Lion_87 @ 25.12.2009, 13:43:25 ) *
[PHP] pobierz, plaintext
  1. $rozmiar = filesize("$upload_dir$file_name");
[PHP] pobierz, plaintext

moze jakaś kropka? ukośnik? przecinek?....


ukośnik kończy zmienną $upload_dir, więc po co dublować ?
Go to the top of the page
+Quote Post
Lion_87
post
Post #6





Grupa: Zarejestrowani
Postów: 850
Pomógł: 120
Dołączył: 15.02.2007
Skąd: Łódź

Ostrzeżenie: (10%)
X----


to może kropka pomiędzy? ...
Go to the top of the page
+Quote Post
felixk
post
Post #7





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

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


Cytat(Lion_87 @ 25.12.2009, 13:48:30 ) *
to może kropka pomiędzy? ...


Nie pomogło, jakaś inna koncepcja ?
Go to the top of the page
+Quote Post
Lion_87
post
Post #8





Grupa: Zarejestrowani
Postów: 850
Pomógł: 120
Dołączył: 15.02.2007
Skąd: Łódź

Ostrzeżenie: (10%)
X----


a po co tak z ciekawosci CI ten filesize?
nie wystarczy
  1. $file_size = $_FILES['userfile']['size'];

?
Go to the top of the page
+Quote Post
darko
post
Post #9





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

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


W miejsce zmiennej $rozmiar użyć zdefiniowanej już zmiennej $file_size (linia 49. $file_size = $_FILES['userfile']['size']; ) ?
Go to the top of the page
+Quote Post
felixk
post
Post #10





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

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


Cytat(darko @ 25.12.2009, 13:57:24 ) *
W miejsce zmiennej $rozmiar użyć zdefiniowanej już zmiennej $file_size (linia 49. $file_size = $_FILES['userfile']['size']; ) ?


Błąd zniknął, ale w chwili gdy plik jest za duży zwraca mi wartość "0" zamiast dać komunikat, że plik za duży.
Go to the top of the page
+Quote Post
darko
post
Post #11





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

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


Co zwraca wartość 0 ? Pokaż kod po zmianach, jeśli warunek zostanie spełniony powinno być die
Go to the top of the page
+Quote Post
felixk
post
Post #12





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

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


Cytat(darko @ 25.12.2009, 14:18:59 ) *
Co zwraca wartość 0 ? Pokaż kod po zmianach, jeśli warunek zostanie spełniony powinno być die


  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. $allow = array("jpg", "jpeg", "gif", "png", "bmp");
  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.  
  26.  
  27. function do_upload($upload_dir, $upload_url) {
  28. global $allow;
  29.  
  30. $temp_name = $_FILES['userfile']['tmp_name'];
  31. $file_name = $_FILES['userfile']['name'];
  32.  
  33. $rozszerzenie_pliku = substr( $file_name, strrpos( $file_name, '.' ) +1 );
  34.  
  35. $file_name = strtolower($file_name);
  36. $file_name = str_replace("ż","z",$file_name);
  37. $file_name = str_replace("?","a",$file_name);
  38. $file_name = str_replace("Ľ","z",$file_name);
  39. $file_name = str_replace("ę","e",$file_name);
  40. $file_name = str_replace("ł","l",$file_name);
  41. $file_name = str_replace("Ł","l",$file_name);
  42. $file_name = str_replace("?","s",$file_name);
  43. $file_name = str_replace("ń","n",$file_name);
  44. $file_name = str_replace("ć","c",$file_name);
  45. $file_name = str_replace("ó","o",$file_name);
  46. $file_name = str_replace(" ", "_",$file_name);
  47.  
  48. $file_type = $_FILES['userfile']['type'];
  49. $file_size = $_FILES['userfile']['size'];
  50. $result = $_FILES['userfile']['error'];
  51. $file_url = $upload_url.$file_name;
  52. $file_path = $upload_dir.$file_name;
  53.  
  54. //File Name Check
  55. if ( $file_name =="") {
  56. echo "<script language=\"javascript\">alert('Brak nazwy pliku.')</script>";
  57. }
  58.  
  59. // File Size check
  60. $max = 512000;
  61. $file_size = $_FILES['userfile']['size'];
  62. echo $file_size; //chyba to daje "0", a tego niżej już nie wykonuje ale także nie uploaduje
  63. if ($file_size > $max)
  64. {
  65. echo "Plik za duży";
  66. }
  67.  
  68. //File Type Check
  69. if (in_array($rozszerzenie_pliku, $allow))
  70. {
  71. $result = move_uploaded_file($temp_name, $file_path);
  72. echo "<a href=$file_url>$file_url</a>";
  73. }
  74. else
  75. {
  76. echo "<script language=\"javascript\">alert('Dozwolone tylko pliki graficzne')</script>";
  77. }
  78.  
  79. }
  80.  
  81. echo ' <form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
  82. Obrazek <input type="file" id="userfile" name="userfile">
  83. <input type="hidden" name="MAX_FILE_SIZE" value="512000" />
  84. <input type="submit" name="upload" value="Załaduj">
  85. </form> ';
  86.  
  87. ?>
  88.  


Ten post edytował felixk 25.12.2009, 14:21:33
Go to the top of the page
+Quote Post
darko
post
Post #13





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

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


Wywal clearstatcache
Go to the top of the page
+Quote Post
felixk
post
Post #14





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

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


Cytat(darko @ 25.12.2009, 14:22:43 ) *
Wywal clearstatcache


Nie uploaduje, nie pokazuje głupot, ale już moje ostatnie pytanie jak zmusić mendę do pokazania komunikatu plik za duży (IMG:style_emoticons/default/questionmark.gif) Bo tylko teraz tego mi brak. Ten if nie jest wykonywany
Go to the top of the page
+Quote Post
darko
post
Post #15





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

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


to jeszcze w do_upload daj
global $upload_url;
global $upload_dir;
Go to the top of the page
+Quote Post
felixk
post
Post #16





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

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


Cytat(darko @ 25.12.2009, 14:32:00 ) *
to jeszcze w do_upload daj
global $upload_url;
global $upload_dir;


Znów mamy"0", a może ten IF jest źle napisany i bez sensu w tym miejscu ?
Go to the top of the page
+Quote Post
darko
post
Post #17





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

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


Czy na pewno miejsce docelowe dla plików to: "upload_files//upload_files/" <-- zobacz tu masz dwa slashe ? Czyli sprawdź, jakie ścieżki podajesz funkcji uploadującej.

Ten post edytował darko 25.12.2009, 14:48:59
Go to the top of the page
+Quote Post
felixk
post
Post #18





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

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


Cytat(darko @ 25.12.2009, 14:46:06 ) *
Czy na pewno miejsce docelowe dla plików to: "upload_files//upload_files/" <-- zobacz tu masz dwa slashe ?


Pliki mniejsze czyli mieszczące się w rozmiarze podanym, są uploadowane i wyświetlane. Natomiast te, które są większe nie są ładowane i nie mamy też komunikatu. A ścieżka jest poprawne, bo mniejsze pliki się poprawnie ładuja a tylko duże nie chcą.
Go to the top of the page
+Quote Post
darko
post
Post #19





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

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


Duże nie chcą się uploadować, bo pewnie przekraczasz maksymalny dozwolony rozmiar pliku dla uploadu ustawiony w php.ini, Jeśli chcesz przetestować czy warunek sprawdzania rozmiaru działa, to spróbuj zmieścić się z rozmiarem przesyłanego pliku pomiędzy wielkością $max = 512000; a maksymalną dozwoloną. W celach testowych możesz nawet na czas wykonywania skryptu ustawić upload_max_filesize na jakąś większą wartość np. ini_set("upload_max_filesize", "10M");

// edit
oczywiście chodzi o to, żeby rozmiar pliku był większy od $max i mniejszy od wartości upload_max_filesize w php.ini (odpowiednio przeliczonej na bajty)

Ten post edytował darko 25.12.2009, 15:11:10
Go to the top of the page
+Quote Post
felixk
post
Post #20





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

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


Cytat(felixk @ 25.12.2009, 14:52:31 ) *
Pliki mniejsze czyli mieszczące się w rozmiarze podanym, są uploadowane i wyświetlane. Natomiast te, które są większe nie są ładowane i nie mamy też komunikatu. A ścieżka jest poprawne, bo mniejsze pliki się poprawnie ładuja a tylko duże nie chcą.


Dobra sprawdze i dam znać na PW co wyszło, bo chwilowo muszę wyjść i nie dam rady tego sprawdzić. Pozdrawiam i dziękuję za cierpliwość
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 20:54