ОБСУЖДЕНИЕ

Загрузка файла не сервер

3 ответов 4,8 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Автор темы
Нужно загрузить файл на сервер. Но переименовать его, например текущей датой, чтобы названия всех файлов были уникальными. Я заранее не знаю какой тип фалов будет загружаться, т.е. я не могу сказать что пользователи будут закачивать только вордовские файлы или рисунки.
Сам принцип организации закачки файла я знаю. Но вот как пееименовть :)
Вот сама форма для закачки
Код:
<form action="uploader.php" method="post" enctype="multipart/form-data">
<input type="file" name="filename"><br>
<input type="text" name="nazvanie"><br> 
<input type="submit" value="Загрузить"><br>
</form>

А это обрабатывающий скрипт
Код:
<?php
if(copy($_FILES["filename"]["tmp_name"], "../uploads/".$_FILES["filename"]["name"]))
{
echo("Файл успешно загружен <br>");
} else {
echo("Ошибка загрузки файла");
}
?>

Подскажите что мне нужно переделать.
 
Во-первых делай проверку на тип файла (doc, xls, image и т.д.) иначе залбьют тебе шелл и положат твой сайт

Вот пример кода:



PHP:
function image_valid($type)
{
$file_types = array('image/pjpeg' => 'jpg', 'image/jpeg' => 'jpg', 'image/jpeg' =>
'jpeg', 'image/gif' => 'gif', 'image/X-PNG' => 'png', 'image/PNG' => 'png',
'image/png' => 'png', 'image/x-png' => 'png', 'image/JPG' => 'jpg', 'image/GIF' =>
'gif', 'image/bmp' => 'bmp', 'image/bmp' => 'BMP', );
if (!array_key_exists($type, $file_types))
{
return false;
}
else
{
return true;
}
}


function upload()
{

$image_upload_error = '';
//$data - to 4to iz $_POST'a prihodit
if ($data)
{
$upload_dir = $_SERVER['DOCUMENT_ROOT'].'/uploads/';
$image_name = $_FILES['data']['name']['Product']['image'];
$tmp_image_name = $_FILES['data']['tmp_name']['Product']['image'];
//$new_image_name - imea faila na servere budet image1_31564165415616.jpg
$new_image_name = $image_name.'_'.time();
$image_type = $_FILES['data']['type']['Product']['image'];

if ($image_valid($image_type))
{
if (move_uploaded_file($tmp_name, $upload_dir.$new_image_name))
{
$image_upload_error = 'Картинка загружена';
}
else
{
$image_upload_error = 'Картинка не загружена';
}
}
else
{
$image_upload_error = 'Загружаемый файл не является изображением';
}
}
}
 
;) +1
 
$bra="bra"; // prefix
$dir="./files/"; // каталог, куда закачиваем
if ($_FILES['filename']['name'])
{ $file=$_FILES['filename']['tmp_name'];
$type=$_FILES['filename']['name'];
$p=strrpos($type,".");
$type=substr($type,$p+1);
$tmpfname = tempnam($dir, "$bra");
$tmpfname=str_replace("\\",'/',$tmpfname);
unlink($tmpfname);
$p=strrpos($tmpfname,"/");
$fname=substr($tmpfname,$p+1);
$p=strrpos($fname,".");
if($p>0) $fname=substr($fname,0,$p+1).$type; /// Windows
else $fname.=".".$type; // Linux
$FM=move_uploaded_file($_FILES['filename']['tmp_name'], $dir.$fname);
if ($FM ) echo " Ok";
else echo "Error upload";
}