[HTTP] Изменить имя файла

kruzer25

Грубо говоря, есть скрипт xxx.php, он выдаёт какие-то данные, Content-type - какой-нибудь application/something, хочется, чтобы в запросе на его сохранение было написано не xxx.php, а abc.mp3.
Такое точно можно сделать (сам видел в действии но как?

bobby

Мб помимо Content-type нужно поставить заголовок:
Content-Disposition: attachment; filename=abc.mp3
?

kruzer25

Спасибо, попробую..

Andbar

я обычно посылаю
    @header('Content-type: application/octetstream');
    @header('Content-Disposition: inline; filename="' . $filename . '"');
    @header('Pragma: public');
  
(стянул из исходников phpMyAdmin, не знаю, на сколько это правильно)
Вот только если это картинка, некоторые браузеры игнорируют Content-type и не показывают диалог сохранения, а просто её открывают.
Кстати, идеальный вариант для размеров файла порядка средних мп3шек, когда скрипт еще и позволяет докачивать файл... (по идее, должно быть какое-то стандартное решение)

kruzer25

по идее, должно быть какое-то стандартное решение
Сомневаюсь, что в PHP это вообще хоть как-то осуществимо.
Как ты узнаешь входящий запрос? Это всё обрабатывается самим веб-сервером/пхп, ещё до запуска твоего скрипта; тебе уже достаются всякие _GET, _POST и QUERY_STRING...

kruzer25

Content-Disposition: inline
Это о чём?
'Pragma: public'
И это...

artimon

Что за бред ты несёшь?
Ну достаются тебе все эти переменные, и что? Именно в них и записан в частности range прочитав который ты сможешь понять какой именно кусок файла тебе нужно отдать.

kruzer25

Где записан range? В _GET? В _POST? Где?

kruzer25

thx

Andbar

Как не трудно догадаться...
    [_SERVER] => Array
     (
     [HTTP_HOST] => test.mahoro-san.net
     [HTTP_ACCEPT] => */*
     [HTTP_REFERER] => http://test.mahoro-san.net
     [HTTP_USER_AGENT] => Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; Maxthon; .NET CLR 1.1.4322)
     [HTTP_RANGE] => bytes=250000-
     [HTTP_PRAGMA] => no-cache
     [HTTP_CACHE_CONTROL] => no-cache
     [HTTP_CONNECTION] => close
.....
 
вытянуто из логов скрипта, который делает вид, что отдаёт большой по размеру контент:
<?php
//@header('Last-Modified: Mon, 10 Apr 2006 08:05:51 GMT');
//@header('ETag: "e212-1107-133af93b"');
@header('Accept-Ranges: bytes');
@header('Content-Length: 1000000');
//@header('Connection: close');
//@header('Content-Type: text/plain');
flush;
//@header('');
//@header('');
$f = fopen('log'.mt_rand'w');
ob_start;
print_r($GLOBALS);
$s = ob_get_contents;
fwrite($f,$s);
ob_end_clean;
fclose($f);
sleep(8);
?>

artimon

$_SERVER["HTTP_RANGE"]

kruzer25

Ясно.
Оставить комментарий
Имя или ник:
Комментарий: