[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Скачивание файлов
foxig
Помогите пожалуйста со скачиванием файлов посредством php.
Есть цикличная табличка в которой выводится информация и через БД прикрепляется ссылка, но файл скачивается только через "сохранить как"
Как установить фаил для скачивания через левую кнопку мыши?

При установке
<?php
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename=weapons/glock/glock.zip');
echo file_get_contents('test.jpg');
exit;
?>
Выводятся ошибки:
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\glock.php:21) in Z:\home\localhost\www\glock.php on line 52

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\glock.php:21) in Z:\home\localhost\www\glock.php on line 53

Warning: file_get_contents() expects at least 1 parameter, 0 given in Z:\home\localhost\www\glock.php on line 54

Но файл скачивается автоматически.
Как правильно установить скачку на каждый файл????



Спустя 56 минут, 47 секунд (28.07.2010 - 04:18) inpost написал(а):
header должен передаваться в самом начале скрипта! А видимо, ты эту надпись вставил где-то в середине!

Спустя 1 час, 57 минут, 11 секунд (28.07.2010 - 06:15) foxig написал(а):
<?php function file_download($filename, $mimetype='application/octet-stream') {
if (file_exists($filename)) {
header($_SERVER["SERVER_PROTOCOL"] . ' 200 OK');
header('Content-Type: ' . $mimetype);
header('Last-Modified: ' . gmdate('r', filemtime($filename)));
header('ETag: ' . sprintf('%x-%x-%x', fileinode($filename), filesize($filename), filemtime($filename)));
header('Content-Length: ' . (filesize($filename)));
header('Connection: close');
header('Content-Disposition: attachment; filename="' . basename($filename) . '";');

$f=fopen($filename, 'r');
while(!feof($f)) {

echo fread($f, 1024);
flush();
}

fclose($f);
} else {
header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
header('Status: 404 Not Found');
}
exit;
}
?>
Вот работающая функция, а как она определяет отдаваемый фаил????
у меня файлы прикрепленны в БД через <a href.....123.rar></a>
я так понимаю у меня не правильно сделаны ссылки на файлы???
Подскажите как надо установить ссылки на файлы что бы их могли скачивать????????????

Спустя 6 часов, 10 минут, 41 секунда (28.07.2010 - 12:26) foxig написал(а):
37 просмотров !! что никто не знает как делать??? или всем в падлу пару строк написать?

Спустя 20 минут, 52 секунды (28.07.2010 - 12:46) Семён написал(а):
В той папке где у тебя хранятся php скрипты, которые нужно скачать создай файл .htaccess с содержанием:
php_flag engine off

Спустя 17 минут, 46 секунд (28.07.2010 - 13:04) inpost написал(а):
foxig Вот теперь мне впадлу) А расписывать структуру культурным людям в соседней теме мне не впадлу)

Спустя 1 час, 5 минут, 46 секунд (28.07.2010 - 14:10) foxig написал(а):
не серчайте, просто мои знания ограничиваются 2-мя неделями изучений и голова кругом вертится, немогу просто понять как как можно просто выдать файлы на скачивание,хотя бы простым способом...

Спустя 5 минут, 2 секунды (28.07.2010 - 14:15) foxig написал(а):
Цитата (Семён @ 28.07.2010 - 09:46)
В той папке где у тебя хранятся php скрипты, которые нужно скачать создай файл .htaccess с содержанием:
php_flag engine off

файлы которые нужно скачать у меня находятся mysite.ru/download/file/file.rar
все файлы либо с расширение .rar либо .zip

Спустя 14 секунд (28.07.2010 - 14:15) inpost написал(а):
Фаил: download.php
<?php
$file = "jurnal/".$_GET['file'];
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="'.$file.'"');
readfile($file);
?>


в данной ситуации на страницу передаётся ссылка на сам фаил, в заголовке я прописал, что PDF-файлы будут скачиваться будут скачиваться! (как раз в той папке и лежали только PDF).

Спустя 3 минуты, 13 секунд (28.07.2010 - 14:19) foxig написал(а):
Цитата (inpost @ 28.07.2010 - 10:04)
foxig Вот теперь мне впадлу) А расписывать структуру культурным людям в соседней теме мне не впадлу)

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

Спустя 1 минута, 48 секунд (28.07.2010 - 14:20) inpost написал(а):
foxig исправляй коментарий и пиши "огромное спасибо", иначе больше от меня помощи не получишь...

Спустя 3 минуты, 10 секунд (28.07.2010 - 14:23) Семён написал(а):
Человеко-подобным языком сформулируйте свою задачу.
Затем будет продолжение разговора.

Спустя 1 минута, 27 секунд (28.07.2010 - 14:25) inpost написал(а):
Семён Зачем кому-то уподобать? Надо быть индивидуальной личностью=)))

Спустя 1 минута, 45 секунд (28.07.2010 - 14:27) Семён написал(а):
inpost rolleyes.gif

Спустя 16 минут, 42 секунды (28.07.2010 - 14:43) foxig написал(а):
Цитата (Семён @ 28.07.2010 - 11:23)
Человеко-подобным языком сформулируйте свою задачу.
Затем будет продолжение разговора.

Нужно установить файлы для скачивания:
Структура такая:
1. Общий каталог weapons
2. Подкаталоги (наименования) glock, usp и тп. их много

на сайте выглядет так:
кнопка weapons в ней подкаталоги с наименованиями

Наименования находятся в цикличной табличке: пример 1 наименования....
<?php
$result = mysql_query("SELECT title,description,text FROM glock");
while ($myrow = mysql_fetch_array($result, MYSQL_ASSOC)) {
printf ("<table>

<tr>
<td><p>%s</p><p>%s</p></td>
</tr>

<tr>
<td><p>%s</p></td>
</tr>

</table><br><br>", $myrow ['title'], $myrow ['description'], $myrow ['text']);

}
mysql_free_result($result);
?>
к каждому табличке надо прикрепить файл.
Как это сделать?

Спустя 1 минута, 23 секунды (28.07.2010 - 14:45) foxig написал(а):
Цитата (inpost @ 28.07.2010 - 10:04)
foxig Вот теперь мне впадлу) А расписывать структуру культурным людям в соседней теме мне не впадлу)

Обязательно поставлю + как только смогу))) точнее будет 10 постов)))
жду помощи))))

Спустя 3 минуты, 38 секунд (28.07.2010 - 14:48) Семён написал(а):
Попробую побыть в роли переводчика.

У тебя есть бд в которой есть на данный момент 3 колонки
title description text


У тебя есть папки:
glock, usp и тп. их много


Нужно связать эти файлы с базой данной и выводить при совпадении.
Т.е.
Glock - Пистолик - Мой текст - Ссылка на файл


Всё вернО?

Спустя 12 минут, 40 секунд (28.07.2010 - 15:01) foxig написал(а):
Цитата (inpost @ 28.07.2010 - 11:20)
foxig исправляй коментарий и пиши "огромное спасибо", иначе больше от меня помощи не получишь...

обязательно поставлю + как только смогу точнее будет 10 постов))))
жду помощи))

Спустя 2 минуты, 38 секунд (28.07.2010 - 15:04) foxig написал(а):
Семен в БД 4 поля:
id (auto_increment) title description, text
да, так, выводится через цикличную табличку....
Может надо как то по другому все сделать?

Спустя 2 минуты, 29 секунд (28.07.2010 - 15:06) Семён написал(а):
Теперь вот логически сядьте и подумайте.
Перед вами стоит задача связать бд и файлы к данным из этой бд.
Есть 2-ва способа решения этой задачи.

Вариант 1) называть файл также как и id текущей выбранной записи.
Вариант 2) создать дополнительную колонку в бд, например file_url и добавить путь / ссылку до нужного файла.

Спустя 17 минут, 22 секунды (28.07.2010 - 15:24) foxig написал(а):
я думал что возможно вторым способом, назвать колонку filename и присвоить значение integer а в таблице написать что то типо
<a href.....glock.php?filename=123.rar></a>
но мне написали что это супер мега дыра!!!!

а как тогда через 1 способ? что изменится если назвать файл так же как и запись в id (это проще)

Спустя 4 минуты, 51 секунда (28.07.2010 - 15:28) inpost написал(а):
foxig Вот как раз твой способ самый нормальный! Код файла glock я дал, у меня он называется download! Посмотри выше! Там вместо PDF подставь rar,zip.
Итак, для того, чтобы не было дырок вообще, делай небольшую защиту:
$bad = array("'", " ", "`", '"', ":", ";", "=", "!", "+");
$filename = str_replace($bad, "", $_GET['filename']);

Спустя 17 минут, 59 секунд (28.07.2010 - 15:46) foxig написал(а):
<?php
mysql_connect("localhost", "kms", "local") or
die("Could not connect: " . mysql_error());
mysql_select_db("weapons");
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
<title></title>
<meta name="description" content="" />
<meta name="keywords" content=""/>
<link href="weapons.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="cotainer">
<?php include ("parts/baner.php"); ?>
<?php include ("parts/keper.php"); ?>
<?php include ("parts/flage.php"); ?>
<?php include ("parts/chely.php"); ?>
<?php include ("parts/pistol.php"); ?>
<?php include ("parts/knopki.php"); ?>
<div id="fonnovosti">
<br>
<?php
$result = mysql_query("SELECT title,description,text FROM glock");
while ($myrow = mysql_fetch_array($result, MYSQL_ASSOC)) {
printf ("<table>

<tr>
<td><p>%s</p><p>%s</p></td>
</tr>

<tr>
<td><p>%s</p></td>
</tr>

</table><br><br>", $myrow ['title'], $myrow ['description'], $myrow ['text']);

}
mysql_free_result($result);

$file = "glock/".$_GET['file'];
header('Content-type: application/rar,zip');
header('Content-Disposition: attachment; filename="'.$file.'"');
readfile($file);
?>


</div>
</div>
</body>
</html>

вернулся к тому с чего начал, если ставить код в начале то невожможно зайти на страницу glock.php а он ее скачивает а файлы находятся в страничке glock.php
Если же поставить код после таблицы то появляются ошибки

Спустя 2 минуты, 3 секунды (28.07.2010 - 15:48) Семён написал(а):
я бы воздержался от способа предложенного inpost

Спустя 49 секунд (28.07.2010 - 15:49) inpost написал(а):
ещё раз! ты делаешь ссылку:
<a href="download.php?file=MUA.ZIP">TEXT</a>
При нажатии на ТЕКСТ, у тебя открывается страница DOWNLOAD.PHP
В НЕЙ СОДЕРЖИТСЯ КОД: (НИЧЕГО БОЛЕЕ!!!)
<?php
$file = "glock/".$_GET['file'];
header('Content-type: application/rar,zip');
header('Content-Disposition: attachment; filename="'.$file.'"');
readfile($file);
?>

Спустя 2 минуты, 6 секунд (28.07.2010 - 15:51) Семён написал(а):
../../

Спустя 40 секунд (28.07.2010 - 15:52) inpost написал(а):
Семён Хорошо, я не говорю, что этот способ идеальный, так, для начинающего подойдет. Скажи, разве там есть дыра? Как раз такой вид мне подсказали на этом форуме 7 месяцев назад!

Спустя 1 минута, 24 секунды (28.07.2010 - 15:53) Семён написал(а):
Цитата (inpost @ 28.07.2010 - 16:52)
Семён Хорошо, я не говорю, что этот способ идеальный, так, для начинающего подойдет. Скажи, разве там есть дыра? Как раз такой вид мне подсказали на этом форуме 7 месяцев назад!

Ну эт плоха) зачем получать через скрипт, когда можно обращаться к файлу напрямую? Всего то указать в колонке ссылочку.
Дыра есть, выше привёл пример wink.gif

Спустя 45 минут, 16 секунд (28.07.2010 - 16:39) foxig написал(а):
я указываю ссылку через <a href='weapons/glock/glock.rar'></a> только она не качается на левую кнопку мышки а только через "сохранить как"

Спустя 22 минуты, 55 секунд (28.07.2010 - 17:02) inpost написал(а):
foxig я уже все расписал!!!
Семён в таком случае добавить ещё удаление "/" символа. А ещё лучше убирать вообще такую связку "../". Вообще, данный вопрос относится к безопасности веб-приложений, и требует детального изучения видов атак и способов защиты! =)

Спустя 5 часов, 30 минут, 42 секунды (28.07.2010 - 22:32) Семён написал(а):
Цитата (foxig @ 28.07.2010 - 17:39)
я указываю ссылку через <a href='weapons/glock/glock.rar'></a> только она не качается на левую кнопку мышки а только через "сохранить как"

Не качает потомучто RAR, используй ZIP.
А так попробуй в папке с файлами создать файл .htaccess и записать туда:
AddType application/x-rar-compressed rar

Спустя 8 часов, 40 минут, 44 секунды (29.07.2010 - 07:13) Joker написал(а):
foxig используй обромляющие теги!!!

Спустя 1 день, 10 часов, 19 минут, 58 секунд (30.07.2010 - 17:33) Guest написал(а):
laugh.gif

Спустя 55 секунд (30.07.2010 - 17:34) foxig написал(а):
да этот вопрос уже решен давно, спасибо .
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.