powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / как работает header типа header('Location: ... )
8 сообщений из 8, страница 1 из 1
как работает header типа header('Location: ... )
    #39098136
arjuna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пользователь загружает jpeg на сервер с помощью обычной формы.
После загрузки его надо перенаправить по РЕАЛЬНОМУ url этого изображения, причем на изображении должна быть надпись.
Но на сервере надо сохранить оригинальное изображение (без надписи).

Пытаюсь сделать так:
if (move_uploaded_file($_FILES['file']['tmp_name'], $sDir))
{
$host = $_SERVER['HTTP_HOST'];

$img_origin = imagecreatefromjpeg($sDir);
$img = imagecreatefromjpeg($sDir);
$color = imagecolorallocate($img, 0, 0, 255);
imagettftext($img, 48, 0, 100, 100, $color, 'arial.ttf', 'надпись');

imagejpeg($img, $sDir);
header('Location: http://' . $host . '/' . $sDir);

imagejpeg($img_origin, $sDir);

imagedestroy($img);
imagedestroy($img_origin);
}

Рез-т: редирект происходит на немодифицированное изображение. Пробовал вставить sleep (между редиректом и сохранением оригинального изображения), играться с буферизацией и headers_sent - не получается.

если вызвать imagejpeg в поток -
header ("Content-Type: image/jpeg");
headeimagejpeg($img, NULL);
и убрать создание $img_origin, то пользователь перенаправляется на изображение с надписью, на сервере лежит изображение без надписи (то есть все как и должно быть), но само собой url-ом будем сам скрипт, а не URL картинки как по условию задачи.

Вопрос, почему редирект происходит на немодифицированную картинку?
p.s Я знаю, что в док-ии советуют завершать скрипт после редиректа.
...
Рейтинг: 0 / 0
как работает header типа header('Location: ... )
    #39098164
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для оформления кода используйте тег SRC.


arjunaПосле загрузки его надо перенаправить по РЕАЛЬНОМУ url этого изображения, причем на изображении должна быть надпись.
Но на сервере надо сохранить оригинальное изображение (без надписи).Сохраните на сервере два варианта фала - с надписью и без.
...
Рейтинг: 0 / 0
как работает header типа header('Location: ... )
    #39098188
arjuna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для оформления кода используйте тег SRC.
Понял, спасибо.


Сохраните на сервере два варианта фала - с надписью и без.
Не годится. по условию задачи url должен быть один и тот же. То есть, пользователь из формы попадает на уникальный урл с загруженной модифицированной картинкой. Если другой пользователь открывает тот же самый урл, то он видит изображение немодифицированное.
Мучаюсь уже несколько часов.
Подскажите куда рыть.
...
Рейтинг: 0 / 0
как работает header типа header('Location: ... )
    #39098270
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arjunaпользователь из формы попадает на уникальный урл с загруженной модифицированной картинкой. Если другой пользователь открывает тот же самый урл, то он видит изображение немодифицированное.Найдите или сделайте различие между "пользователь из формы" и "другой пользователь". И отдавайте нужный вариант.
...
Рейтинг: 0 / 0
как работает header типа header('Location: ... )
    #39098293
arjuna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Различие только в том, что тот кто закачал изображение на сервер - перенаправляется на модифицированное из-е.
Если он же зайдет по этому url из другой закладки в браузере, получит немодифицированное из-е.
А по коду, почему редирект не происходит на модифицированное из-е? оно сохраняется нормально, перезаписывается после редиректа. Как форсировать редирект или в какую сторону рыть
...
Рейтинг: 0 / 0
как работает header типа header('Location: ... )
    #39098597
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arjunaА по коду, почему редирект не происходит на модифицированное из-е? оно сохраняется нормально, перезаписывается после редиректа.Это ещё тот вопрос, как оно работает. Вы предполагаете, что сначала файл должен перезапиаться, потом отдаться хидер, а потом файл должен перезаписаться заново. Однако, вебсервер может быть сконфигурирован приблизительно тыща и одним способом. Есть варианты, когда хидеры отдаются клиенту только после завершения скрипта. Разумеется, в таком случае к моменту отдачи хидера файл будет перезаписан повторно. Хорошо, рассмотрим вариант, когда хидер отдаётся в реальном времени. Однако, клиент ещё должен понять, что HTTP-заголовки закончились (пришла пустая строка) и можно начинать их отрабатывать. Ладно, даже если клиент и будет отрабатывать заголовки сразу при получении... Пока этот заголовок дошел до клиента, да пока клиент сформировал запрос, отправил его на сервер, сервер принял и отработал... При очень хорошем раскладе ориентировочно на 0.1 секунды тянет. За это время файл, опять-таки, перезаписан будет.
...
Рейтинг: 0 / 0
как работает header типа header('Location: ... )
    #39098671
arjuna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Готов подписаться под каждым вашим словом.
Но вот я между редиректом и повтороной записью ставил sleep(5). И это я под денвером все отлаэживаю. При слипе он на 5 секунд зависает на странице скрипта и только потом происходит редирект на немод. из-е.
И само собой я пробовал ob_flush делать. И даже страшную конструкцию
Код: php
1.
while(!headers_sent()) ;


пробовал.
Я уже от отчаяния сюда написал )
...
Рейтинг: 0 / 0
как работает header типа header('Location: ... )
    #39098813
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arjunaв какую сторону рыть1. Пересмотреть алгоритм.
2. Пересмотреть способ отдачи картинки с текстом.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / как работает header типа header('Location: ... )
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]