Что такое код imagecreatefromjpeg


Проблема с использованием imagecreatefromjpeg и imagejpeg

В соответствии с заданием, данным мне, я пытаюсь увидеть эффекты следующих двух функций php в файле изображения 1. imagecreatefromjpeg 2. imagejpeg

Я загружаю файл с помощью html, а затем мой PHP-код выглядит следующим образом:

Но когда я это сделаю, я получаю следующий вывод:

Неустранимая ошибка: допустимый размер памяти 33554432 байт исчерпан (пытался выделить 10368 байт) в C:\Users\zee\Documents\Flex Builder 3\CLOUD\bin-debug\upload_file.php в строке 3

Размер исходного изображения: 5,136 КБ дает вышеприведенную ошибку после запуска php.

Но если я попробую для другого изображения с размером: 2,752 КБ It Works..

Может кто-то, пожалуйста, помогите мне с этим. Zeeshan

Прежде всего, отбросьте строку header(«Content-type:image/jpeg»); , она ничего не делает с тех пор, как вы используете аргумент имени файла функции imagejpeg() .

Во-вторых, чтобы избежать проблем с памятью, вы должны изменить предел памяти, например:

Если вы решите свои проблемы (поместите его в начале файла).

Чтобы восстановить исходный предел памяти, вы можете добавить следующую строку в конце файла:

Являются ли @imagecreatefromjpeg и imagejpeg() эффективными для предотвращения загрузки пользователями изображений с вредоносным кодом php внутри них?

Вот код в upload_processor.php :

А вот functions.php :

Основная идея состоит в том, чтобы воссоздать образ, а затем переименовать его так, чтобы никто не может загрузить что-то вроде malicious_code.php.jpg .

Каковы отверстия в этом коде? Есть ли лучшие способы защитить мой сайт от изображений, вложенных в PHP?

    5 1
  • 17 мар 2020 2020-03-17 00:08:59
  • Generic_User_ID

1 ответ

imagegreatefrom* возвратит ложь, если произошла ошибка, так что оператор @ не очень многое делает в этой ситуации.

Вместо того, чтобы звонить imagecreatefrom* , вы можете проверить, действителен ли входной файл с помощью exif_imagetype , а затем вызвать соответствующий обработчик. Я не уверен, что есть последствия для безопасности (хотя интуитивно кажется, что могут возникнуть проблемы с безопасностью с вышеуказанным кодом), но производительность должна улучшиться, так как вам не нужно создавать ресурс изображения каждый раз, когда тест на правду терпит неудачу.

Форум PHP программистов ► PHP практикум ► PHP для начинающих

Пейджер выключен!

Профиль
Группа: Пользователь
Сообщений: 44
Пользователь №: 4841
На форуме:
Карма:

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

Не работает : imageCreateFromJPEG(«/images/foto.jpg»)
работает : imageCreateFromJPEG(«foto.jpg»)

мне нужно подобие первого варианта, который не работает . Помогите плз

надо /images/foto.jpg заменить на images/foto.jpg (помогли с другого форума)

хм. даже не думал, что такая комбинация за работает , т.к. /images/foto.jpg не работало :(

а вот еще вопросик, как теперь фото вывести в нужное мне место.

// Определяем ее размеры
$size_x=imageSX($im1);
$size_y=imageSY($im1);

// Создаем вторую пустую картинку
$im2 = imageCreate(500 , 500);

// Выводим в браузер
Header(«Content-type: image/jpeg»);
imageJPEG($im2);

Илон Маск рекомендует:  addslashes - Экранирует спецсимволы в строке

такая структура работает только на чистой странице (кстати, после такого вывода ХТМЛ код просмотреть не получается:( ). А как мне вывести эту фотографию в какое-нибудь место страницы.

PHP imagecreatefromjpeg не работает на большом изображении [дубликат]

Я получаю эту ошибку при использовании функции imagecreatefromjpeg .

Я исследовал, когда эти команды пропускают ошибки в порядке, работает хорошо.

Но Мне интересно, что это не так?

здесь мое изображение exif data

2 ответа

Вы можете проигнорировать ошибку с помощью

(это значение по умолчанию с PHP 7.1, но не в старых версиях)

Я также получаю ту же самую проблему

, которую мы использовали ниже, чтобы исправить эту проблему, и она работает для меня.

imagecreatefromjpeg не работает.

yura56

Guest

imagecreatefromjpeg не работает.

Появилась проблема.
Функция imagecreatefromjpeg перестала работать. Почему не понимаю. До какого-то времени было нормально. При этом какая ошибка совершенно не понятно. Создаётся ощущение, что вылетает где-то внутри этой функции.
С чем может быть связано и как с этим бороться?

Дмитрий Попов

сторож

yura56

Guest

Перестала работать заключается в том, что функция не отрабатывает.

Есть три строчки:
$im = @imagecreatefromjpeg($imgname);
$im1 = imagecreatetruecolor($width1,$height1);
$im2 = imagecreatetruecolor($width2,$height2);

Так вот, после первой строки уже дальше не исполняется.

SelenIT

IT-лунатик :)

yura56

Guest

SelenIT

IT-лунатик :)

PHP «в какой-то момент» обновлялся?

Что выдает phpinfo() в секции ‘gd’?

Screjet

Новичок

yura56

Guest

Без понятия. Предыдущий человек мне про это ничего не говорил. Он говорил, что картинки аплоадиться перестали но с чего сам не знал.
А что за секция gd и где она находится?

SelenIT

IT-лунатик :)

yura56

Guest

Дмитрий Попов

сторож

=) забавно.
Простите, но какой из Вас сисадмин, если Вы не можете установить простейшую библиотеку?

По теме: См. мануал. Секция installation.

yura56

Guest

Дмитрий Попов
Какой-какой. Хреновый. Я ещё только учусь на сисадмина
А на этом сайте мануал имеется?

Выяснил, что очевидно поддержка GD включена.
Секция GD имеет такой вид:

gd
GD Support enabled
GD Version bundled (2.0.28 compatible)
GIF Read Support enabled
GIF Create Support enabled
PNG Support enabled
WBMP Support enabled
XBM Support enabled

Как я понимаю нужно сделать чтобы ещё и JPEG Read Support и JPEG Create Support были enabled?

Нехватка памяти на хостинге для обработки картинок

На моём сайте пользователи загружают картинки, которые уменьшаются до необходимого размера (максимальная сторона — 800 точек). И столкнулся с ограничением памятя для работы PHP скриптов, для обработки фотографий 7 мпикс уже не хватало памяти, а сейчас фотоаппараты и поболее будут, не заставлять же пользователей обрезать фотографии до отправки, многие вообще тогда не будут загружать их.

Ошибка была на строке:

PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 3072 bytes) in…

Чтобы решить проблему, необходимо уменьшить исходную фотографию. ImageMagick на хостинге не оказалось, поэтому не знаю, можно ли было решить проблему через эту библиотеку.
Зато оказалось что можно выполнить внешнюю команду через exec();

Что такое код imagecreatefromjpeg

24614 просмотра

3 ответа

52 Репутация автора

Я работаю над Ubuntu 14.04 LTS с PHP 5.5.9 с включенным GD, и я дважды проверял, но все еще показываю мне это сообщение каждый раз, когда я пытаюсь использовать imagecreatefromjpeg ()

Неустранимая ошибка: вызов неопределенной функции imagecreatefromjpeg () в /../library/image.php в строке 34

я даже пытался проверить это из командной строки с помощью этого

Илон Маск рекомендует:  Принцип кодирования в uuencode и base64

и это возвращает мне бул (ложь)

Есть ли способ исправить это без повторной компиляции?

Ответы (3)

-1 плюса

76 Репутация автора

31 плюса

799 Репутация автора

Я думаю, что вы установили неполную версию gd .
Когда вы компилируете gd расширение, используйте флаг —with-jpeg-dir=DIR и —with-freetype-dir=DIR

пс. не забывай make clean

На картинке ниже incomplete показана версия gd:

На картинке ниже complete показана версия gd:

плюса

1891 Репутация автора

В моем случае GD отсутствовал после обновления до PHP 7.3. Итак, я просто добавил его с помощью следующей команды:

Что такое код imagecreatefromjpeg

Добрый день, уважаемые!

Кто работал с PHP, для тех не секрет, что начиная с версии GD 1.6 в ней отсутствует поддержка GIF (imagecreatefromgif и иже) из-за лицензионной политики UniSys (или как там его правильно). Поэтому приходится забыть о GIF. Вопрос не в этом, а в следующем:

Исходный файл (*.jpg) сохранен с максимальным какчеством. Делаю просто донельзя:

Как видите, выдаю в поток с максимальным (100) качеством. Картинка маленькая (88х31). Так вот и собственно вопрос — а качество на выходе чего такое хреновенькое? Пиль, куриль, болель? Если честно, я был искренне удивлен. С PNG вообще засада, такое ощущение, что специально так сделано, чтобы смотреть страшно было

Так вот — это лыжи не едут? Или как? Прошу пояснить, бо как _почти_любой_ ASP-компонент для рисования и выдачи результатов в JPEG получше будет. А попробовал их в свое время немало.

З.Ы. Идеологические рассуждения типа «PHP рулез!» не принимаются, ибо не в этом дело.
Хочется разобраться в самой сути — почему, если файл сохранен _практически_ без искажений (ну или с минимальными), выдается в поток с _максимально_ возможным качеством — и такое?

От: marx paul Online Umfragen erstellen
Дата: 25.11.02 21:47
Оценка:

Здравствуйте, Flamer, Вы писали:

F>Добрый день, уважаемые!

F>Исходный файл (*.jpg) сохранен с максимальным какчеством. Делаю просто донельзя:

F>
F>

F>Как видите, выдаю в поток с максимальным (100) качеством. Картинка маленькая (88х31). Так вот и собственно вопрос — а качество на выходе чего такое хреновенькое? Пиль, куриль, болель? Если честно, я был искренне удивлен. С PNG вообще засада, такое ощущение, что специально так сделано, чтобы смотреть страшно было

Вот Ваш же код так мне красиво все рисует, аж самому завидно
Может быть проблема где-нить в графических библиотеках?

От: DSD http://911.ru/cv
Дата: 25.11.02 23:56
Оценка:

Здравствуйте, Flamer, Вы писали:

[в общем skipped. ]

Не знаю, я из подобного только с ImageMagick работал, но и это не суть важно.
Не будем так же пока трогать возможные глюки реализации алгоритмов.

Мне кажется, дело в самом рендеринге.
Судя по твоему коду , в данном случае картинка рендерится заново
дважды: ImageCreateFromJpeg(не уверен, но возможно в памяти исходные данные
как-то перерабатываются и из-за этого возможно чуть искажаются) и ImageJpeg.

Во первых как у тебя сжат источник? если не 100%, то вот тебе первое серьезное искажение.

Второе обьяснять не буду, лучше расскажу примером:
сегодня мне нужно было некоторые иконки(ico) попережимать в png. и при этом еще
отресайзить их c 32х32 до 128х128(т.е. сделать больше, так сказать расшИрить и углУбить (с)М.С.Горбачев)

Илон Маск рекомендует:  ExtractFileName - Функция Delphi

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

Так что если в твоем случае это позволяет, то лучше напрямую файл на вывод пускай.
И процу работы таки поменьше будет

От: Andre
Дата: 26.11.02 01:02
Оценка:

F>Кто работал с PHP, для тех не секрет, что начиная с версии GD 1.6 в ней отсутствует поддержка GIF (imagecreatefromgif и иже) из-за лицензионной политики UniSys (или как там его правильно). Поэтому приходится забыть о GIF. Вопрос не в этом, а в следующем:

Результат может отличаться от версии PHP, платформы и версии GD. Вот цитата из комментариев к этой функции из мануала:

In the new versions (PHP 4.0.6, GD 2.0.1), ImageCreateFromJPEG() results in a TRUE COLOR image.
In the older versions, you only get 256 colors.

От: Andre
Дата: 26.11.02 01:07
Оценка:

DSD>Так что если в твоем случае это позволяет, то лучше напрямую файл на вывод пускай.

Вот с этим полностью согласен. В некоторых случаях хватит и такого:

От: Flamer http://users.livejournal.com/_flamer_/
Дата: 26.11.02 05:45
Оценка:

Здравствуйте, Andre, Вы писали:

DSD>>Так что если в твоем случае это позволяет, то лучше напрямую файл на вывод пускай.

A>Вот с этим полностью согласен. В некоторых случаях хватит и такого:

A>
A>

Да это все хорошо, вот только рисовать надо на рисунке . В общем, он как основа, надо циферки дорисовать и отдать клиенту.

Спасибо всем, похоже, дело в версии GD, все-таки. Посмотрю, подумаю. Топик закрыт.

Что такое код imagecreatefromjpeg

24614 просмотра

3 ответа

52 Репутация автора

Я работаю над Ubuntu 14.04 LTS с PHP 5.5.9 с включенным GD, и я дважды проверял, но все еще показываю мне это сообщение каждый раз, когда я пытаюсь использовать imagecreatefromjpeg ()

Неустранимая ошибка: вызов неопределенной функции imagecreatefromjpeg () в /../library/image.php в строке 34

я даже пытался проверить это из командной строки с помощью этого

и это возвращает мне бул (ложь)

Есть ли способ исправить это без повторной компиляции?

Ответы (3)

-1 плюса

76 Репутация автора

31 плюса

799 Репутация автора

Я думаю, что вы установили неполную версию gd .
Когда вы компилируете gd расширение, используйте флаг —with-jpeg-dir=DIR и —with-freetype-dir=DIR

пс. не забывай make clean

На картинке ниже incomplete показана версия gd:

На картинке ниже complete показана версия gd:

плюса

1891 Репутация автора

В моем случае GD отсутствовал после обновления до PHP 7.3. Итак, я просто добавил его с помощью следующей команды:

PHP — ImageCreateFromJPEG () возвращают странный код

Я пытаюсь создать эскизы, которые будут созданы на сервере, а затем выводятся на HTML для пользователей веб-сайта, но он возвращает код . странную Моя функция:

Вот пример кода Wierd:

Если я вижу, это правильно, то ваш сценарий создает HTML для вашего веб-страницы и эскиз в один проход? Возможно, что-то подобное?

Эскиз должен быть дополнительный файл, поэтому другой PHP скрипт, который генерирует изображение и заголовки изображений.

Существует также «грязный» решение включить код изображения как base64 непосредственно в ваш HTML код Встраивание Base64 Изображения

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

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL