Forum Webscript.Ru

Программирование => PHP => Тема начата: DiJay от 21 Августа 2003, 11:34:09

Название: Ошибка после выполнения header();
Отправлено: DiJay от 21 Августа 2003, 11:34:09
Вообщем у меня такая тема:
При обращении к странице должно вылетать окошко с предложением загрузить файл:
вот код:
--------------------------------------------------------------------------------
header("Content-Disposition: attachment; filename=" . basename($down_file));
header("Content-Length: " . filesize($down_file));
header("Content-Type: " . filetype($down_file));
readfile("$down_file");
--------------------------------------------------------------------------------
где $down_file путь к файлу (например: $down_file="donwload/file.zip";). Файл 100% существует. Все хеадеры находятся в самом начале кода.
При загрузке страницы агент предлагает скачать файл.
Тут следует сделать ремарку. Корректно работают только MSIE и Opera, т.е. предлагают сохранить файл с именем file и предлагают тип файла WinZip (т.е. .zip). Netscape же предлагает имя файла file.zip, а расширение .php ! Может мне кто-нибудь объяснит?
Вернемся к нашим баранам...
Косяк кроется в MSIE. Открывается окно, где предлагается открыть/сохранить файл. Жмем сохранить, ОК.
После сохранения, страницы сайта начинают медленно грузиться, иногда не подгружаются файлы стилей (.css) ...
В чем есть косяк? Что я не так делаю? Проблема в сервере или в клиенте? В NN и в Opera все работает ...
Название: Ошибка после выполнения header();
Отправлено: Дмитрий Попов от 21 Августа 2003, 12:21:37
DiJay
Цитировать
Тут следует сделать ремарку. Корректно работают только MSIE и Opera, т.е. предлагают сохранить файл с именем file и предлагают тип файла WinZip (т.е. .zip). Netscape же предлагает имя файла file.zip, а расширение .php ! Может мне кто-нибудь объяснит?


Mozilla смотрит на расширение файла, с которого начинается скачка. Что бы этого не было передавайте путь к файлу примерно как http://site.ru/downloads.php/file.zip


А проблема вряд-ли в сервере.
Название: Ошибка после выполнения header();
Отправлено: DiJay от 21 Августа 2003, 13:11:58
Что-то не канает!
Выдет ошибку:
Warning: filesize(): Stat failed for http://site.ru/downloads/file.zip (errno=2 - No such file or directory) in header.php on line 21

Хотя файлик там 100% лежит!!! И по ссылке file.zip полностью доступен !

Если нельзя такие пути пихать в filesize(); то куда прописывать путь-то?
Название: Ошибка после выполнения header();
Отправлено: DiJay от 21 Августа 2003, 13:18:37
не такая тема точно не канает!
Если я не прав, то напиши свой код скрипта ...
Название: Ошибка после выполнения header();
Отправлено: Меняздесьдавнонет от 21 Августа 2003, 14:04:37
:-)))))))))))
Цитировать
DiJay:
Stat failed for http://site.ru/downloads/file.zip
Название: Ошибка после выполнения header();
Отправлено: Меняздесьдавнонет от 21 Августа 2003, 14:05:49
он имел в виду  не $down_file - это у тебя должно оставаться таким, как и было.

а ссылку на закачку этого файла надо делать такого вида, как Дмитрий написал.
Название: Ошибка после выполнения header();
Отправлено: DiJay от 21 Августа 2003, 14:08:13
readfile("http://site.ru/downloads/file.zip");

так что-ли?
Название: Ошибка после выполнения header();
Отправлено: Меняздесьдавнонет от 21 Августа 2003, 14:23:26
нет.
ссылка имеется в виду та, на которую тыкает пользователь, чтобы скачать файл.
Название: Ошибка после выполнения header();
Отправлено: DiJay от 21 Августа 2003, 14:41:07
file.zip
так что-ли?
да мне не надо так! Мне надо обработать скрипт перед началом закачки файла!
Название: Ошибка после выполнения header();
Отправлено: DiJay от 21 Августа 2003, 14:42:54
товарисчи!
не парьте меня!
Напишите просто скрипт, пожалуйста :)
Название: Ошибка после выполнения header();
Отправлено: Меняздесьдавнонет от 21 Августа 2003, 15:06:10
Цитировать
DiJay:
Мне надо обработать скрипт перед началом закачки файла!

а теперь медленно и по-русски.
Чтобы написать тебе скрипт (что, кстати, никто не обязан), надо сначала понять, че ты хочешь.
а из твоих бессвязных стенаний это неясно.
Название: Ошибка после выполнения header();
Отправлено: ThE0ReTiC от 21 Августа 2003, 15:44:34
Цитировать
DiJay:
Напишите просто скрипт,

:beer: x 2
Название: Ошибка после выполнения header();
Отправлено: DiJay от 22 Августа 2003, 06:22:21
Объясняю медленно, по-русски!
пусть есть ссылка file
а вот код download.php :
----------------------------------------------------------------------
//предлагаем скачать файл
header("Content-Disposition: attachment; filename=" . basename($down_file));
header("Content-Length: " . filesize($down_file));
header("Content-Type: " . filetype($down_file));
readfile("$down_file");
//скидываем инфу в базу данных
mysql_connect($db_host, $db_log, $db_pass);
$res_ins=mysql_db_query($db,"INSERT INTO $table_name (uid, file, date) VALUES (\'$uid\', \'$down_file\', \'$current_date\')");
mysql_close();

$down_file="";
?>

--------------------------------------------------------------------
Все параметры заданы. Файл по адресу downloads/file.zip существует 100%!
Так вот, скажите мне, куда мне пихать http://site.ru/download/file.zip ???
Название: Ошибка после выполнения header();
Отправлено: Меняздесьдавнонет от 22 Августа 2003, 08:32:08
Цитировать
DiJay:
пусть есть ссылка file

сюда

только не
http://site.ru/download/file.zip
а
http://site.ru/downloads.php/file.zip
Название: Ошибка после выполнения header();
Отправлено: DiJay от 22 Августа 2003, 08:55:50
значит, чтобы избавиться от глюка с Нетскейпом нужно писать так:
-------------------------------------------------------------------------
$u_agent=getenv(HTTP_USER_AGENT);
$h_host=getenv(HTTP_HOST);

if(stristr($u_agent,"Netscape")!=false) { header("Location: http://".$h_host."/".$down_file); }
else {
header("Content-Disposition: attachment; filename=" . basename($down_file));
header("Content-Length: " . filesize($down_file));
header("Accept-Ranges: bytes");
header("Content-Type: " . filetype($down_file));
readfile("$down_file");
}

//а чтобы не глюкал MSIE нужно добавить:
exit;
--------------------------------------------------------------------------
Флаг вам в руки ребяты:) У меня все работает!
Название: Ошибка после выполнения header();
Отправлено: DiJay от 22 Августа 2003, 09:02:28
и что вы имели в виду под downloads.php ?
Название: Ошибка после выполнения header();
Отправлено: DiJay от 22 Августа 2003, 09:19:22
Вот полный текст скрипта, помещаемый в самое начало фашего php-файла:
---------------------------------------------------------------------------------------------
if($down_file!="") { //проверяем задан ли файл
//определяем глобальные переменные
$u_agent=getenv(HTTP_USER_AGENT);
$h_host=getenv(HTTP_HOST);
//далее выполняем действия, которые нам нужны.
//В данном случае увеличиваем число кликов на файл на 1
//-----------------------------------------------------------------
//Эту часть можно выкинуть
mysql_connect($db_host, $db_log, $db_pass);
$cl_rul=mysql_db_query($db,"SELECT click, file FROM $tbl WHERE id=$fid");
while($row=mysql_fetch_array($cl_rul)) {
$click=$row[click];
$click++;
$cl_upd=mysql_db_query("pr","UPDATE $tbl SET click=$click WHERE id=$fid");
}
mysql_close();
//эту часть можно выкинуть
//---------------------------------------------------
//проверяем агента на наличие в нем слова Netscape
if(stristr($u_agent,"Netscape")!=false) { header("Location: http://".$h_host."/".$down_file); }
else {
header("Content-Length: " . filesize($down_file));
header("Accept-Ranges: bytes");
header("Content-Type: " . filetype($down_file));
header("Content-Disposition: attachment; filename=" . basename($down_file));
readfile("$down_file");
}
$down_file="";
exit;
}
--------------------------------------------------------------------------------------
Новичкам в качестве ознакомления работе с хеадерами :)
Единственный минус в том, что для Нетскейпа нельзя задать имя файла, отличное от того что лежит у вас на сервере ...
Название: Ошибка после выполнения header();
Отправлено: Дмитрий Попов от 22 Августа 2003, 12:05:03
Ой млин... Кто еще хочет попытаться ему чего-нибудь объяснить?
Название: Ошибка после выполнения header();
Отправлено: ThE0ReTiC от 22 Августа 2003, 12:06:19
Дмитрий Попов
нетЪ
Название: Ошибка после выполнения header();
Отправлено: Меняздесьдавнонет от 22 Августа 2003, 12:09:28
а как он шустро почувствовал себя гуру.
и начал советы новичкам раздавать...
Название: Ошибка после выполнения header();
Отправлено: DiJay от 22 Августа 2003, 12:12:35
ну так :)
получилось же :)
Название: Ошибка после выполнения header();
Отправлено: Меняздесьдавнонет от 22 Августа 2003, 12:15:50
В твою тупую башку два дня пытались вдолбить, как давать имя для нетскейпа.
после этого ты вещаешь
Цитировать
Единственный минус в том, что для Нетскейпа нельзя задать имя файла

и это ты называешь "получилось"?
Ну-ну.
пальцы в дверь проходить не мешают?
Название: Ошибка после выполнения header();
Отправлено: DiJay от 22 Августа 2003, 13:57:15
вот ты кричишь, а за два дня не дал мне ни одного дельного совета!
И ты кстати не прав! Я писал так:
Единственный минус в том, что для Нетскейпа нельзя задать имя файла, отличное от того что лежит у вас на сервере ...
А в другом Нетскейп отлично скачивает файлы и нормальное расширение предлагает: .zip, а не .php

Я же вас просил написать мне скрипт ...
а то сразу тупой, тупой ...
Название: Ошибка после выполнения header();
Отправлено: ThE0ReTiC от 22 Августа 2003, 14:31:32
закрыто ибо превратилось во флейм