Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Скачать картинку
 
 автор: Minus   (07.01.2009 в 08:02)   письмо автору
 
 

Подскажите как моим файлом скачать картинку с папки защищенной 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$old0000$width$height$wn$hn);
imageJpeg($new,null,100);
}
}
?>

  Ответить  
 
 автор: Николай2357   (07.01.2009 в 08:53)   письмо автору
 
   для: Minus   (07.01.2009 в 08:02)
 

Дело тут скорее всего в заголовке. Тут почитайте. Только вот любопытно, почему у Вас php не интерпретируется, а скачивается...

  Ответить  
 
 автор: ДаньЧег   (07.01.2009 в 10:36)   письмо автору
 
   для: Николай2357   (07.01.2009 в 08:53)
 

Потомучто сервер говорит что нужно скачать, а не интерплитировать! Ведь для браузера это ниизвестный формат!

  Ответить  
 
 автор: Minus   (07.01.2009 в 11:10)   письмо автору
 
   для: Николай2357   (07.01.2009 в 08:53)
 

Я понимаю что все дела в заголовке...
Только какие заголовки непойму...

  Ответить  
 
 автор: Trianon   (07.01.2009 в 11:23)   письмо автору
 
   для: Minus   (07.01.2009 в 11:10)
 

header('Content-Type: image/jpeg jpg');
Вот это - крайне странный тип. Почему не header('Content-Type: image/jpeg'); ?

  Ответить  
 
 автор: BinLaden   (07.01.2009 в 11:24)   письмо автору
 
   для: Minus   (07.01.2009 в 11:10)
 

<?php
header
('Content-Type: image/jpeg');  
?>


Кстати, по-моему, там до <? у Вас еще пробельные символы. Их быть не должно.

  Ответить  
 
 автор: Minus   (07.01.2009 в 11:38)   письмо автору
 
   для: BinLaden   (07.01.2009 в 11:24)
 

там нету никаких пробелов =)
Просто я здесь когда писал сообщение после бб-кода [code] поставил пару переносов..

  Ответить  
 
 автор: Trianon   (07.01.2009 в 11:39)   письмо автору
 
   для: Minus   (07.01.2009 в 11:38)
 

Просто не надо было этого делать.
code]<?php

  Ответить  
 
 автор: Minus   (07.01.2009 в 11:41)   письмо автору
 
   для: BinLaden   (07.01.2009 в 11:24)
 

Сорри - это небольшая опечатка была... (( В моем скрипте этот тип правильно написан.

  Ответить  
 
 автор: sim5   (07.01.2009 в 12:00)   письмо автору
 
   для: 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);}

  Ответить  
 
 автор: Trianon   (07.01.2009 в 12:08)   письмо автору
 
   для: sim5   (07.01.2009 в 12:00)
 

ну и что?
результат то выдается лишь последней строкой imageJpeg($new,null,100);
Вот только зачем там автор сотню влепил...

ну то есть здравого смысла в скрипте никакого.
Но ведь отсутствие здравого смысла само по себе не мешает скрипту работать. Через задницу, но работать....

  Ответить  
 
 автор: Minus   (07.01.2009 в 12:15)   письмо автору
 
   для: Trianon   (07.01.2009 в 12:08)
 

100 написал для максимального кач-ва изображения.
Ведь это поидее отвечает за это.

  Ответить  
 
 автор: Minus   (07.01.2009 в 12:17)   письмо автору
 
   для: Trianon   (07.01.2009 в 12:08)
 

Скрипт делал под свои нужды.
Я не прошу скрипт переделать или еще что-то..
Прошу просто подсказать какие заголовки нужны для скачивания изображения.

  Ответить  
 
 автор: Minus   (07.01.2009 в 12:20)   письмо автору
 
   для: Trianon   (07.01.2009 в 12:08)
 

С Компьютера изображение выводится без глюков. Но вот с мобильного тел-на скачивает php файл...

  Ответить  
 
 автор: sim5   (07.01.2009 в 12:21)   письмо автору
 
   для: Trianon   (07.01.2009 в 12:08)
 

Что значит что? Как это понимать - передать заголовок для jpeg, а потом проверять тип и открывать соответствующий файл. Бред какой-то.

  Ответить  
 
 автор: Trianon   (07.01.2009 в 12:33)   письмо автору
 
   для: sim5   (07.01.2009 в 12:21)
 

скрипт открывает картинку одного из трех типов, и выкидывает в поток как jpeg.
Выданный вначале заголовок совершенно соответствует данным.

Бреда особого нет. Есть лишь изрядная нагрузка на сервер, поскольку по интерфейсу вызова скрипта можно предположить, что применяться он будет на лету в массовом порядке.

  Ответить  
 
 автор: sim5   (07.01.2009 в 12:47)   письмо автору
 
   для: Trianon   (07.01.2009 в 12:33)
 

Чтобы не было ***.php, имя файла надо указать. А вот передавать заголовок типа файла до того когда его собственно узнаем, то это в любом случае бред полнейший.

  Ответить  
 
 автор: BinLaden   (07.01.2009 в 12:54)   письмо автору
 
   для: sim5   (07.01.2009 в 12:47)
 

Мы знаем его тип. Это всегда JPEG:

<?php
imageJpeg
($new,null,100);
?>

  Ответить  
 
 автор: sim5   (07.01.2009 в 13:08)   письмо автору
 
   для: BinLaden   (07.01.2009 в 12:54)
 

Я понимаю о чем вы. Я не понимаю нафига нужен этот пример абсурда - перадачу файла всегда одним типом в то время, когда тип, например, GIF во много раз меньше чем JPG. И вообще, если хотим иметь всегда один тип, на здоровье - сохранять их всегда в этом формате, и не делать лишних и никчемных телодвижений при этом.

  Ответить  
 
 автор: Саня   (09.01.2009 в 11:04)   письмо автору
 
   для: sim5   (07.01.2009 в 13:08)
 

Автору могла достаться уже готовая папка со сборной солянкой из gif, jpeg и png.

Вы можете попытаться наставить автора на путь истинный и объяснить ему почему так делать не стоит и как будет правильнее.

  Ответить  
 
 автор: sim5   (09.01.2009 в 11:52)   письмо автору
 
   для: Саня   (09.01.2009 в 11:04)
 

Врзможно и так, но тогда надо сперва задаться вопросом, почему они в различных форматах. Ну а далее почитать о таких вещах как вес картинок в различных форматах, прозрачные области для некоторых форматов, и уже затем решать, что делать.

  Ответить  
 
 автор: Trianon   (09.01.2009 в 12:12)   письмо автору
 
   для: sim5   (09.01.2009 в 11:52)
 

Они потому и могли достаться, что разные форматы предназначены для разного содержимого.

  Ответить  
 
 автор: Саня   (09.01.2009 в 12:20)   письмо автору
 
   для: 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);
  }

}
Просто у автора не хватило знаний и опыта чтобы сделать такое. А вы сразу накинулись — "зачем", "почему", "что за бред".

  Ответить  
 
 автор: sim5   (09.01.2009 в 12:51)   письмо автору
 
   для: Саня   (09.01.2009 в 12:20)
 

Я понятия не имею, чего на самом деле хочет автор, я лишь вижу, что он пытается отдать картинку в браузер.

  Ответить  
 
 автор: BinLaden   (07.01.2009 в 12:20)   письмо автору
 
   для: Minus   (07.01.2009 в 11:41)
 

> Сорри - это небольшая опечатка была

А как она могла появится? Вы же, наверное, не перепечатывали текст, а скопировали. Или приведенный тут код отличается от Вашего?

  Ответить  
 
 автор: Minus   (07.01.2009 в 12:21)   письмо автору
 
   для: BinLaden   (07.01.2009 в 12:20)
 

просто я тут в форме ввода сообщения немного подредактировал код и опечатался..

  Ответить  
 
 автор: BinLaden   (07.01.2009 в 12:23)   письмо автору
 
   для: Minus   (07.01.2009 в 12:21)
 

А что в том файле, который у Вас появляется после скачивания (***.php)?

  Ответить  
 
 автор: Minus   (07.01.2009 в 13:29)   письмо автору
 
   для: BinLaden   (07.01.2009 в 12:23)
 

Пробовал открыть текстовым редактором для мобильного тел-на(просто сейчас нету возможности скопировать файл на момпьютер) , так вообще ничего нету в этом файле...

  Ответить  
 
 автор: Minus   (07.01.2009 в 13:40)   письмо автору
 
   для: BinLaden   (07.01.2009 в 12:23)
 

может в заголовке надо указывать имя скачиваемой картинки?

  Ответить  
 
 автор: Minus   (07.01.2009 в 15:06)   письмо автору
 
   для: Minus   (07.01.2009 в 13:40)
 

Всем спасибо кто отвечал.
Я сам разобрался. =)

  Ответить  
 
 автор: Minus   (08.01.2009 в 23:34)   письмо автору
 
   для: 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$old0000$width$height$wn$hn);
imageJpeg($new);
?>

  Ответить  
 
 автор: sim5   (09.01.2009 в 09:18)   письмо автору
 
   для: Minus   (08.01.2009 в 23:34)
 

Ваш код выдает картинку браузеру, о каком скачивании может идти речь, а имеется ввиду сохранение ее, поэтому:
header('Content-Disposition: inline; filename="'.rand("00001001","99999999").'.jpg"');
Что за проблемы с моб. браузером - не знаком с такими, сказать не могу.

  Ответить  
 
 автор: Minus   (10.01.2009 в 08:21)   письмо автору
 
   для: sim5   (09.01.2009 в 09:18)
 

А можете тогда подсказать какими другими способами возможно отдать файл пользователю через скрипт?

  Ответить  
 
 автор: sim5   (10.01.2009 в 10:44)   письмо автору
 
   для: Minus   (10.01.2009 в 08:21)
 

Смотрите -> автор: Саня (09.01.2009 в 12:20). )

  Ответить  
 
 автор: Minus   (10.01.2009 в 16:26)   письмо автору
 
   для: sim5   (10.01.2009 в 10:44)
 

Ну я это понял.
Хочу узнать какие имеются другие способы отдать файл пользователю, если на папке с файлами стоит deny from all в .htaccess?

  Ответить  
 
 автор: sim5   (10.01.2009 в 16:32)   письмо автору
 
   для: Minus   (10.01.2009 в 16:26)
 

А какие вам еще способы нужны? Скриптом и отдавайте, если прямой доступ к папке закрыт.

  Ответить  
 
 автор: Minus   (10.01.2009 в 17:12)   письмо автору
 
   для: sim5   (10.01.2009 в 16:32)
 

Ясно. Спасибо.

  Ответить  
 
 автор: Саня   (09.01.2009 в 12:22)   письмо автору
 
   для: Minus   (08.01.2009 в 23:34)
 

Вероятно ваш мобильный браузер не понимает заголовок Content-Disposition (а именно часть filename) и сопоставляет имя файла ссылке, по которому картинка была скачана.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования