Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Filesize
Forum PHP.pl > Forum > PHP
felixk
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.
wookieb
Przed filesize użyj http://pl2.php.net/clearstatcache
felixk
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.
Lion_87
  1. $rozmiar = filesize("$upload_dir$file_name");


moze jakaś kropka? ukośnik? przecinek?....
felixk
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ć ?
Lion_87
to może kropka pomiędzy? ...
felixk
Cytat(Lion_87 @ 25.12.2009, 13:48:30 ) *
to może kropka pomiędzy? ...


Nie pomogło, jakaś inna koncepcja ?
Lion_87
a po co tak z ciekawosci CI ten filesize?
nie wystarczy
  1. $file_size = $_FILES['userfile']['size'];

?
darko
W miejsce zmiennej $rozmiar użyć zdefiniowanej już zmiennej $file_size (linia 49. $file_size = $_FILES['userfile']['size']; ) ?
felixk
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.
darko
Co zwraca wartość 0 ? Pokaż kod po zmianach, jeśli warunek zostanie spełniony powinno być die
felixk
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.  
darko
Wywal clearstatcache
felixk
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 questionmark.gif Bo tylko teraz tego mi brak. Ten if nie jest wykonywany
darko
to jeszcze w do_upload daj
global $upload_url;
global $upload_dir;
felixk
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 ?
darko
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.
felixk
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ą.
darko
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)
felixk
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ść
darko
Sam siebie cytujesz 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.