Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

подмена картинки редиректом

396
12 января 2012 года
SibBear
223 / / 27.07.2006
Есть картинка 1.jpg в папке /images/
В htaccess прописано
 
Код:
RewriteRule some_images/(.*)\.(gif|jpg|png|jpeg)$ index.php?image=$1.$2 [L]

в some.html
 
Код:
<ims src="some_images/1.jpg" />


соответственно htaccess увидел some_images/1.jpg, отправил это все хоз-во в index.php, index.php проделал какие то махинации с 1.jpg.
А теперь самое сложное:
как вывести результат в браузер? Чтобы some.html отображал мне перемахинированный 1.jpg
277
12 января 2012 года
arrjj
1.7K / / 26.01.2011
Погугли как пользоваться gd в php
header("Content-type: image/jpg");
imagejpeg($твоя_обработанная_картинка);
396
12 января 2012 года
SibBear
223 / / 27.07.2006
проблема в том, что измененная картинка уже создана и сохранена.
нужно только подменить адрес к ней.
header("Content-type: image/jpg");
imagejpeg($твоя_обработанная_ка)
это вывод из "переменной", а нужно из файла. Загружать по новой данные в переменную снова обрабатывать хидеры и выводить очень тормозит :(
почему никто не придумал что то подобное header("location: ".$new_image_file);
:(

пока сделал вот так
 
Код:
$new_file = "some_images/1.jpg"
        $size = getimagesize($new_file);
        $format = "imagecreatefrom".strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
        $isrc = $format($new_file);

        header('Content-Type: image/png');
        imagepng($isrc);


но как то опилками пахнет... деревянный какой то код...
277
12 января 2012 года
arrjj
1.7K / / 26.01.2011
header("location: ".$new_image_file);
Дык а что тебе мешает его использовать?
396
12 января 2012 года
SibBear
223 / / 27.07.2006
так он не работает в случае <img src="/some_images/1.jpg" />
79K
12 января 2012 года
SlevincheG
5 / / 11.01.2012
В .htaccess прописано:
 
Код:
RewriteEngine On
RewriteCond %{REQUEST_URI} !-f
RewriteRule (.*)\.(gif|jpg|png|jpeg)$ img.php?image=$1.$2 [L]


При запросе картинки по адресу img.jpg, запрос отправляется на img.php, который через хедер перекидывает уже на real_img.jpg

Response Headers

HTTP/1.1 302 Found
Date: Thu, 12 Jan 2012 12:15:20 GMT
Server: Apache/2.2.21 (Win32) PHP/5.3.8
X-Powered-By: PHP/5.3.8
Location: /real_img.jpg
Content-Length: 0
Keep-Alive: timeout=5, max=51
Connection: Keep-Alive
Content-Type: text/html


Request Headers

GET /img.jpg HTTP/1.1
Host: local
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Cookie: XDEBUG_SESSION=netbeans-xdebug
Cache-Control: max-age=0
396
12 января 2012 года
SibBear
223 / / 27.07.2006
А, знаете почему не работает? Точнее работает через раз, все зависит от настроек хостера.
Но тут получается или делать, чтобы всегда работало, или подбирать хостера - тоже не айс...
277
12 января 2012 года
arrjj
1.7K / / 26.01.2011
А может просто no-cache отправлять в заголовке?

Ну а хостеры тут врядли при чем-то.
396
12 января 2012 года
SibBear
223 / / 27.07.2006
проверил на 3х хостах, на двух работает, на одном нет. (на моем :)

Все, я нашел, в чем подвох.
Хосты на unix и win.
у меня прописывается путь не относительный а абсолютный Это кстати к соседней теме, сейчас туда пойду.
ENGINE_ROOT_DIT."/images/real_img.jpg"
В итоге, хидер когда видит обратный слеш по типу "F:\host\www/image/real.jpg" просто в шоке от того, что ему пихают, и в приступе экстаза пишет "изображение не але".
на юнихе такого нет.

в общем теперь задача правильно пути составить.
79K
12 января 2012 года
SlevincheG
5 / / 11.01.2012
Цитата: SibBear

В итоге, хидер когда видит обратный слеш по типу "F:\host\www/image/real.jpg" просто в шоке от того, что ему пихают, и в приступе экстаза пишет "изображение не але".
на юнихе такого нет.

в общем теперь задача правильно пути составить.


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

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог