Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP]Отдача файла / 16 сообщений из 16, страница 1 из 1
31.03.2012, 13:21:37
    #37732752
kalamfur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP]Отдача файла
Привет.
Задумался как правильно отдать файл с сайта пользователю.
Мой скрипт роутинга на сайте получает все пути которые вводятся пользователем и обрабатывает. Т.е. даже если файл лежит в папке, то отдаётся он не просто вэб сервером, а через выставление хеадеров и readfile($url);
Вопрос, насколько это правильно/ущербно , стоит переписать либо нет.

думал заменить readfile на

Код: php
1.
2.
3.
4.
5.
6.
$handle = fopen ($file, "r"); 
while (!feof ($handle)) {     
    $buffer = fgets($handle, 4096);     
    echo $buffer; 
} 
fclose ($handle);



отдавай заранее заголовки.

Правда опять же не ясно, будут ли тормоза, или всё должно работать на ура.

ткните, в чем не прав и каков тру вэй)
...
Рейтинг: 0 / 0
31.03.2012, 13:43:29
    #37732769
zadrot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP]Отдача файла
я бы так не делал, достаточна большая нагрузка таким образом файлы выдавать.
.htaccess попробуй поправить:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

сперва мы проверяем, существует ли запрашиваемый файл, используя директиву RewriteCond, и, если нет, то перенаправляем запрос на index.php
...
Рейтинг: 0 / 0
31.03.2012, 13:45:18
    #37732770
zadrot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP]Отдача файла
kalamfur,
пришли .htaccess посмотрим как можно поправить
...
Рейтинг: 0 / 0
31.03.2012, 13:45:27
    #37732771
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP]Отдача файла
А без всего этого файл вебсервером отдается как то не так? Опишите исходную задачу.
...
Рейтинг: 0 / 0
31.03.2012, 14:46:21
    #37732825
zadrot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP]Отдача файла
если вы хотите управлять доступом к файлам через php, то лучше использовать fgets нежели readfile. fgets работает быстрее для больших файлов, а readfile может выдавать ошибку переполнения буфера. если есть возможность, то лучше создавать уникальные ссылки на файл через shell командой ln http://rus-linux.net/MyLDP/consol/hdrguide/rusman/ln.htm имхо быстрее и избавит от многих потенциальных проблем
...
Рейтинг: 0 / 0
31.03.2012, 14:55:03
    #37732836
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP]Отдача файла
zadrotлучше создавать уникальные ссылки на файл через shell командой ln http://rus-linux.net/MyLDP/consol/hdrguide/rusman/ln.htm
Чем встроенная пхпшная функция symlink() не устраивает?
...
Рейтинг: 0 / 0
31.03.2012, 15:07:32
    #37732847
kalamfur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP]Отдача файла
zadrotkalamfur,
пришли .htaccess посмотрим как можно поправить

Код: plaintext
1.
2.
3.
4.
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$  http://%1/$1  [R=301,L]
RewriteRule (.*)? index.php?page=$1 [L,QSA]

vkleА без всего этого файл вебсервером отдается как то не так? Опишите исходную задачу.

Задача в полном контроле над любыми запросами к сайту. Мне кажется что это самый простой вариант. Т.е. в index.php я проверяю регулярками URL и либо переадресовываю, либо логирую запросы и отказываю в доступе либо в поток что-то отдаю.
...
Рейтинг: 0 / 0
31.03.2012, 15:43:02
    #37732879
zadrot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP]Отдача файла
vkleЧем встроенная пхпшная функция symlink() не устраивает? мда, тупанул, symlink() логичней.
kalamfurOptions +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteRule (.*)? index.php?page=$1 [L,QSA]
это у тебя и картинки, css, js и прочие инклуды через php генерятся?:) не самый простой вариант
...
Рейтинг: 0 / 0
31.03.2012, 15:58:24
    #37732885
zadrot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP]Отдача файла
zadrotkalamfurOptions +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteRule (.*)? index.php?page=$1 [L,QSA]
это у тебя и картинки, css, js и прочие инклуды через php генерятся?:) не самый простой вариант
попробуй так

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteRule (.*)? index.php?page=$1 [L,QSA]

тут проверяется существует ли файл, если да то выдается если нет то посылается в индекс
...
Рейтинг: 0 / 0
31.03.2012, 16:14:40
    #37732897
zadrot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP]Отдача файла
kalamfur,
еще после RewriteEngine On можно добавить:

RewriteCond %{HTTP_HOST} ^site.ru
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=permanent,L]

а то я так понимаю если у тебя человек название сайта без www набирает то попадает вникуда
...
Рейтинг: 0 / 0
31.03.2012, 16:17:35
    #37732898
kalamfur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP]Отдача файла
zadrotа то я так понимаю если у тебя человек название сайта без www набирает то попадает вникуда
Почему вникуда? редиректит на сайт без www
...
Рейтинг: 0 / 0
31.03.2012, 16:30:40
    #37732905
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP]Отдача файла
kalamfurЗадача в полном контроле над любыми запросами к сайту.ИМХО это немного лишнее. Не вижу смысла мониторить запросы к стилям, яваскриптам, картинкам оформления и прочей мелочевке. Если, конечно, нет какого-то тайного смысла ))))
...
Рейтинг: 0 / 0
31.03.2012, 16:36:19
    #37732908
kalamfur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP]Отдача файла
Просто не стал проверять всё в .htaccess так как до этого использовал не апач, а lighttpd.
Или стоит как-то проверять, и если не PHP, то отдавать как статику?

разница по времени отдачи будет между fget и простой отдачей? или там еще и нагрузка на интерпритатор?
...
Рейтинг: 0 / 0
31.03.2012, 16:45:17
    #37732912
zadrot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP]Отдача файла
kalamfurzadrotа то я так понимаю если у тебя человек название сайта без www набирает то попадает вникуда
Почему вникуда? редиректит на сайт без www
не часто сталкиваюсь с htaccess, но в твоем htaccess я этого не вижу.
kalamfurПросто не стал проверять всё в .htaccess так как до этого использовал не апач, а lighttpd.
Или стоит как-то проверять, и если не PHP, то отдавать как статику?

разница по времени отдачи будет между fget и простой отдачей? или там еще и нагрузка на интерпритатор?
по дефолту как-то так пишу:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^site.ru
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=permanent,L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?route=$0 [L,QSA]

разница огромная будет
...
Рейтинг: 0 / 0
31.03.2012, 19:19:33
    #37733021
kalamfur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP]Отдача файла
Всем спасибо, значит буду пользовать htaccess)
видимо, контролировать все запросы это паранойя))
...
Рейтинг: 0 / 0
31.03.2012, 19:22:01
    #37733022
zadrot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP]Отдача файла
kalamfurВсем спасибо, значит буду пользовать htaccess)
видимо, контролировать все запросы это паранойя))нет, настраивай apache log там любой запрос можно контролировать, без потери производительноси
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP]Отдача файла / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]