как правильно отдать файл

rafael

Новичок
как правильно отдать файл

Есть папка на сервере /x/. В ней .htaccess Deny from All

И файлы разных размеров и разных типов (doc, jpg, rar...)

Есть скрипт x.php:

<?php
...
set_time_limit(0);
...

$file = file_get_contents($_SERVER['DOCUMENT_ROOT'].$value['_file']);
$name = 'file_'.$id;
$tmp = explode('/', $value['_file']);
if (count($tmp)>1) {
$name = $tmp[count($tmp)-1];
}
$name = (strlen($value['_name']))?$value['_name']:$name;
header('Content-Type: application; charset=Windows-1251');
header('Content-disposition: attachment; filename="'.$name.'"');
echo $file;
exit;
?>

Так вот скрипт этот выдаёт файл с нулевым размером. В чём я ошибся?

P.S. Файлы не битые, замечательно скачиваются по FTP и корректно открываются, chmod 0777
 

basboy

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

kernel32

Новичок
rafael
контроль ошибок "на полную" включен?

и еще заголовок перед эхом содержимого файла, чтоб юзер знал, сколько надо качать:
PHP:
header("Content-length: ". filesize($filepath));
 

Gas

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

kernel32

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

rafael

Новичок
basboy: Правильно, file_get_contents ничего не возвращает, но файл существует... Может в .htaccess что-то прописать? (((

kernel32 : спасибо что напомнил

-~{}~ 10.01.08 14:51:

ок, файлы действительно по несколько десятков мегабайт... буду копать... всем спасибо
 

basboy

Новичок
Правильно, file_get_contents ничего не возвращает, но файл существует...
попробуй содержимое получить другим способом (благо варианты есть).
Сам сталкивался с тем, что file_get_contents не возвращает содержимое иногда.

Включи контроль ошибок ( (с) kernel32 ), и убедись, что парсер не ругается
 
Сверху