Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Fatal error: Allowed memory size of 33554432 bytes exhausted
 
 автор: bmW   (07.09.2008 в 11:51)   письмо автору
 
 

Загружаю, все фоты через форму..все нормально..но вот на одной выходит такое:
(и естественно не грузиться на сервер)...что это такое? и как это исправить?

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 12288 bytes

  Ответить  
 
 автор: cheops   (07.09.2008 в 12:12)   письмо автору
 
   для: bmW   (07.09.2008 в 11:51)
 

Памяти не хватает, дело в том, что на скрипт выделяется строго ограниченный объем оперативной памяти, за который он не может выйти, а если выходит возвращает эту ошибку. Скорее всего у вас на каждый скрипт выделсяется 32Мб и когда потребовалось 33Мб с гаком - возникала ошибка. Если работаете с библиотекой GDLib - почаще освобождайте ресурсы, если используете объемные массивы - удаляйте их, когда они больше не нужны, при помощи конструкции unset().

  Ответить  
 
 автор: BMW   (07.09.2008 в 13:07)   письмо автору
 
   для: cheops   (07.09.2008 в 12:12)
 

да, наверно это GDLib хотя я и массив использую(но он не настоко большой всё-таки), но я ставлю imagedestroy() но все в пустую...снова пишет и ссылается на строчку где
if ($size_img[2]==2)  $src_img = imagecreatefromjpeg($filename);  

  Ответить  
 
 автор: Trianon   (07.09.2008 в 13:13)   письмо автору
 
   для: BMW   (07.09.2008 в 13:07)
 

Вам причина ошибки ясна?

Какой размер у создаваемого изображения? Ширина, Высота?

  Ответить  
 
 автор: BMW   (07.09.2008 в 13:28)   письмо автору
 
   для: Trianon   (07.09.2008 в 13:13)
 

нет, не ясна....вообщем скрипт уменьшает изображение и записывает его на сервер вот
<? $name_img=изображение;
$w=400;
    
$size_img getimagesize($_FILES['myfile']['tmp_name'][encode($name_img)]);
$filename=$_FILES['myfile']['tmp_name'][encode($name_img)];
  if(
$size_img[0]>$size_img[1])
{
   
$src_ratio=$w/$size_img[0];
   
$h=$size_img[1]*$src_ratio;
}
else
{
    
$h=$w;
   
$src_ratio=$h/$size_img[1];
   
$w=$size_img[0]*$src_ratio;
}

    
$dest_img imagecreatetruecolor($w$h);     
       
      
    if (
$size_img[2]==2)  $src_img imagecreatefromjpeg($filename);                         
    else if (
$size_img[2]==1$src_img imagecreatefromgif($filename);                         
    else if (
$size_img[2]==3$src_img imagecreatefrompng($filename);  

    
imagecopyresampled($dest_img$src_img0000$w$h$size_img[0], $size_img[1]);                   

    
imagedestroy($src_img);





if(
$_FILES['myfile']['type'][encode($name_img)]=='image/jpeg'$my_type='jpg';
elseif(
$_FILES['myfile']['type'][encode($name_img)]=='image/gif'$my_type='gif';
elseif(
$_FILES['myfile']['type'][encode($name_img)]=='image/png'$my_type='png';
else {
$bad_format=1; echo '&#205;&#229;&#234;&#234;&#238;&#240;&#229;&#242;&#237;&#251;&#233; &#244;&#238;&#240;&#236;&#224;&#242; &#244;&#224;&#233;&#235;&#224;';}


                if(!
$bad_format){

if(
$_FILES['myfile']['tmp_name'][encode($name_img)]) {
$img_name$id_key.'.'.$my_type;
    
$uploaddir $_SERVER['DOCUMENT_ROOT'].'/IMG/'.encode($name_img).'/';

unset(
$_FILES);

    if (
$size_img[2]==2)  {imagejpeg($dest_img$uploaddir .$img_name100); $po=1;}                       
    else if (
$size_img[2]==1) {imagegif($dest_img$uploaddir .$img_name); $po=1;}                        
    else if (
$size_img[2]==3) {imagepng($dest_img$uploaddir .$img_name); $po=1;} 
  
imagedestroy($dest_img);
  unset(
$size_img);

    if (
$po) {
        print 
'<br>&#199;&#224;&#227;&#240;&#243;&#230;&#229;&#237;&#238; '.$img_name.' &#226; &#234;&#224;&#242;&#224;&#235;&#238;&#227; /'.encode($name_img).'';
echo 
'<img src="http://www.s.com/IMG/'.encode($name_img).'/'.$img_name.'">';
}
?>            


PS загружаю изображение 1,5 Мб с 3700 X 2500

  Ответить  
 
 автор: Trianon   (07.09.2008 в 13:45)   письмо автору
 
   для: BMW   (07.09.2008 в 13:28)
 

>нет, не ясна....

Повторяю еще раз. Выделенного объема оперативной памяти (32Мб) php-процессу не хватает для того, чтобы выполнить Ваш скрипт.


>PS загружаю изображение 1,5 Мб с 3700 X 2500
Для загрузки такого изображения GDlib'у требуется 5*3700*2500 байт (примерно 44Мб) . В распоряжении php имеется всего 32Мб.

Так яснее?

  Ответить  
 
 автор: BMW   (07.09.2008 в 13:59)   письмо автору
 
   для: Trianon   (07.09.2008 в 13:45)
 

теперь ясно.... я просто не догадывался что размер картинки отличается от загрузки на сервер.... спасибо)

  Ответить  
 
 автор: lgar   (07.09.2008 в 18:56)   письмо автору
 
   для: cheops   (07.09.2008 в 12:12)
 

Новую тему создавать не хочу, ошибка unable to allocate 9060 байт.. Почему появляется данная ошибка? Нехватка памяти или php под себя память выделить не может.

  Ответить  
 
 автор: Trianon   (07.09.2008 в 21:39)   письмо автору
 
   для: lgar   (07.09.2008 в 18:56)
 

>Новую тему создавать не хочу, ошибка unable to allocate 9060 байт.. Почему появляется данная ошибка? Нехватка памяти

Потому что при выделении очередных 9060 байт памяти был превышен предел.
Вы понимаете, что предел так или иначе когда-нибудь будет достигнут?
Так вот он оказался достигнут.

>или php под себя память выделить не может.
Под себя он выделил еще в момент запуска. Не смог бы выделить под себя - не запустился бы.
Он не может выделить под Вас - под желания программиста.

  Ответить  
 
 автор: lgar   (07.09.2008 в 23:08)   письмо автору
 
   для: Trianon   (07.09.2008 в 21:39)
 

спасибо, теперь всё понятно. просто чаще встречал ошибку сколько использую, столько-то не хватает.

  Ответить  
 
 автор: sedgar   (17.09.2008 в 11:58)   письмо автору
 
   для: lgar   (07.09.2008 в 23:08)
 

>> Для загрузки такого изображения GDlib'у требуется 5*3700*2500 байт (примерно 44Мб) . В распоряжении php имеется всего 32Мб.

Почему первый множитель 5, откуда?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования