|
|
|
| Всем здрасте!
есть ссылка вида: file.php?id=#ID
где ID - идентификационный номер на ссылку файла в БД (ссылка на файл в виде: имя_файла.расширение)
CREATE TABLE IF NOT EXISTS `table_link` (
`id` int(9) NOT NULL AUTO_INCREMENT,
`linka` varchar(30) CHARACTER SET utf8 NOT NULL,
`times` varchar(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6;
--
-- Дамп данных таблицы
--
INSERT INTO `table_link` (`id`, `linka`, `times`) VALUES
(1, 'vj4cPe1A4U.doc', '1296031983'),
(2, 'wcN5YVYlTk.doc', '1296031983'),
(3, 'IdI3miZOaw.doc', '1296031983'),
(4, '2z94SiJXzs.doc', '1296031983'),
(5, 'UTcYqkuAv3.doc', '1296032387');
|
после перехода по ссылке в файле file.php
<?
if(isset($_GET['id']) && is_numeric($_GET['id']))
{
include ('connect.php'); // Соединяемся с БД
//Выбираем нужную ссылку на файл
$sql = mysql_query("SELECT * FROM `table_link` WHERE `id`='".intval($_GET['id'])."' LIMIT 1");
$arr = mysql_fetch_assoc($sql);
$arr['linka'] = htmlspecialchars($arr['linka']);
//получаем путь и имя файла
$fp = realpath("docs/".$arr['linka']);
//читаем файл
if (file_exists($fp))
{
$f = fopen($fp, 'rb');
//Определяем MIME тип исходя из ссылки (думаю в будущем определять сам файл на тип)
$aplic = explode('.',$arr['linka']);
if ($aplic[1]=='doc' or $aplic[1]=='rtf') $ap = 'application/msword';
elseif ($aplic[1]=='xls') $ap = 'application/x-msexcel';
elseif ($aplic[1]=='jpe' or $aplic[1]=='jpeg' or $aplic[1]=='jpg') $ap = 'image/jpeg';
//тип файла
header('Content-Type: '.$ap);
//размер файла
header("Content-Length: ".filesize($fp));
//имя файла
header("Content-Disposition: attachment; filename=Файл скачан: (".date("H-i-s d.m.y").").".$aplic[1]);
//выводим файл пользователю
fpassthru($f);
exit();
}
else { echo "Такого файла не существует!"; }
}
else { echo "Ссылки на файл не существует!"; }
?>
|
Проблема: Размер файла и его тип определяет верно, а вот Содержимое DOC файлов сохраняет в крякозябрах...подскажите причины | |
|
|
|
|
|
|
|
для: selma
(05.03.2011 в 03:16)
| | $arr['linka'] = htmlspecialchars($arr['linka']);
header("Content-Disposition: attachment; filename=Файл скачан: (".date("H-i-s d.m.y").").".$aplic[1]);
Это что такое? | |
|
|
|
|
|
|
|
для: sim5
(05.03.2011 в 04:21)
| | $arr['linka'] = htmlspecialchars($arr['linka']); Это на всякий случай (без этого тоже НЕ работает)
header("Content-Disposition: attachment; filename=Файл скачан: (".date("H-i-s d.m.y").").".$aplic[1]); Отдаю файл и присваиваю свое имя.
Не пойму где не так? файл правильно отдает, правильно определяет расширение, и размер файла, но отдает битый файл | |
|
|
|
|
|
|
|
для: selma
(09.03.2011 в 02:02)
| | Вы присваиваете filename имя файла с пробелами и русскими буквами, попробуйте сформировать имя без них - ситуация не меняется? | |
|
|
|
|
|
|
|
для: cheops
(09.03.2011 в 11:01)
| | называла даже mt_rand(9,999); результат тот же, ума не приложу что не так.... | |
|
|
|
|
|
|
|
для: selma
(10.03.2011 в 01:54)
| | В мануале есть пример вывода с использованием функции readfile: http://ua2.php.net/manual/en/function.readfile.php | |
|
|
|
|
|
|
|
для: Trivium
(10.03.2011 в 15:14)
| | Точно!!! как я забыла про readfile...где то читала, что он потребляет больше серверных рессурсов (если не так, было бы полезно почитать) НО Главное работает отлично! Спасибо Trivium | |
|
|
|