Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: imagecreatefrom... ограничение по объему
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » imagecreatefrom... ограничение по объему

Страниц (1): [1]
 

1. megaPanda - 28 Июня, 2009 - 13:14:47 - перейти к сообщению
Зрасьте гуру программирования.

Ситуация такая:

При загрузки изображения весом 1,5 Мб функция:
$image_orig = imagecreatefromjpeg($_FILES["foto1"]["tmp_name"]); //загружаем оригинальное фото
порождает ошибку:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 10368 bytes) in.......

Вопрос:
Данная функция имеет ограничение по объему обрабатываемой информации?
Или это специфика конкретного PHP, установленного на сервере?

Подскажите, плиз, глупому медведю....
2. vitaliy_mad - 28 Июня, 2009 - 13:38:03 - перейти к сообщению
megaPanda пишет:
Или это специфика конкретного PHP, установленного на сервере?
да.. в php.ini можно измнить размер... параметр не помню... найду скину....
(Добавление)
memory_limit = 64M - php.ini
ini_set('memory_limit', '64M'); в скрипте
php_value memory_limit 64M - .htacces
3. megaPanda - 28 Июня, 2009 - 13:46:02 - перейти к сообщению
Спасибо. А этот параметр конкретно для функций, работающих с графикой?

И еще такой вопрос:
1,5 МБ файл JPEG превращается в 32 метра чистой графики, с которой может PHP работать.
А нельзя ли каким то образом уменьшить данный размер?
Может есть что-нибудь кроме imagecreatefrom...?


Мне просто из тех хостинга ответили:

"
Собственно здесь всё написано:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 10368 bytes) in /home/autotamb/domains/auto-tamb ov.ru/public_html/admin/index.ph p on line 233

Не хватает памяти именно на обработку, и не 1.5, а 32Мб. Здесь, увы, помочь не можем - уменьшайте фото.

"

Я же не могу сам поменять php.ini?
А изменение только .htaccess не поможет?
4. vitaliy_mad - 28 Июня, 2009 - 13:47:59 - перейти к сообщению
megaPanda пишет:
Спасибо. А этот параметр конкретно для функций, работающих с графикой?
этовыделениепамяти для работы php-скрипта....

где то на форуме были функции изменения размеров картинки, может подойдет... поройся...
5. valenok - 28 Июня, 2009 - 14:34:33 - перейти к сообщению
Ты фотографии со спутника обрабатываешь ?

Allowed memory size of 33554432 bytes exhausted (tried to allocate 10368 bytes)
У тебя скрипт основательно налево ходит.
6. megaPanda - 28 Июня, 2009 - 17:26:54 - перейти к сообщению
Да вроде нигде не уходит....

PHP:
скопировать код в буфер обмена
  1. <?PHP if ($_FILES["foto"]["tmp_name"])
  2. {
  3. $size = getimagesize ($_FILES["foto"]["tmp_name"]);
  4. $width=$size[0];
  5. $height=$size[1];
  6. $image_p = imagecreatetruecolor (480, 360);
  7. $image_m = imagecreatetruecolor (120, 90);
  8. $image_orig = imagecreatefromjpeg($_FILES["foto"]["tmp_name"]);
  9. $foto_logo = imagecreatefrompng ("../Image/foto_logo.png");
  10. $c_black = imagecolorallocate ($foto_logo, 0, 0, 0);
  11. imagecolortransparent ($foto_logo, $c_black);
  12. imagecopyresized ($image_p, $image_orig, 0, 0, 0, 0, 480, 360, $width, $height);
  13. imagecopymerge ($image_p, $foto_logo, 360, 260, 0, 0, 85, 85, 40);
  14. imagecopyresized ($image_m, $image_orig, 0, 0, 0, 0, 120, 90, $width, $height);
  15. $file_x="../cars/bigfoto{$iden}_1.jpg";
  16. $file_m="../cars/ico_{$iden}.jpg";
  17. imagejpeg($image_p, $file_x, 70);
  18. imagejpeg($image_m, $file_m, 80);
  19. $foto = <<<OPE
  20. foto = "cars/bigfoto{$iden}_1.jpg", foto_dop = "cars/ico_{$iden}.jpg"
  21. OPE;
  22. $sh_foto = "../cars/bigfoto{$iden}_1.jpg";
  23. $sh_foto_dop = "../cars/ico_{$iden}.jpg";
  24.  
  25. }
  26. if ($_FILES["foto1"]["tmp_name"] <> NULL)
  27. {
  28. //Обработка второй фотографии
  29. $size = getimagesize ($_FILES["foto1"]["tmp_name"]);
  30. $width=$size[0];
  31. $height=$size[1];
  32. $image_p = imagecreatetruecolor (480, 360);
  33. $image_orig = imagecreatefromjpeg($_FILES["foto1"]["tmp_name"]);  
  34. imagecopyresized ($image_p, $image_orig, 0, 0, 0, 0, 480, 360, $width, $height);
  35. imagecopymerge ($image_p, $foto_logo, 360, 260, 0, 0, 85, 85, 40);
  36. $file_x="../cars/bigfoto{$iden}_2.jpg";
  37. imagejpeg($image_p, $file_x, 70);
  38. $foto1 = <<<OPE
  39.  foto1 = "cars/bigfoto{$iden}_2.jpg"
  40. OPE;
  41. $foto = $foto . ", " . $foto1;
  42. $sh_foto1 = "../cars/bigfoto{$iden}_2.jpg";
  43. //Конец обработки второй фотографии
  44. }
  45. if ($_FILES["foto2"]["tmp_name"] <> NULL)
  46. {
  47. //Обработка третей фотографии
  48. $size = getimagesize ($_FILES["foto2"]["tmp_name"]);
  49. $width=$size[0];
  50. $height=$size[1];
  51. $image_p = imagecreatetruecolor (480, 360);
  52. $image_orig = imagecreatefromjpeg($_FILES["foto2"]["tmp_name"]);
  53. imagecopyresized ($image_p, $image_orig, 0, 0, 0, 0, 480, 360, $width, $height);
  54. imagecopymerge ($image_p, $foto_logo, 360, 260, 0, 0, 85, 85, 40);
  55. $file_x="../cars/bigfoto{$iden}_3.jpg";
  56. imagejpeg($image_p, $file_x, 70);
  57. $foto2 = <<<OPE
  58.  foto2 = "cars/bigfoto{$iden}_3.jpg"
  59. OPE;
  60. $foto = $foto . ", " . $foto2;
  61. $sh_foto2 = "../cars/bigfoto{$iden}_3.jpg";
  62. //Конец обработки третей фотографии
  63. }
7. valenok - 28 Июня, 2009 - 18:05:36 - перейти к сообщению
Стоит поискать в двухсот строках кода выше.
8. megaPanda - 28 Июня, 2009 - 23:16:32 - перейти к сообщению
valenok пишет:
Стоит поискать в двухсот строках кода выше.


А что искать? Что может так съедать память?
Там в коде ничего сверхъестественного нет - запросы БД и условия, да и все. Никаких сложных вычислений и функций....

Процесс выдает ошибку именно в тот момент когда идет загрузка данных и jpeg файла.

Если картинки мелкие до 500-600 Кб, то все ок, а если больше, то иногда возникает ошибка...
9. valenok - 28 Июня, 2009 - 23:56:34 - перейти к сообщению
echo memory_get_usage(); по натыкай в скрипте. Найдешь где происходит скачок.
1,5 МБ файл JPEG не должен превращается в 32 метра
10. megaPanda - 29 Июня, 2009 - 09:12:03 - перейти к сообщению
valenok пишет:
echo memory_get_usage(); по натыкай в скрипте. Найдешь где происходит скачок.
1,5 МБ файл JPEG не должен превращается в 32 метра


Спасибо. Попробую.

 

Powered by ExBB FM 1.0 RC1