Выгрузка файла
Делаю так: для кнопки Просмотреть файл, делаю пряму ссылку на файл - в этом случае если файл html или jpg,gif, то он сразу открывается в окне браузера, если файл doc или xls, то браузер спрашивает сохранить или открыть файл. Можно убрать этот диалог и заставить его сразу сохранять?
Далее, для кнопки сохранить файл юзаю такой скрипт:
function download_file($file_name)
{
header( "Content-Type: application/octet-stream\nContent-Disposition: inline; filename=\"".$file_name."\"\nContent-Length: ".(string)(filesize( $file_name ) ) );
$fh = fopen( $file_name, 'rb' );
fpassthru( $fh );
fclose( $fh );
exit();
}
$file_name - это имя файла на сервере.
В этом случае если файл имеет расширение doc или xls, то выскакивает предложение сохранить файл (кнопки открыть на нем нету),но если файл - html, jpg... - то он все равно открывает его в окне браузреа. Как исправить?
Код:
header ( "Content-Disposition: attachment; filename=price.doc" );
А может кто-нить подсказать, как можно убрать диалог "открыть/сохранить/отмена" при выборе кнопки "Просмотреть"?
Нельзя.
фигня война...
Причем Опера и нетшкафом прекрасно все видят (и имя файла и размер и миме-тип), а ИЕшка невидит ничего (ну в имени может увидеть название скрипта: index.php).
"Файлики" небольшие, посему сидят в сессионной переменной.
Думаю что надо свои функции получения данных из сессионного массива использовать, похоже что инициализация сессии происходит раньше вывода заголовков.
РНР 4.2.4.
Код:
//
if ($HTTP_SERVER_VARS["HTTP_RANGE"]) {
$range = $HTTP_SERVER_VARS["HTTP_RANGE"];
$range = str_replace("bytes=", "", $range);
$range = str_replace("-", "", $range);
if ($range) {$str=substr($str,$range);}
}
if ($range) {
header("HTTP/1.1 206 Partial Content");
}
else {
header("HTTP/1.1 200 OK");
}
header("Content-Disposition: attachment; filename = \"$downloadfile\"",true);
header("Content-type: application/octet-stream; name=\"$downloadfile\"");
//header("Content-type: text/plain; name=\"$downloadfile\"");
header("Content-Transfer-Encoding: binary");
header("Last-Modified: ".date("D, d M Y H:i:s T"));
header("Accept-Ranges: bytes");
header("Content-Range: bytes $range-$len/$len");
header("Content-Length: $len");
echo "$str";
exit;
if ($HTTP_SERVER_VARS["HTTP_RANGE"]) {
$range = $HTTP_SERVER_VARS["HTTP_RANGE"];
$range = str_replace("bytes=", "", $range);
$range = str_replace("-", "", $range);
if ($range) {$str=substr($str,$range);}
}
if ($range) {
header("HTTP/1.1 206 Partial Content");
}
else {
header("HTTP/1.1 200 OK");
}
header("Content-Disposition: attachment; filename = \"$downloadfile\"",true);
header("Content-type: application/octet-stream; name=\"$downloadfile\"");
//header("Content-type: text/plain; name=\"$downloadfile\"");
header("Content-Transfer-Encoding: binary");
header("Last-Modified: ".date("D, d M Y H:i:s T"));
header("Accept-Ranges: bytes");
header("Content-Range: bytes $range-$len/$len");
header("Content-Length: $len");
echo "$str";
exit;
зашел на php.net в документацию по функции header и нашел решение:
header('Pragma: private');
header('Cache-control: private, must-revalidate');
без этих строчек ИЕшки сходят с ума.
зы. блин. как я люблю мелкософт.