@otachkin
Программист php

Как уменьшить трафик при использовании readfile с внешнего сервера?

Есть проект, на котором мне необходимо показывать каждому пользователю 3 фотографии, общим объемом примерно в 1Мб, ссылки на файлы спрятаны при помощи самописной функции get_image с использованием readfile.
Файлы изображений лежат на maxcdn.com, соответственно функция загружает их от туда, и выдает пользователю.
Во время тестирования, когда я сам проверяю работу системы, все нормально, но когда я запускаю на тест 500 человек, то трафик соответственно возрастает до 1-2 Гигабит/секунду что не очень хорошо сказывается на отзывчивость всего сервера.
Подскажите, что нужно использовать, чтобы снизить нагрузку на канал связи сервера?
На всякий случай опишу как прячутся файлы.
При загрузке страницы в сессию сохраняются соответствия имени переменной в сессии и имени файла
На странице изображения загружаются так:

Функция get_image выглядит так:
public function get_image(){
$hash = $this->input->get('h');
if ($hash) {
if ($this->session->userdata($hash)) {
$filename=$this->session->userdata($hash);
$this->session->unset_userdata($hash);
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Дата в прошлом
readfile($filename);
die();
exit;
}else{
echo 'Нет данных';
}
}else{
echo 'Не передан параметр';
}
}
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 3
AloneCoder
@AloneCoder
[object Object]
почему бы их не хранить на этом же сервере?
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
трафик при отдаче 500 * 1Мб * 3шт. = ~1 500 Мб = ~12 000 мбит, учитывая что это картинки и они почти не жмутся, вариант только пережимать картинки у себя на сервере - либо с меньшим разрешением, либо с меньшим качеством.
плюс NGINX для скорости? Кажется он налету умеет уменьшать картинки.
ИМХО.
Ответ написан
Комментировать
@otachkin Автор вопроса
Программист php
Может существует какой то другой способ спрятать имена файлов?
Я думаю отдавать имя файла, а не сам файл ajax запросом со страницы и помещать картинку в canvas.
Есть ли возможность с помощью стороннего скрипта (например плагином в chrome), получить значение переменной в javascript? Мне нужно чтобы никто не мог получить программно имя отображаемой фотографии.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы