выдавать файл с помощью php

timur-kar

Новичок
выдавать файл с помощью php

есть примерно такая структура:
folder1 - в ней хранятся какие-либо файлы, она вне директорий веб-сервера (но php-скрипт имеет право читать из неё);
folder2 - уже в пределах сервера, к примеру www/folder2

мне нужно чтобы при запросе к апачу
/folder2/filename

отдавался файл с именем filename из folder1.
сейчас я это делаю с помощью mod_rewrite (все файлы кроме php) и php

RewriteEngine on
RewriteRule ^(.*)\.(gif|jpg) rew_file.php?file=$0

содержимое rew_file примерно такое:
PHP:
<?
	$filename = "path_to_folder1/" . $_GET["file"];
	$f = fopen ($filename, "r");
	echo fread($f, filesize ($filename));
	fclose ($f);
?>
все работает, но не устраивает как решение
пока плевать на вопросы безопасности (их буду прорабатывать как только приду к какому-то решению)
это решение не устраивает потому как не выдает хедеры нормально (например jpg файл выдается кодом и т.д.), да и по быстродействию возможно не лучшее. как еще можно выдавать файлы из другой директории ? (раньше пользовался симлинками, но нужно решение работающее под Win).
 

timur-kar

Новичок
Автор оригинала: HraKK
file_get_contents+header +echo
За file_get_contents спасибо, забыл про неё, так должно быть быстрее.
если у кого есть принципиально другое решение - буду оч. благодарен.
Еще такой вопрос - знает ли кто-нибудь, mime_content_type возвращает тип по расширению или читает файл?
 

Phristen

Новичок
mime_content_type возвращает content-type по названию файла.

P.S.
file_get_contents + echo = readfile ;)
 

Фанат

oncle terrible
Команда форума
HraKK
ты хорошо подумал перед тем, как советовать читать ВЕСЬ файл в память?!
 

timur-kar

Новичок
спасибо всем

а ты смотрел этот документ ? я прежде чем задать вопрос посмотрел. И документ, и magic.mime, и комменты
Вот что говорится на php.net:
"Returns the MIME content type for a file as determined by using information from the magic.mime file."
Если посмотришь этот mime файл то там нет соответствия расширения mime-type. Я бы и сам проверил, но функция недоступна оказалась.
 

Фанат

oncle terrible
Команда форума
timur-kar
а какая проблема ручками выдать нужный заголовок?
 

timur-kar

Новичок
Автор оригинала: Фанат
HraKK
ты хорошо подумал перед тем, как советовать читать ВЕСЬ файл в память?!
В любом случае это лучше чем мой первоначальный fread, а вот насчет readfile, он выводит непосредственно ? не читая в память?
(сейчас читаю php.net, если и есть упоминание об этом - то только в комментах)

-~{}~ 13.01.07 02:50:

Автор оригинала: Фанат
timur-kar
а какая проблема ручками выдать нужный заголовок?
да нет, проблемы нет, так и поступил пока
просто хотелось некого универсального решения (не зависящего от типа файлов которые там лежат), что-то типа симлинков
 

HraKK

Мудак
Команда форума
Фанат
Действительно не стоит.
А стоит ложится спать. Чем и займусь.

timur-kar
Чем не устраивает fread?
 

Фанат

oncle terrible
Команда форума
если файл доступен из веб, то делать на него локейшен
 

timur-kar

Новичок
Автор оригинала: Фанат
если файл доступен из веб, то делать на него локейшен
folder1 - в ней хранятся какие-либо файлы, она вне директорий веб-сервера (но php-скрипт имеет право читать из неё);
похоже я не совсем четко объяснил, файл не доступен из веб . ладно, спасибо еще раз всем, будем делать readfile + header с указанием типа ручками
 

Фанат

oncle terrible
Команда форума
нет, ты написал, что плевать на вопросы безопасности =)
это я не нкстаиваю, а объясняю. нет - так нет
 

HraKK

Мудак
Команда форума
Фанат
Сморознешь глупость, а ее только и ждут как видно :)
 

betik

Новичок
Ещё не стоит забывать про такую вещь как докачка / закачка в несколько потоков.
Насколько я понимаю, просто fread + еcho недостаточно.

На phpclasses.org я находил класс-решение, в котором было много всяких наворотов... Им и воспользовался.
 
Сверху