PDA

Просмотр полной версии : Аплоад файла + запись в лог


.::BARS::.
23.04.2009, 08:32
Привет всем... вот такой вопрос...
Нужно сделать 2 формы загрузки файла
1 по http
2 с локального компа
-----
По время загрузки файл меняет имя на то что указываю я.... + в файл пишет имя файла...
Файл должен переименовываться, не трогая расшерение... + можно грузить только файл определенного формата...
кто может подсказать код?

Krist_ALL
23.04.2009, 10:54
А чтотут сложного?
<form action=..><input type=file><input type=submit></form> Поищи в поисковике маны на тему php + upload file

например вот статья про Upload http://www.phpclub.ru/detail/article/upload
а вот стетья про запись в файл http://www.kurepin.ru/php/files/

OdaN
23.04.2009, 13:26
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Загрузка файла на сервер</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?php
$do=$_GET["do"];

switch ($do) {
case "upload":
$uploaddir='upload/';
$userfile=$_FILES['userfile']['name'];
$ext=strrchr($userfile, '.');

if ($ext == '.zip') die ("Нельзя загружать файлы с расширением zip");
//if ($ext !== '.zip') die ("Можно загружать только файлы с расширением zip");

$newfilename=date("U")."$ext";

move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $newfilename);

echo "Имя файла на сервере: $uploaddir$newfilename<br>
Тип файла:".$_FILES['userfile']['type'];

$log = fopen("fileupload.log", "a");
fwrite($log, "$newfilename\n");

break;
default:
?>
<form method="POST" action="?do=upload" enctype=multipart/form-data>
<input type="file" name="userfile">
<input type="submit">
</form>
<? } ?>
</body>
</html>

Twoster
23.04.2009, 13:40
if ($ext == '.zip') die ("Нельзя загружать файлы с расширением zip");
А если шелл, то можно? =)

OdaN
23.04.2009, 14:01
Ну может это будет специальная форма по заливке шеллов =)

Twoster
23.04.2009, 14:08
Ну может это будет специальная форма по заливке шеллов =)

Твой скрипт уязвим в нескольких местах.

Во-первых если уж такая пьянка, нужно исходить от обратного, проверять допустимые значения, а не недопустимые.

Во-вторых, всегда нужно проверять данные при записи в файл. У тебя они идут туда в необработаном виде.

OdaN
23.04.2009, 14:14
Ну во первых у меня там можно заменить
if ($ext == '.zip') die ("Нельзя загружать файлы с расширением zip");
на
if ($ext !== '.zip') die ("Можно загружать только файлы с расширением zip");

Во вторых это только пример скрипта, а не полноценно работающая версия. Если это необходимо, дописать пару условий типа
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $newfilename)) {

echo "Имя файла на сервере: $uploaddir$newfilename<br>
Тип файла:".$_FILES['userfile']['type'];

$log = fopen("fileupload.log", "a");
if (fwrite($log, "$newfilename\n")) {
еcho "лог записан";
} else {
echo "ошибка записи в лог"; }
} else {
echo "ошибка загрузки"; }

не составляет особого труда

.::BARS::.
24.04.2009, 10:42
Спасиб...
как проверить вес файла?

Pernat1y
24.04.2009, 14:50
уже загруженного - так:

//Example #1 filesize() example
<?php
// outputs e.g. somefile.txt: 1024 bytes
$filename = 'somefile.txt';
echo $filename . ': ' . filesize($filename) . ' bytes';
?>