тупик при уплоаде...

Sash [None]

Новичок
тупик при уплоаде...

Ни как не получается задать имя файла при скачке, качает РНР хоть ты тресни. Убираешь
(imagejpeg($dst_img, '', 75)) пишеш туда что-нибудь другое - Работает... но нафига оно мне надо чтобы так работало... Как принудить его задать имя выходного файла?

PHP:
<?php
$filename="$picid";
$dest_width=$width;
$dest_height=$height;
$src_img = imagecreatefromjpeg("$picid");
$dst_img = imagecreatetruecolor($dest_width,$dest_height);
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, 640, 480);
$file_name="$picname.jpg";
header("Cache-control: private");
header("Content-type: application/force-download");
header("Content-Length: ".filesize(imagejpeg($dst_img, '', 75)));
header("Content-Disposition: filename=".$file_name);
readfile(imagejpeg($dst_img, '', 75));
?>
 

Alex2003

Новичок
Блин, ну вы даете...
PHP:
echo filesize(imagejpeg($dst_img, '', 75)));
попробуй. Мне кажеться не будит это работать, но суть не в этом.

header("Content-Disposition: attachment; filename=".$ file_name." \r\n");
 

Ямерт

The Old One
Насколько я понимаю, речь таки идёт не об уплоаде, а о скачивании. В таком случае вам в поиск, сэр. Тема обсуждалась очень много раз.
 

Bloody

Guest
Ну ё мое: зачем же так
PHP:
readfile(imagejpeg($dst_img, '', 75));
надо-то всего-то:
PHP:
imagejpeg($dst_img, '', 75);
 

Sash [None]

Новичок
Зануда: да, конечно, только вот смотря с какого конца глядеть. :) Если со стороны клиента - то скачивание, а если с сервера. :)
 

Sash [None]

Новичок
Короче предистория такая. Есть индексовый файл, который выкладывает картинки из папки приобразуя их в иконки. Есть кнопка previev - открывает в отдельном окне слегка увеличиную копию картинки. Есть ссылка "скачать Wallpaper", которая ссылается на JSфункцию. Так формирует линк ссылающийся на файл РНР с программой для выдачи файла клиенту, всё бы ничего, но я добавил ресайз для картинок, чтобы они становились такого разрешения, как экран у пользователя, но у меня не получается файл загнать в переменную не выводя на экран послать клиенту. Хоть он и посылается, но имя становится POST.PHP (название файла с программой).. как только убираю программу ресайза - всё замечательно посылается, JPG как он есть. Блин... надоело... :(
 

Alex2003

Новичок
Сделай правьюшки сразу и храни на винте у хостера. img_01_640.jpg
img_01_800.jpg
img_01_1024.jpg
Иначе тебя выпрут :) За то, что кушаешь много ресурсов.
И дай юзеру возможность выбора. Я сижу на работе 1024, а скачиваю домой (1200) поверь - я долго буду матюкать твой сайт.
 

Sash [None]

Новичок
Alex2003: У меня 20 метров всего, и те не бесплатно, ты думаешь на мой сайт заходит 300 чел в день? Нет, тут лучший вариант на лету... хотя вот с выбором разрешения... да, можно было бы подумать, но я таких больших не делаю... хотя может стоит... да ещё и кач-во, мож тоже сделать регулируемым... с удовольствием, только блин, мне не скачать его нормально. Сейчас почитаю мануалчики, может найду чего полезного.
 

Alien

Новичок
Вот ведь [много мата skipped]
У него видите ли 20 метров ограничение, поэтому мы будем напрягать хостинговый сервак по полной.
 

Sash [None]

Новичок
Alien: ну почему по полной то??? Блина? Два человека в неделю это по полной? Что же тогда говорить о посещаемых сайтах знакомст и таму подобных? Не ужели конвертация кортинки или двух может стать серверу раком?
 

Bloody

Guest
Ну-ну. Флудить будем, значит? :)
Саш, ты попробовал то что я тебе сказал?

2Алекс2003:
Когда посылаешь хидеры функцией header \r\n в конце ставить не нужно.
 

Sash [None]

Новичок
Bloody: попробовал, не срабатывает. Я думаю здесь всё дела из за строчки
PHP:
header("Content-Length: ".filesize(imagejpeg($dst_img, '', 75)));
через эху что-то странное выдает. Как бы мне изображение загнать в файл, который бы был в переменной? Да так, чтобы на экран не вылезло?
 

Bloody

Guest
Ну так, например:

$JPEG=imagejpeg($dst_img,'',75);
...
header("Content-Length: ".strlen($JPEG));
...
разные хидеры...
...
echo $JPEG;
 

Sash [None]

Новичок
если использовать вот такой вариант:
$JPEG=imagejpeg($dst_img,'',75);
То, он выводит его на экран... (пробовал) поэтому и написал сразу всё выражение в скобках... Может сразу стрлен сделать... хм... я вообще любитель делать такие фишки... например мне очень нравится делать так
PHP:
$row = mysql_fetch_array(mysql_query("SELECT * FROM blabla WHERE la='$bla'"));
удивительно, но работает, и экономит кучу места. :)
 

Bloody

Guest
Да, действительно, должен выводить... чёй-то я... Ну тогда обращайся к

ob_*:

ob_start();
imagejpeg(...);
$JPEG = ob_get_contents();
ob_end_clear();

Это тебе точно должно помочь.

А приведенная тобой конструкция место-то быть может экономит, но зато производительность снижает. Бог с ним, если у тебя таких конструкций 1-2, 3-4... а если сотня?
 

Sash [None]

Новичок
Bloody: спасибо, попробую.

А на счёт конструкций... какая сотня, у меня одна домашняя страничка, на которой я испытываю всё, что знаю, так что их действительно, одна или две.
 

Фанат

oncle terrible
Команда форума
Sash
тебе не гордиться надо над своими "удобствами", а плакать.
вот это "удобство, эконосящее место"
$row = mysql_fetch_array(mysql_query("SELECT * FROM blabla WHERE la='$bla'"));
в случае ошибки в запросе выдаст ошибку, которую невозможно обработать.

Для экономии места придуманы функции.
$row = my_func ("SELECT * FROM blabla WHERE la='$bla'");
И экономлю больше места, чем ты, получаю читабельность, универсальность и обработку ошибок.
 

Sash [None]

Новичок
Хм... чтож, мы все склонны к ошибкам, особенно те (я), кто только что начал этим заниматься. Спасибо за совет, попробую использовать на практике.
 

Фанат

oncle terrible
Команда форума
вот функция, которая не претендует на гениальность, но тем не менее достаточно удобна.
если запрошено больше одного поля, она вернет массив. Если одно - строку.
если не вернулось вообще ничего - пустую строку.
PHP:
function db_var($query) { 
  $r=mysql_query($query); 
  if (!$r) myerr($query);  //обработка ошибки
  if (!mysql_num_rows($r)) return ""; 
  $row=mysql_fetch_array($r,MYSQL_BOTH); 
  if (!isset($row[1])) return $row[0];
  return $row; 
}
 
Сверху