Получение изображения с помощью PHP - PullRequest
0 голосов
/ 25 апреля 2011

Это плохая практика для получения изображений таким образом? У меня есть страница, чтобы вызвать этот скрипт около 100 раз (есть 100 изображений). Могу ли я вызвать перегрузку сервера или слишком много запросов HTTP или что-то? У меня проблемы с сервером, и я не знаю, вызывает ли это это: (

// SET THE CONTENT TYPE HEADER
header('Content-type: image/jpeg');

// GET THE IMAGE TO DISPLAY
$image = imagecreatefromjpeg( '../path/to/image/' . $_SESSION[ID] . '/thumbnail/' . $_GET[image]);

// OUTPUT IMAGE AND FREE MEMORY
imagejpeg($image);
imagedestroy($image);  

Я вызываю скрипт из обычных тегов. Причина, по которой я называю их через PHP, заключается в том, что изображения являются частными для пользователя.

Вся помощь очень ценится!

Ответы [ 3 ]

3 голосов
/ 25 апреля 2011

При этом вы:

  • Чтение содержимого файла
  • Оценка этого содержимого в образе в памяти
  • Повторная визуализация этого изображения


Если вы просто хотите отправить изображение (имеющееся на диске) своим пользователям, почему бы просто не использовать readfile(), например:

header('Content-type: image/jpeg');
readfile('../path/to/image/' . $_SESSION[ID] . '/thumbnail/' . $_GET[image]);

С этим вы просто:

  • Прочитать файл
  • и отправьте его содержимое

Без оценки его для изображения - устранение некоторых бесполезных вычислений в процессе.


Как примечание: вы не должны использовать $_GET[image] как это в вашем пути: вы должны убедиться, что никакие вредоносные данные не вводятся через этот параметр!

В противном случае любой может получить доступ к любому возможному файлу на вашем сервере ... он просто должен указать относительный путь в параметре image ...

2 голосов
/ 25 апреля 2011

Да, это очень плохо.Вы декодируете файл .jpg в растровое изображение на основе памяти (которое «огромно» по сравнению с исходным двоичным файлом .jpg. Затем вы повторно сжимаете растровое изображение в формат JPEG.

Таким образом, вы теряете тонну

a) память
b) процессорное время
c) потеря еще большего качества изображения, потому что jpg - формат с потерями.

почему бы просто не сделать:

<?php
header('Content-type: text/jpeg');
readfile('/path/to/your/image.jpg');

вместо?

1 голос
/ 25 апреля 2011

Чтобы ответить на два конкретных вопроса из вашего вопроса

Могу ли я вызвать перегрузку сервера или слишком много запросов http или что-то еще?

да, конечно.
как многочисленными HTTP-запросами, так и обработкой изображений.
Вам необходимо уменьшить количество изображений и использовать некоторую нумерацию страниц, чтобы показывать изображения в меньших пакетах.
Вы также можете реализовать некоторые функции Условный GET для уменьшения пропускной способности.и загрузите.
Если что-то продолжает ухудшаться, и у вас есть ресурсы для утилизации, рассмотрите возможность установки прокси-сервера для распространения контента.nginx с заголовком X-Accel-Redirect является типичным примером

У меня проблемы с сервером, и я не знаю, вызывает ли это его: (

Вы не должны 'не стреляйте в темноте. Сначала зарегистрируйте свой сайт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...