Перед добавлением открытой загрузки файлов на сайт, нужно определиться какие типы файлов можно разрешать загружать. Например, только файлы с расширением .png и .jpg.
Если Ваш список файлов не ограничен только видеофайлами или изображениями, необходимо запретить загружать файлы, несущие потенциальную опасность.
Пример:
<?php
/* Создаем паттерн, где есть список запрещенных файлов по расширению */
$blacklist = '/.(com|bat|exe|cmd|vbs|msi|jar|php(\d?)|phtml|access|js)$/i';
/* Если файл содержит запрещенное разрешение - выход с уведомлением*/
if (preg_match($pattern, $_FILES['file']['name']))
{
exit ("Файл с данным расширением запрещен к загрузке");
}
$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
{
echo "Файл загружен.\n";
}
else
{
echo "Файл не загружен.\n";
}
?>
Если Вам все же нужно загружать файлы с расширением php, то как вариант, можно поменять их расширение на .txt.
<?php
// Обработчик формы загрузки
if(!empty($_FILES['filename']['tmp_name']))
{
// Извлекаем расширение
$ext = strtolower(strrchr($_FILES['filename']['name'], "."));
// Запрещенные форматы
$extentions = array(".phtml", ".php", ".html", ".htm", ".pl",
".xml", ".inc");
// Проверка расширения по
// списоку запрещенных файлов
if(in_array($ext, $extentions))
{
$pos = strrpos($_FILES['filename']['name'], ".");
$path = substr($_FILES['filename']['name'], 0, $pos).".txt";
}
else
{
$path = $_FILES['filename']['name'];
}
// Сохраняем файл в текущем каталоге
if(copy($_FILES['filename']['tmp_name'], $path))
{
echo "Файл успешно загружен - $path";
}
}
?>
Файлы загружаются в папку .htaccess. С ее помощью можно переопределить обработчик исполняемых файлов php, perl воспринимать их как текстовые:
RemoveHandler .php .phtml .pl
AddType text/plain .php .phtml .pl
Еще один вариант – в папке прописываем запрет на исполнение скриптов:
Options -ExecCGI
AddHandler cgi-script .pl .py .php .jsp. htm .shtml .sh .asp .cgi



