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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: IMG SRC и PHP ImageJpeg() - где ошибка?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Помогите, где ошибка в скрипте? на локальном сервере все работает, в интернене - нет.
morph-x
Отправлено: 30 Июня, 2011 - 18:06:05
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Добрый день всем!
У меня есть файл preview.php, который уменьшает, обрезает и выводит изображения. Путь к изображению передается через параметр src ($_GET['src']). Вот сам файл preview.php:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. header('content-type: image/jpeg');
  3. $source = $_GET['src'];
  4. $width = 101;
  5. $image = imagecreatefromjpeg($source);
  6. $dest = imagecreatetruecolor($width, $width);
  7. $image_width = imagesx($image);
  8. $image_height = imagesy($image);
  9. imagecopyresized($dest, $image, 0, 0, 0, 0, $width, $width, min($image_width, $image_height), min($image_width, $image_height));
  10. imagejpeg($dest);
  11. ?>

Я использую его чтобы выводить миниатюры фотографий.
CODE (htmlphp):
скопировать код в буфер обмена
  1. <img src="preview.php?src=image01.jpg" />
  2. <img src="preview.php?src=image02.jpg" />
  3. <img src="preview.php?src=image03.jpg" />
  4. <img src="preview.php?src=image04.jpg" />
  5. ...

На локальном сервере все работает, а в интернете выводятся почему-то пару фоток из 30-ти. Где у меня ошибка? Что поправить или дописать?
Подскажите пожалуйста. Заранее очень благодарен.

(Отредактировано автором: 30 Июня, 2011 - 18:07:59)

 
 Top
Мелкий Супермодератор
Отправлено: 30 Июня, 2011 - 18:55:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




phpfaq.ru/debug
А именно - запрашивайте этот скрипт напрямую браузером с хостинга, вероятно, скрипт падает.

во-вторых - генерирование изображения очень дорогая операция, кэшируйте их хотя бы.


-----
PostgreSQL DBA
 
 Top
morph-x
Отправлено: 30 Июня, 2011 - 19:15:28
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Мелкий пишет:
phpfaq.ru/debug
А именно - запрашивайте этот скрипт напрямую браузером с хостинга, вероятно, скрипт падает.

Попробовал. Напрямую все отлично работает. А на странице все фотки не отображает, только малую часть :'( . Возможно ли это из-за того, что скрипт не успевает обрабатывать? Если да, то подскажите пожалуйста как исправить.
http://impuls-c[dot]h19[dot]ru/index.php[dot][dot][dot]age=shody-priami - вот страница на которой можно посмотреть, как все это дело выглядит. Непонятные глюки. Обновите пару раз и поймете. Не все фотки грузятся (а их там около 40!). А на локальном сервере все отлично.

(Отредактировано автором: 30 Июня, 2011 - 19:23:58)

 
 Top
Мелкий Супермодератор
Отправлено: 30 Июня, 2011 - 19:43:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Цитата:
GET /resize.php?src=files/photos/shody-priami/04.jpg HTTP/1.1
Host: impuls-c.h19.ru

Цитата:
<b>Fatal error</b>: Out of memory (allocated 7602176) (tried to allocate 8192 bytes) in <b>/home/i/impuls-c.h19.ru/WWW/resize.php</b> on line <b>4</b><br />

На мой взгляд, в комментариях не нуждается.


-----
PostgreSQL DBA
 
 Top
morph-x
Отправлено: 30 Июня, 2011 - 19:52:18
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Только что соединился с сайтом (по FTP) и нашел там файл error_log.txt. В основном там были ошибки типа:
Цитата:
[30-Jun-2011 17:16:23] PHP Fatal error: Out of memory (allocated 7602176) (tried to allocate 8192 bytes) in /home/i/impuls-c.h19.ru/WWW/prev iew.php on line 5

Я так понимаю что я превысил лимит памаяти в файле preview.php на строке 5.
Вот она:

Как мне это все исправить?
P.S. Я прикрепил полный error_log.txt.
Скачать файл: error_log.txt
Скачан раз: 185

(Отредактировано автором: 30 Июня, 2011 - 19:53:04)

 
 Top
Мелкий Супермодератор
Отправлено: 30 Июня, 2011 - 19:55:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Уменьшить размер оригинального файла ручками или перезжать к другому хостеру, не с такими строгими лимитами по памяти.
Для GD лимит в 8мб памяти - это ни о чём.


-----
PostgreSQL DBA
 
 Top
Slavenin
Отправлено: 30 Июня, 2011 - 19:58:49
Post Id



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




так как каждому скипту отводится на выполнение определенное количество памяти, то, возможно, стоит попробовать вызывать этот скрипт для каждой отдельной фотографии. как сделать в php сразу в голову не приходит, а ajax`ом просто вызывайте скрипт для каждой отдельно фотографии. как вариант хранить несколько разных вариантов одного и того же изображения, изменяя размеры при загрузке, один файл оригинальный в одн папку, уменьшенный в другую

(Отредактировано автором: 30 Июня, 2011 - 20:00:36)

 
 Top
vlados
Отправлено: 30 Июня, 2011 - 19:59:45
Post Id



Посетитель


Покинул форум
Сообщений всего: 391
Дата рег-ции: Май 2011  


Помог: 1 раз(а)

[+][+][+]


morph-x меняй хостинг.
 
 Top
Мелкий Супермодератор
Отправлено: 30 Июня, 2011 - 20:04:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Slavenin пишет:
так как каждому скипту отводится на выполнение определенное количество памяти, то, возможно, стоит попробовать вызывать этот скрипт для каждой отдельной фотографии.

Что сейчас и происходит. 1 превьюшка - 1 запуск скрипта. Отстаньте от аякса и изучите http.


-----
PostgreSQL DBA
 
 Top
morph-x
Отправлено: 30 Июня, 2011 - 20:09:24
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Мелкий пишет:
Уменьшить размер оригинального файла ручками или перезжать к другому хостеру, не с такими строгими лимитами по памяти.
Для GD лимит в 8мб памяти - это ни о чём.

Понятно. Большое спасибо! Этот хостинг я выбрал только для тестирования, а по окончанию закину его на хостинг с PHP memory_limit = 128МБ. В Денвер вроде такой же. Еще раз большое спасибо!
 
 Top
Slavenin
Отправлено: 30 Июня, 2011 - 20:17:53
Post Id



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




Мелкий пишет:
Что сейчас и происходит. 1 превьюшка - 1 запуск скрипта. Отстаньте от аякса и изучите http.

нет, вызывать скрипт разными запросами, чтобы было, что скрипт отрабатывает только от одной фотографии.

PS от аякса не отстану, так как его нужно изучать...
 
 Top
morph-x
Отправлено: 30 Июня, 2011 - 20:22:52
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Получается что сейчас у меня при открытии страницы обрабатываются сразу все фотографии, и из-за этого превышается лимит? Если можете, пожалуйста подскажите как мне сделать чтоб за раз обрабатывалась только одна фотография.
 
 Top
Мелкий Супермодератор
Отправлено: 30 Июня, 2011 - 21:01:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)





Slavenin пишет:
PS от аякса не отстану, так как его нужно изучать...

А чего там изучать? дюжина строк из которых меняется только пара.


Slavenin, morph-x, каждый тэг img, равно как и подключение css, js, а так же чего-либо посредством последних двух, инициирует запрос к сайту. Каждый - по 1 запросу. Протокол HTTP потому что. 1 запрос - 1 объект. 1 объект - 1 экземпляр скрипта. Каждый экземпляр скрипта имеет свои лимиты. Свои, а не одни на все запущенные.


-----
PostgreSQL DBA
 
 Top
morph-x
Отправлено: 30 Июня, 2011 - 22:17:36
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Но у меня нет на сайте ни одной фотографии больше 8мб. Максимальный размер фотки у меня это 1.2мб. Значит ни одна фотка не превысила лимит. Почему же у меня ошибка и превышение лимита?
 
 Top
Мелкий Супермодератор
Отправлено: 30 Июня, 2011 - 22:35:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Это в сжатом виде 1,2мб. Не BMP же храните? А для операций над изображением, его необходимо раскодировать, и весить при том оно начинает не один мегабайт, а, собственно высота*ширина*32 бита для truecolor палитры (ну может меньше, GD я не писал, не знаю какие там оптимизации по памяти) + память на жизнедеятельность PHP + аналогично память на саму превьюшку.
И всё то ещё под соусом неплохой загрузки CPU.


-----
PostgreSQL DBA
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Графика в PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB