Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] skrypt uploadujący zdjecia na serwer, zużywa zbyt dużo pamięci
kristoff
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 5.04.2006

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


Witam. Posiadam taki skrypcik uploadujący na serwer zdjecia za pomocą formularza. Niestety chyba coś jest z nim nie tak a mianowicie z jakiegoś powodu zużywa zbyt dużo pamięci operacyjnej. Np. podczas uploadu 3 zdjeć po 1,4 mb każde, wychodzi błąd krytyczny z informacją że ponad 20 MB pamieci zostało żużyte:

Fatal error: Allowed memory size of 20971520 bytes exhausted (tried to allocate 6144 bytes) in...

Czy to normalne że skrypt zużywa tyle pamięci a jeśli nie to jak go zoptymalizować?
pozdrawiam


  1. <?php
  2. $zdjecia=array(1 => "zdjecie1", 2 => "zdjecie2", 3 => "zdjecie3");
  3. foreach($zdjecia as $war => $var)
  4. {
  5. if(is_uploaded_file($_FILES[$var]['tmp_name']))
  6. {
  7. $err_msg = false;
  8. do {
  9. if(!isset($_FILES[$var]))
  10. {
  11. $err_msg = 'Formularz nie został przesłany w całości';
  12. break;
  13. } else {
  14. $zdjecie = $_FILES[$var];
  15. }
  16.  
  17. switch ($zdjecie['error'])
  18. {
  19. case UPLOAD_ERR_INI_SIZE:
  20. $err_msg = "Rozmiar zdjęć jest zbyt duży. Zdjęcie nie moze przekraczać $max_rozmiar_zdj
    ecia MB"
    ;
  21. break 2;
  22. case UPLOAD_ERR_PARTIAL:
  23. $err_msg = "Podczas wgrywania pliku wystąpił błąd, proszę <a href='form.php'>spróbować ponownie</a>";
  24. break 2;
  25. }
  26.  
  27. if(!in_array($zdjecie['type'], array('image/jpeg', 'image/pjpeg', 'image/png')))
  28. {
  29. $err_msg = "Zdjęcia muszą być w formacie JPEG lub PNG";
  30. break;
  31. }
  32.  
  33. } while (0);
  34.  
  35. if($err_msg)
  36. {
  37. echo $err_msg;
  38. } else {
  39. $rozbita=explode(".", $_FILES[$var]['name']);
  40. move_uploaded_file($_FILES[$var]['tmp_name'],"$upload_dir" . "/$war." . end($rozbita)); 
  41. $plik=$upload_dir . "/$war." . end($rozbita);
  42. chmod("$plik", 0777);
  43. }
  44. // resamplowanie i kopiowanie oryginalnych zdjec na miniatury
  45. Header("Content-type: image/jpeg");
  46.  
  47. list($width, $height) = getimagesize($plik);
  48. $newwidth ='241';
  49. $newheight = '181';
  50.  
  51. switch($war)
  52. {
  53. case 1: $nazwa='a';
  54. break;
  55. case 2: $nazwa='b';
  56. break;
  57. case 3: $nazwa='c';
  58. break;
  59. }
  60.  
  61. $docelowy_obraz=$upload_dir . '/' . $nazwa . '.' . end($rozbita);
  62. $thumb = imagecreatetruecolor($newwidth, $newheight);
  63. $source = imagecreatefromjpeg($plik);
  64.  
  65. imagecopyresampled($thumb, $source, 0,0,0,0,$newwidth, $newheight, $width, $height);
  66.  
  67. imageJPEG($thumb, $docelowy_obraz, 90);
  68. imagedestroy($thumb);
  69.  
  70. // jesli mamy doczynienia z pierwszym zdjeciem tworzymy miniature na strone glowna
  71. if($war==1)
  72. {
  73. Header("Content-type: image/jpeg");
  74.  
  75. list($width, $height) = getimagesize($plik);
  76. $newwidth ='100';
  77. $newheight = '75';
  78.  
  79. $nazwa="waf";
  80. $docelowy_obraz=$upload_dir . '/' . $nazwa . '.' . end($rozbita);
  81. $thumb = imagecreatetruecolor($newwidth, $newheight);
  82. $source = imagecreatefromjpeg($plik);
  83.  
  84. imagecopyresampled($thumb, $source, 0,0,0,0,$newwidth, $newheight, $width, $height);
  85.  
  86. imageJPEG($thumb, $docelowy_obraz, 90);
  87. imagedestroy($thumb);
  88. }
  89.  
  90. }
  91. }
  92. ?>
Go to the top of the page
+Quote Post

Posty w temacie


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 Aktualny czas: 19.08.2025 - 14:56