Как запретить загрузки шелл?

Печать RSS
534

М

Малиновые штаны
0
Иногда необходимо передать браузеру некоторый (обычно текстовый) файл цели-
ком. Самым простым решением является использование функции readfileO, имею-
щей следующий синтаксис:
readfile($filename [, $use_include_path])
где $filename представляет имя файла (локального или удаленного, заданного
с помощью упаковщика URL), который необходимо отобразить клиенту, а
$use_include_path — это булевское значение, которое определяет, нужно ли искать
файл в списке включаемых каталогов РНР. В листинге 20.18 функция readfileO
применяется для загрузки файла agreement. txt в HTML-дескриптор <TEXTAREA>.
Листинг 20.18. Использование функции readfile ()
<НТМЬХНЕА0ХТ1ТЬЕ>Использование функции r e a d f i l e ()</TITLEX/HEAD>
<BODY>
<TEXTAREA R0WS=5 COLS=60 NAME="agreement">
<?php r e a d f i l e C a g r e e m e n t . t x t " ) ; ?>
</TEXTAREA>
</BODY>
</HTML>
М

Малиновые штаны
0
fpassthru
(PHP 3, PHP 4, PHP 5)
fpassthru -- Выводит все оставшиеся данные из файлового указателя
Описание
int fpassthru ( resource handle )
Читает указанный файловый указатель с текущей позиции до EOF (конца файла) и записывает результат в буфер вывода.
Если происходит ошибка, fpassthru() возвращает FALSE. В ином случае, fpassthru() возвращает количество символов, прочтнных из handle и переданных на вывод.
Указатель на файл должен быть корректным и указывать на файл, успешно открытый функциями fopen() или fsockopen().
Вам может понадобиться вызвать rewind() чтобы сбросить файловый указатель на начало файла, если вы уже записывали данные в файл.
<?php
// открываем файл в бинарном режиме
$name = ".\public\dev\img\ok.png";
$fp = fopen($name, 'rb');
// отправляем нужные заголовки
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));
// скидываем картинку и останавливаем выполнение скрипта
fpassthru($fp);
exit;
?>

Голубые штаны
0
я ко всему прочему еще и переименовываю загруженый файл сгенерированым числом.

Ктулху
0
43, это естественно, иначе могут попасться файлы с одинковым именем
42, а... ну дак это понятно =) Я думал функция и заголовки сама посылает =)
М

Малиновые штаны
0
#44, откуда ж он может знать что отправлять. Я про то, что зачем использовать while(){fread(...)}, если есть специальные функции

Ктулху
0
45, при использовании этой функции теряется много преимуществ. нельзя управлять скоростью например, нельзя организовать докачку
О

Землянин
0
SNELS, по поводу 33 поста. Для имени файла необязательно генерировать имя используя его хеш. Я к тому что механизм md5 достаточно ресурсоемкий и при массовой загрузке файла это скажется, а если это для закрытой части, то, конечно, можно. Имя файла лучше генерировать при помощи time(), rand(), или идентификатора в базе данных. Потом еще раз повторюсь, никогда не используйте copy при загрузке файла на сервер. Перемещение намного быстрее чем его копирование, следовательно вместо этого можно задействовать move_uploaded_file().
Изменил: Олег (29.12.2009 / 13:08)
М

Малиновые штаны
0
#46, докачку с помощью fpassthru($fp); легко сделать, нужно только указатель на нужное значение поставить fseek(...)

ВЕЛИКИЙ и УЖАСНЫЙ!
0
47 ну, эт я к примеру ведь просто =) ТАм уж кто что захочет =)

Голубые штаны
0
50. Создатель, жостко)
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск