Forum Webscript.Ru
Программирование => PHP => Тема начата: 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 все работает ...
-
DiJay
Тут следует сделать ремарку. Корректно работают только MSIE и Opera, т.е. предлагают сохранить файл с именем file и предлагают тип файла WinZip (т.е. .zip). Netscape же предлагает имя файла file.zip, а расширение .php ! Может мне кто-нибудь объяснит?
Mozilla смотрит на расширение файла, с которого начинается скачка. Что бы этого не было передавайте путь к файлу примерно как http://site.ru/downloads.php/file.zip
А проблема вряд-ли в сервере.
-
Что-то не канает!
Выдет ошибку:
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(); то куда прописывать путь-то?
-
не такая тема точно не канает!
Если я не прав, то напиши свой код скрипта ...
-
:-)))))))))))
DiJay:
Stat failed for http://site.ru/downloads/file.zip
-
он имел в виду не $down_file - это у тебя должно оставаться таким, как и было.
а ссылку на закачку этого файла надо делать такого вида, как Дмитрий написал.
-
readfile("http://site.ru/downloads/file.zip");
так что-ли?
-
нет.
ссылка имеется в виду та, на которую тыкает пользователь, чтобы скачать файл.
-
file.zip
так что-ли?
да мне не надо так! Мне надо обработать скрипт перед началом закачки файла!
-
товарисчи!
не парьте меня!
Напишите просто скрипт, пожалуйста :)
-
DiJay:
Мне надо обработать скрипт перед началом закачки файла!
а теперь медленно и по-русски.
Чтобы написать тебе скрипт (что, кстати, никто не обязан), надо сначала понять, че ты хочешь.
а из твоих бессвязных стенаний это неясно.
-
DiJay:
Напишите просто скрипт,
:beer: x 2
-
Объясняю медленно, по-русски!
пусть есть ссылка 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 ???
-
DiJay:
пусть есть ссылка file
сюда
только не
http://site.ru/download/file.zip
а
http://site.ru/downloads.php/file.zip
-
значит, чтобы избавиться от глюка с Нетскейпом нужно писать так:
-------------------------------------------------------------------------
$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;
--------------------------------------------------------------------------
Флаг вам в руки ребяты:) У меня все работает!
-
и что вы имели в виду под downloads.php ?
-
Вот полный текст скрипта, помещаемый в самое начало фашего 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;
}
--------------------------------------------------------------------------------------
Новичкам в качестве ознакомления работе с хеадерами :)
Единственный минус в том, что для Нетскейпа нельзя задать имя файла, отличное от того что лежит у вас на сервере ...
-
Ой млин... Кто еще хочет попытаться ему чего-нибудь объяснить?
-
Дмитрий Попов
нетЪ
-
а как он шустро почувствовал себя гуру.
и начал советы новичкам раздавать...
-
ну так :)
получилось же :)
-
В твою тупую башку два дня пытались вдолбить, как давать имя для нетскейпа.
после этого ты вещаешь
Единственный минус в том, что для Нетскейпа нельзя задать имя файла
и это ты называешь "получилось"?
Ну-ну.
пальцы в дверь проходить не мешают?
-
вот ты кричишь, а за два дня не дал мне ни одного дельного совета!
И ты кстати не прав! Я писал так:
Единственный минус в том, что для Нетскейпа нельзя задать имя файла, отличное от того что лежит у вас на сервере ...
А в другом Нетскейп отлично скачивает файлы и нормальное расширение предлагает: .zip, а не .php
Я же вас просил написать мне скрипт ...
а то сразу тупой, тупой ...
-
закрыто ибо превратилось во флейм