Есть цикличная табличка в которой выводится информация и через БД прикрепляется ссылка, но файл скачивается только через "сохранить как"
Как установить фаил для скачивания через левую кнопку мыши?
При установке
<?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>
я так понимаю у меня не правильно сделаны ссылки на файлы???
Подскажите как надо установить ссылки на файлы что бы их могли скачивать????????????
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
в данной ситуации на страницу передаётся ссылка на сам фаил, в заголовке я прописал, что PDF-файлы будут скачиваться будут скачиваться! (как раз в той папке и лежали только PDF).
<?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

Спустя 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 колонки
У тебя есть папки:
Нужно связать эти файлы с базой данной и выводить при совпадении.
Т.е.
Всё вернО?
У тебя есть бд в которой есть на данный момент 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
да, так, выводится через цикличную табличку....
Может надо как то по другому все сделать?
id (auto_increment) title description, text
да, так, выводится через цикличную табличку....
Может надо как то по другому все сделать?
Спустя 2 минуты, 29 секунд (28.07.2010 - 15:06) Семён написал(а):
Теперь вот логически сядьте и подумайте.
Перед вами стоит задача связать бд и файлы к данным из этой бд.
Есть 2-ва способа решения этой задачи.
Вариант 1) называть файл также как и id текущей выбранной записи.
Вариант 2) создать дополнительную колонку в бд, например file_url и добавить путь / ссылку до нужного файла.
Перед вами стоит задача связать бд и файлы к данным из этой бд.
Есть 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 (это проще)
<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
Если же поставить код после таблицы то появляются ошибки
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
В НЕЙ СОДЕРЖИТСЯ КОД: (НИЧЕГО БОЛЕЕ!!!)
<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 месяцев назад! |
Ну эт плоха) зачем получать через скрипт, когда можно обращаться к файлу напрямую? Всего то указать в колонке ссылочку.
Дыра есть, выше привёл пример

Спустя 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 написал(а):

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