подмена картинки редиректом
В 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
header("Content-type: image/jpg");
imagejpeg($твоя_обработанная_картинка);
нужно только подменить адрес к ней.
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);
$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);
но как то опилками пахнет... деревянный какой то код...
Дык а что тебе мешает его использовать?
так он не работает в случае <img src="/some_images/1.jpg" />
Код:
RewriteEngine On
RewriteCond %{REQUEST_URI} !-f
RewriteRule (.*)\.(gif|jpg|png|jpeg)$ img.php?image=$1.$2 [L]
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
Но тут получается или делать, чтобы всегда работало, или подбирать хостера - тоже не айс...
Ну а хостеры тут врядли при чем-то.
Все, я нашел, в чем подвох.
Хосты на unix и win.
у меня прописывается путь не относительный а абсолютный Это кстати к соседней теме, сейчас туда пойду.
ENGINE_ROOT_DIT."/images/real_img.jpg"
В итоге, хидер когда видит обратный слеш по типу "F:\host\www/image/real.jpg" просто в шоке от того, что ему пихают, и в приступе экстаза пишет "изображение не але".
на юнихе такого нет.
в общем теперь задача правильно пути составить.
Цитата: SibBear
В итоге, хидер когда видит обратный слеш по типу "F:\host\www/image/real.jpg" просто в шоке от того, что ему пихают, и в приступе экстаза пишет "изображение не але".
на юнихе такого нет.
в общем теперь задача правильно пути составить.
Остается только добавить, что вместо ручного проставления прямых и обратных слэшей, лучше использовать константу DIRECTORY_SEPARATOR