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

Форум PHP

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

 

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

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

тема: уникальное имя файла при выводе изображения через GD
 
 автор: sanitar   (11.08.2008 в 18:54)   письмо автору
 
 

добрый день.непонятка маленькая.через gd вывожу изображение.выводится без проблем,предусмотрел все ситуации.но!если нажать правой кнопкой мыши на "сохранить файл",то сохраняет все изображения с именем imgfull.php,т.е. так,как зовут файл выводящий изображение.как заставить скрипт выводить файл с уникальным именем?

скрипт вывода.путь к файлу и имя файла передаётся в $file
<?
$ext
=pathinfo($file);
if (
$ext['extension']=='png')
{
$source imagecreatefrompng($file);
header("content-type:image/png");
imagepng($source);
imagedestroy($source);
}
elseif (
$ext['extension']=='PNG')
{
$source imagecreatefrompng($file);
header("content-type:image/png");
imagepng($source);
imagedestroy($source);
}
elseif (
$ext['extension']=='gif')
{
$source imagecreatefromgif($file);
header("content-type:image/gif");
imagegif($source);
imagedestroy($source);
}
elseif (
$ext['extension']=='GIF')
{
$source imagecreatefromgif($file);
header("content-type:image/gif");
imagegif($source);
imagedestroy($source);
}
elseif (
$ext['extension']=='jpg')
{
$source imagecreatefromjpeg($file);
header("content-type:image/jpeg");
imagejpeg($source);
imagedestroy($source);
}
elseif (
$ext['extension']=='JPG')
{
$source imagecreatefromjpeg($file);
header("content-type:image/jpeg");
imagejpeg($source);
imagedestroy($source);
}
elseif (
$ext['extension']=='jpeg')
{
$source imagecreatefromjpeg($file);
header("content-type:image/jpeg");
imagejpeg($source);
imagedestroy($source);
}
elseif (
$ext['extension']=='JPEG')
{
$source imagecreatefromjpeg($file);
header("content-type:image/jpeg");
imagejpeg($source);
imagedestroy($source);
}
?>


файл со ссылкой:
      $adr=$directory."/".$value;
      $adr=UrlEncode($adr);
      echo "<a href=imgfull.php?file=$adr target=_blank>";

просто использовать <img src> не могу т.к. имена файлов в основном такие: Павлюченко 1.2.jpg ,т.е. используется русский текст с пробелами,цифрами и точками.
обычный <img src> не выводит такое даже после UrlEncode.
пожалуйста помогите.спасибо.

  Ответить  
 
 автор: sim5   (11.08.2008 в 19:53)   письмо автору
 
   для: sanitar   (11.08.2008 в 18:54)
 

Можете передать такой же заголовок, который используется при отдачи скриптом файла пользователю, например:
<?
//точка после 1 заменена, так как IE, например, вместо нее 
//обязательно поставит так 1[1]2.jpg
$f 'Павлюченко 1-2.jpg';
$source imagecreatefromjpeg('rand.jpg'); 
header("Content-Disposition: attachment; filename= $f");
header("content-type:image/jpeg");
.....

Сохранение будет предлагаться под именем $f.

  Ответить  
 
 автор: sanitar   (11.08.2008 в 20:27)   письмо автору
 
   для: sim5   (11.08.2008 в 19:53)
 

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

  Ответить  
 
 автор: Trianon   (11.08.2008 в 21:18)   письмо автору
 
   для: sim5   (11.08.2008 в 19:53)
 

какой же блин аттачмент, когда инлайн?
И таки надо указывать имя в content-type

  Ответить  
 
 автор: sanitar   (12.08.2008 в 00:44)   письмо автору
 
   для: Trianon   (11.08.2008 в 21:18)
 

а не так?
Content-Disposition: file; filename=$file

  Ответить  
 
 автор: Trianon   (12.08.2008 в 00:48)   письмо автору
 
   для: sanitar   (12.08.2008 в 00:44)
 

Вы сказали, что у Вас <img src=...>
Следовательно inline.

  Ответить  
 
 автор: sanitar   (12.08.2008 в 01:38)   письмо автору
 
   для: Trianon   (12.08.2008 в 00:48)
 

я сказал что <img src=...> не выводит

  Ответить  
 
 автор: sim5   (12.08.2008 в 09:49)   письмо автору
 
   для: Trianon   (11.08.2008 в 21:18)
 

Так вот такой, когда копируешь и не проверяешь :)
Я вообще пишу так:
Content-Disposition: file;..., хотя правильнее видимо inline.

  Ответить  
 
 автор: sanitar   (13.08.2008 в 18:30)   письмо автору
 
   для: sim5   (12.08.2008 в 09:49)
 

передаем
      $adr=$directory."/".$value;
      $adr=UrlEncode($adr);
      $value2=UrlEncode($value);
<a href=imgfull.php?file=$adr&name=$value2 target=_blank>1</a>

принимаем и выводим
<?
$ext
=pathinfo($file);
$name=UrlDecode($name);
if (
$ext['extension']=='png')
{
$fp fopen($file'rb');
header("content-type:image/png");
fpassthru($fp);
exit;
}
elseif (
$ext['extension']=='PNG')
{
$fp fopen($file'rb');
header("content-type:image/png");
fpassthru($fp);
exit;
}
elseif (
$ext['extension']=='gif')
{
$fp fopen($file'rb');
header("content-type:image/gif");
fpassthru($fp);
exit;
}
elseif (
$ext['extension']=='GIF')
{
$fp fopen($file'rb');
header("content-type:image/gif");
fpassthru($fp);
exit;
}
elseif (
$ext['extension']=='jpg')
{
$fp fopen($file'rb');
header("Content-Disposition: inline; filename= $name"); 
header("content-type:image/jpeg");
fpassthru($fp);
exit;
}
elseif (
$ext['extension']=='JPG')
{
$fp fopen($file'rb');
header("Content-Disposition: inline; filename= $name"); 
header("content-type:image/jpeg");
fpassthru($fp);
exit;
}
elseif (
$ext['extension']=='jpeg')
{
$fp fopen($file'rb');
header("content-type:image/jpeg");
fpassthru($fp);
exit;
}
elseif (
$ext['extension']=='JPEG')
{
$fp fopen($file'rb');
header("content-type:image/jpeg");
fpassthru($fp);
exit;
}
?>


почему при этом при сохранении в ИЕ файл с нормальным именем сохраняется,а в опере с таким: &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; 2.1.JPG
?????????????????
зы:вообще там должны быть квадраты.форум перекодировал их.ну суть не сильно меняется.

  Ответить  
 
 автор: sim5   (14.08.2008 в 08:41)   письмо автору
 
   для: sanitar   (13.08.2008 в 18:30)
 

<?
$f 
"Павлюченко 1.2.jpg";
$f iconv("windows-1251","UTF-8",$f);
$source imagecreatefromjpeg('image.jpg');  
header("Content-Disposition: inline; filename= $f"); 
header("content-type:image/jpeg");
imagejpeg($source); 
imagedestroy($source);
?>

  Ответить  
 
 автор: sanitar   (14.08.2008 в 16:46)   письмо автору
 
   для: sim5   (14.08.2008 в 08:41)
 

логично.ступил.спасибо.

  Ответить  
 
 автор: Trianon   (11.08.2008 в 20:10)   письмо автору
 
   для: sanitar   (11.08.2008 в 18:54)
 

я врот чего не пойму.
Загрузка/выгрузка изображения потребовалась лишь затем, чтобы изменить его имя?!

  Ответить  
 
 автор: sim5   (11.08.2008 в 20:11)   письмо автору
 
   для: Trianon   (11.08.2008 в 20:10)
 

Вот тоже интересно, вернее не изменить, а "иметь имя" :)

  Ответить  
 
 автор: sanitar   (11.08.2008 в 20:25)   письмо автору
 
   для: Trianon   (11.08.2008 в 20:10)
 

всмысле на сервер?нет,это минни-файловый архив фотографий для внутренних нужд.

  Ответить  
 
 автор: Trianon   (11.08.2008 в 21:17)   письмо автору
 
   для: sanitar   (11.08.2008 в 20:25)
 

нет. Не в этом смысле.
В смысле из файлового формата изображения (gif, jpg, png) во внутренний формат gdlib.
И тут же назад.
Вы полагаете, это примитивные операции?

  Ответить  
 
 автор: sanitar   (12.08.2008 в 00:45)   письмо автору
 
   для: Trianon   (11.08.2008 в 21:17)
 

по этой причине:

просто использовать <img src> не могу т.к. имена файлов в основном такие: Павлюченко 1.2.jpg ,т.е. используется русский текст с пробелами,цифрами и точками.
обычный <img src> не выводит такое даже после UrlEncode.

  Ответить  
 
 автор: Trianon   (12.08.2008 в 00:49)   письмо автору
 
   для: sanitar   (12.08.2008 в 00:45)
 

Это не причина преобразовывать форматы.
Примените fpassthru(fopen(...))
gdlib-то зачем гонять?

  Ответить  
 
 автор: sanitar   (12.08.2008 в 01:38)   письмо автору
 
   для: Trianon   (12.08.2008 в 00:49)
 

мне показалось так проще....
попробую через fpassthru.результат отпишу.

  Ответить  
 
 автор: BinLaden   (12.08.2008 в 02:13)   письмо автору
 
   для: sanitar   (12.08.2008 в 01:38)
 

readfile() для этого есть. Правда с ним докачку не сделаешь.

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

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