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 :: Версия для печати :: IMG SRC и PHP ImageJpeg() - где ошибка?
Форумы портала PHP.SU » » Графика в PHP » IMG SRC и PHP ImageJpeg() - где ошибка?

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

1. morph-x - 30 Июня, 2011 - 18:06:05 - перейти к сообщению
Добрый день всем!
У меня есть файл 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-ти. Где у меня ошибка? Что поправить или дописать?
Подскажите пожалуйста. Заранее очень благодарен.
2. Мелкий - 30 Июня, 2011 - 18:55:25 - перейти к сообщению
phpfaq.ru/debug
А именно - запрашивайте этот скрипт напрямую браузером с хостинга, вероятно, скрипт падает.

во-вторых - генерирование изображения очень дорогая операция, кэшируйте их хотя бы.
3. morph-x - 30 Июня, 2011 - 19:15:28 - перейти к сообщению
Мелкий пишет:
phpfaq.ru/debug
А именно - запрашивайте этот скрипт напрямую браузером с хостинга, вероятно, скрипт падает.

Попробовал. Напрямую все отлично работает. А на странице все фотки не отображает, только малую часть :'( . Возможно ли это из-за того, что скрипт не успевает обрабатывать? Если да, то подскажите пожалуйста как исправить.
http://impuls-c[dot]h19[dot]ru/index.php[dot][dot][dot]age=shody-priami - вот страница на которой можно посмотреть, как все это дело выглядит. Непонятные глюки. Обновите пару раз и поймете. Не все фотки грузятся (а их там около 40!). А на локальном сервере все отлично.
4. Мелкий - 30 Июня, 2011 - 19:43:30 - перейти к сообщению
Цитата:
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 />

На мой взгляд, в комментариях не нуждается.
5. morph-x - 30 Июня, 2011 - 19:52:18 - перейти к сообщению
Только что соединился с сайтом (по 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.
6. Мелкий - 30 Июня, 2011 - 19:55:35 - перейти к сообщению
Уменьшить размер оригинального файла ручками или перезжать к другому хостеру, не с такими строгими лимитами по памяти.
Для GD лимит в 8мб памяти - это ни о чём.
7. Slavenin - 30 Июня, 2011 - 19:58:49 - перейти к сообщению
так как каждому скипту отводится на выполнение определенное количество памяти, то, возможно, стоит попробовать вызывать этот скрипт для каждой отдельной фотографии. как сделать в php сразу в голову не приходит, а ajax`ом просто вызывайте скрипт для каждой отдельно фотографии. как вариант хранить несколько разных вариантов одного и того же изображения, изменяя размеры при загрузке, один файл оригинальный в одн папку, уменьшенный в другую
8. vlados - 30 Июня, 2011 - 19:59:45 - перейти к сообщению
morph-x меняй хостинг.
9. Мелкий - 30 Июня, 2011 - 20:04:36 - перейти к сообщению
Slavenin пишет:
так как каждому скипту отводится на выполнение определенное количество памяти, то, возможно, стоит попробовать вызывать этот скрипт для каждой отдельной фотографии.

Что сейчас и происходит. 1 превьюшка - 1 запуск скрипта. Отстаньте от аякса и изучите http.
10. morph-x - 30 Июня, 2011 - 20:09:24 - перейти к сообщению
Мелкий пишет:
Уменьшить размер оригинального файла ручками или перезжать к другому хостеру, не с такими строгими лимитами по памяти.
Для GD лимит в 8мб памяти - это ни о чём.

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

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

PS от аякса не отстану, так как его нужно изучать...
12. morph-x - 30 Июня, 2011 - 20:22:52 - перейти к сообщению
Получается что сейчас у меня при открытии страницы обрабатываются сразу все фотографии, и из-за этого превышается лимит? Если можете, пожалуйста подскажите как мне сделать чтоб за раз обрабатывалась только одна фотография.
13. Мелкий - 30 Июня, 2011 - 21:01:49 - перейти к сообщению

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

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


Slavenin, morph-x, каждый тэг img, равно как и подключение css, js, а так же чего-либо посредством последних двух, инициирует запрос к сайту. Каждый - по 1 запросу. Протокол HTTP потому что. 1 запрос - 1 объект. 1 объект - 1 экземпляр скрипта. Каждый экземпляр скрипта имеет свои лимиты. Свои, а не одни на все запущенные.
14. morph-x - 30 Июня, 2011 - 22:17:36 - перейти к сообщению
Но у меня нет на сайте ни одной фотографии больше 8мб. Максимальный размер фотки у меня это 1.2мб. Значит ни одна фотка не превысила лимит. Почему же у меня ошибка и превышение лимита?
15. Мелкий - 30 Июня, 2011 - 22:35:05 - перейти к сообщению
Это в сжатом виде 1,2мб. Не BMP же храните? А для операций над изображением, его необходимо раскодировать, и весить при том оно начинает не один мегабайт, а, собственно высота*ширина*32 бита для truecolor палитры (ну может меньше, GD я не писал, не знаю какие там оптимизации по памяти) + память на жизнедеятельность PHP + аналогично память на саму превьюшку.
И всё то ещё под соусом неплохой загрузки CPU.

 

Powered by ExBB FM 1.0 RC1