|
|
|
| Подскажите как моим файлом скачать картинку с папки защищенной deny from all в .htaccess?
URL на картинки у меня хранятся в БД.
Постоянно скачивает файл ***.php
<?
header('Content-Type: image/jpeg jpg');
$width = intval($_GET['width']);
$height = intval($_GET['height']);
$id = intval($_GET['id']);
$file_info = mysql_query("SELECT * FROM files WHERE id='$id'");
$pics = mysql_fetch_array($file_info);
$pic = $pics['url'];
if(substr($pic,0,1) != '.'){
if(preg_match('/\.gif$/i', $pic)){$old = imageCreateFromGif($pic);}
elseif(preg_match('/\.jpg$|\.jpeg$|\.jpe$/i', $pic)){$old = imageCreateFromJpeg($pic);}
elseif(preg_match('/\.png$/i', $pic)){$old = imageCreateFromPNG($pic);}
{
$wn = imageSX($old);
$hn = imageSY($old);
$prew = 1;
if(!$width and !$height)
{
$prew = 0;
$size = explode('*',$setup['prev_size']);
$width = round(intval($size[0])); // ширина картинки
$height = round(intval($size[1])); // высота картинки
}
$new = imageCreateTrueColor($width, $height);
imageCopyResampled($new, $old, 0, 0, 0, 0, $width, $height, $wn, $hn);
imageJpeg($new,null,100);
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Minus
(07.01.2009 в 08:02)
| | Дело тут скорее всего в заголовке. Тут почитайте. Только вот любопытно, почему у Вас php не интерпретируется, а скачивается... | |
|
|
|
|
|
|
|
для: Николай2357
(07.01.2009 в 08:53)
| | Потомучто сервер говорит что нужно скачать, а не интерплитировать! Ведь для браузера это ниизвестный формат! | |
|
|
|
|
|
|
|
для: Николай2357
(07.01.2009 в 08:53)
| | Я понимаю что все дела в заголовке...
Только какие заголовки непойму... | |
|
|
|
|
|
|
|
для: Minus
(07.01.2009 в 11:10)
| | header('Content-Type: image/jpeg jpg');
Вот это - крайне странный тип. Почему не header('Content-Type: image/jpeg'); ? | |
|
|
|
|
|
|
|
для: Minus
(07.01.2009 в 11:10)
| |
<?php
header('Content-Type: image/jpeg');
?>
|
Кстати, по-моему, там до <? у Вас еще пробельные символы. Их быть не должно. | |
|
|
|
|
|
|
|
для: BinLaden
(07.01.2009 в 11:24)
| | там нету никаких пробелов =)
Просто я здесь когда писал сообщение после бб-кода [code] поставил пару переносов.. | |
|
|
|
|
|
|
|
для: Minus
(07.01.2009 в 11:38)
| | Просто не надо было этого делать.
code]<?php | |
|
|
|
|
|
|
|
для: BinLaden
(07.01.2009 в 11:24)
| | Сорри - это небольшая опечатка была... (( В моем скрипте этот тип правильно написан. | |
|
|
|
|
|
|
|
для: Minus
(07.01.2009 в 11:41)
| | О каком jpeg можно говорить, если у вас вот это:
if(preg_match('/\.gif$/i', $pic)){$old = imageCreateFromGif($pic);}
elseif(preg_match('/\.jpg$|\.jpeg$|\.jpe$/i', $pic)){$old = imageCreateFromJpeg($pic);}
elseif(preg_match('/\.png$/i', $pic)){$old = imageCreateFromPNG($pic);} | |
|
|
|
|
|
|
|
для: sim5
(07.01.2009 в 12:00)
| | ну и что?
результат то выдается лишь последней строкой imageJpeg($new,null,100);
Вот только зачем там автор сотню влепил...
ну то есть здравого смысла в скрипте никакого.
Но ведь отсутствие здравого смысла само по себе не мешает скрипту работать. Через задницу, но работать.... | |
|
|
|
|
|
|
|
для: Trianon
(07.01.2009 в 12:08)
| | 100 написал для максимального кач-ва изображения.
Ведь это поидее отвечает за это. | |
|
|
|
|
|
|
|
для: Trianon
(07.01.2009 в 12:08)
| | Скрипт делал под свои нужды.
Я не прошу скрипт переделать или еще что-то..
Прошу просто подсказать какие заголовки нужны для скачивания изображения. | |
|
|
|
|
|
|
|
для: Trianon
(07.01.2009 в 12:08)
| | С Компьютера изображение выводится без глюков. Но вот с мобильного тел-на скачивает php файл... | |
|
|
|
|
|
|
|
для: Trianon
(07.01.2009 в 12:08)
| | Что значит что? Как это понимать - передать заголовок для jpeg, а потом проверять тип и открывать соответствующий файл. Бред какой-то. | |
|
|
|
|
|
|
|
для: sim5
(07.01.2009 в 12:21)
| | скрипт открывает картинку одного из трех типов, и выкидывает в поток как jpeg.
Выданный вначале заголовок совершенно соответствует данным.
Бреда особого нет. Есть лишь изрядная нагрузка на сервер, поскольку по интерфейсу вызова скрипта можно предположить, что применяться он будет на лету в массовом порядке. | |
|
|
|
|
|
|
|
для: Trianon
(07.01.2009 в 12:33)
| | Чтобы не было ***.php, имя файла надо указать. А вот передавать заголовок типа файла до того когда его собственно узнаем, то это в любом случае бред полнейший. | |
|
|
|
|
|
|
|
для: sim5
(07.01.2009 в 12:47)
| | Мы знаем его тип. Это всегда JPEG:
<?php
imageJpeg($new,null,100);
?>
|
| |
|
|
|
|
|
|
|
для: BinLaden
(07.01.2009 в 12:54)
| | Я понимаю о чем вы. Я не понимаю нафига нужен этот пример абсурда - перадачу файла всегда одним типом в то время, когда тип, например, GIF во много раз меньше чем JPG. И вообще, если хотим иметь всегда один тип, на здоровье - сохранять их всегда в этом формате, и не делать лишних и никчемных телодвижений при этом. | |
|
|
|
|
|
|
|
для: sim5
(07.01.2009 в 13:08)
| | Автору могла достаться уже готовая папка со сборной солянкой из gif, jpeg и png.
Вы можете попытаться наставить автора на путь истинный и объяснить ему почему так делать не стоит и как будет правильнее. | |
|
|
|
|
|
|
|
для: Саня
(09.01.2009 в 11:04)
| | Врзможно и так, но тогда надо сперва задаться вопросом, почему они в различных форматах. Ну а далее почитать о таких вещах как вес картинок в различных форматах, прозрачные области для некоторых форматов, и уже затем решать, что делать. | |
|
|
|
|
|
|
|
для: sim5
(09.01.2009 в 11:52)
| | Они потому и могли достаться, что разные форматы предназначены для разного содержимого. | |
|
|
|
|
|
|
|
для: sim5
(09.01.2009 в 11:52)
| | Вы всё слишком усложняете. Автору нужно чтобы картинка не отобразилась на экране телефона, а высветилось предложение сохранить её в телефоне. Абсолютно наплевать почему они там все в разных форматах. Просто автор не нашел лучшего способа отдать картинку чем переконвертировать её. Автор не знает, что readfile($pic) по сути делает то же самое что и $img = imagecreatefrom*($pic); imagejpeg($img);, но с гораздо меньшими затратами ресурсов.
Никто не будет спорить, что такой код будет намного предпочтительнее:
<?
$file_info = mysql_query("SELECT * FROM files WHERE id='$id'");
$pics = mysql_fetch_array($file_info);
$pic = $pics['url'];
if(substr($pic,0,1) != '.') {
if(preg_match('/\.gif$/i', $pic)) {
$type = "gif";
} elseif (preg_match('/\.jpg$|\.jpeg$|\.jpe$/i', $pic)) {
$type = "jpeg";
} elseif(preg_match('/\.png$/i', $pic)) {
$type = "png";
}
if ( file_exists($pic) && isset($type) ) {
header("Content-Type: image/".$type);
header('content-disposition: attachment; filename="'.rand(1,99999999).'.'.$type.'"');
readfile($pic);
}
}
| Просто у автора не хватило знаний и опыта чтобы сделать такое. А вы сразу накинулись — "зачем", "почему", "что за бред". | |
|
|
|
|
|
|
|
для: Саня
(09.01.2009 в 12:20)
| | Я понятия не имею, чего на самом деле хочет автор, я лишь вижу, что он пытается отдать картинку в браузер. | |
|
|
|
|
|
|
|
для: Minus
(07.01.2009 в 11:41)
| | > Сорри - это небольшая опечатка была
А как она могла появится? Вы же, наверное, не перепечатывали текст, а скопировали. Или приведенный тут код отличается от Вашего? | |
|
|
|
|
|
|
|
для: BinLaden
(07.01.2009 в 12:20)
| | просто я тут в форме ввода сообщения немного подредактировал код и опечатался.. | |
|
|
|
|
|
|
|
для: Minus
(07.01.2009 в 12:21)
| | А что в том файле, который у Вас появляется после скачивания (***.php)? | |
|
|
|
|
|
|
|
для: BinLaden
(07.01.2009 в 12:23)
| | Пробовал открыть текстовым редактором для мобильного тел-на(просто сейчас нету возможности скопировать файл на момпьютер) , так вообще ничего нету в этом файле... | |
|
|
|
|
|
|
|
для: BinLaden
(07.01.2009 в 12:23)
| | может в заголовке надо указывать имя скачиваемой картинки? | |
|
|
|
|
|
|
|
для: Minus
(07.01.2009 в 13:40)
| | Всем спасибо кто отвечал.
Я сам разобрался. =) | |
|
|
|
|
|
|
|
для: Minus
(07.01.2009 в 08:02)
| | Упростил код до безумия =)
Но все равно когда скачиваешь изображение с мобильного браузера, то скачивает файл ***.php
<?
header('Content-Type: image/jpeg');
header('Content-Disposition: attachment; filename="'.rand("00001001","99999999").'.jpg"');
include("config.php");
$file_info = mysql_query("SELECT * FROM files WHERE id='$id'");
$pics = mysql_fetch_array($file_info);
$pic = $pics['url'];
$width = intval($_GET['width']);
$height = intval($_GET['height']);
$id = intval($_GET['id']);
$old = imageCreateFromJpeg($pic);
$wn = imageSX($old);
$hn = imageSY($old);
$new = imageCreateTrueColor($width, $height);
imageCopyResampled($new, $old, 0, 0, 0, 0, $width, $height, $wn, $hn);
imageJpeg($new);
?>
|
| |
|
|
|
|
|
|
|
для: Minus
(08.01.2009 в 23:34)
| | Ваш код выдает картинку браузеру, о каком скачивании может идти речь, а имеется ввиду сохранение ее, поэтому:
header('Content-Disposition: inline; filename="'.rand("00001001","99999999").'.jpg"');
Что за проблемы с моб. браузером - не знаком с такими, сказать не могу. | |
|
|
|
|
|
|
|
для: sim5
(09.01.2009 в 09:18)
| | А можете тогда подсказать какими другими способами возможно отдать файл пользователю через скрипт? | |
|
|
|
|
|
|
|
для: Minus
(10.01.2009 в 08:21)
| | Смотрите -> автор: Саня (09.01.2009 в 12:20). ) | |
|
|
|
|
|
|
|
для: sim5
(10.01.2009 в 10:44)
| | Ну я это понял.
Хочу узнать какие имеются другие способы отдать файл пользователю, если на папке с файлами стоит deny from all в .htaccess? | |
|
|
|
|
|
|
|
для: Minus
(10.01.2009 в 16:26)
| | А какие вам еще способы нужны? Скриптом и отдавайте, если прямой доступ к папке закрыт. | |
|
|
|
|
|
|
|
для: sim5
(10.01.2009 в 16:32)
| | Ясно. Спасибо. | |
|
|
|
|
|
|
|
для: Minus
(08.01.2009 в 23:34)
| | Вероятно ваш мобильный браузер не понимает заголовок Content-Disposition (а именно часть filename) и сопоставляет имя файла ссылке, по которому картинка была скачана. | |
|
|
|