[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка файлов на сайт
ak167
Всем привет!
Вот списал с книжки скрипт загрузки файлов на сайт а как обычно он не работает (книжку скоро сожгу из-за большого числа ошибок). Помогите мне разобраться в чем дело! Указывает на ошибку в самой последней строке 61, там закрывается тег "/html". Где там ошибка ума не приложу, скорее всего ошибки там нет. Но вот где она тогда?

Код:

<?php
// имя папки для хранения файлов
$catalog="files";


if($_POST['sent'])
{
// если папка не существует, то создаем ее
if(!file_exists($catalog)){mkdir($catalog, 0755);}

// проверка размера и типа файла
if($_FILES['newfile']['size']>100000){$error="<br>Файл слишком велик";}
if(!($_FILES['newfile']['type'] =='image/jpeg' OR $_FILES['newfile']['type']=="image/gif")){$error.="<br>Файл имеет неразрешенный тип";}

// Сохраняем файл
if(!$error)
{

// генерация уникального имени
$name=uniqid("");

// добавляем расширению к имени файла
switch($_FILES['newfile']['type'])
{
case 'image/jpeg': $name.=".jpeg"; break;
case 'image/gif': $name.=".gif"; break;
}

// Добавление имени папки к имени файла
$name=$catalog."/".$name;

// Копирование загружаемого файла в папку
copy($_FILES['newfile']['tmp_name'], '$name');

}
else{echo "<h2><font color=red>".$error."</font></h2>";}

// Отображение гиперссылок на хранящиеся в папке файлы
$dir=opendir($catalog);
while($file=readdir($dir))
{
if(is_file($catalog."/".$file))
{
echo '<a href="'.$catalog.'/'.$file.'" target="_blank">Файл_'.$i.'</a><br>';
$i++;
}
}

closedir($dir);
?>

<html>
<
body>
<
h2>Загрузка файлов на сервер</h2>
<
form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<
input type="hidden" name="sent" value="1">
<
p>Выбор файла</p>
<
input type="file" name="newfile"><br><br>
<
input type="submit"><input type="Reset" value="Сброс">
</
form>
</
body>
</
html>




Спустя 9 минут, 37 секунд (10.12.2009 - 22:35) ApuktaChehov написал(а):
После closedir($dir);
поставь }

А если честно, скрипт очень плохой. Тебе под видом картинок загрузят все что угодно.

Спустя 2 часа, 26 минут, 7 секунд (11.12.2009 - 01:01) phz написал(а):
Функцию PHP getimagesize() можно использ. для этого. Она берет имя файла как аргумент и возвращает массив размеров и типа изображения.

    <?php
$imageinfo = getimagesize($_FILES['userfile']['tmp_name']);
if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg') {
echo "ошибка";
exit;
}


Спустя 22 часа, 23 минуты, 17 секунд (11.12.2009 - 23:24) ak167 написал(а):
ApuktaChehov, я знаю что скрипт плохой. Я еще только учусь.

Цитата
После closedir($dir);
поставь }

ApuktaChehov, вот теперь ошибка не выскакивает. Спасибо! Но возникла другая проблема - файлы НЕ загружаются. В браузере Chrom почему-то пишет, что файл не выбран а в Опере вообще ничего не пишет и тоже не загружает. А по идее скрипт должен загружать файлы и выдавать ссылки на них.
Не знаете почему он не работает?

Спустя 4 часа, 18 минут, 29 секунд (12.12.2009 - 03:42) brainraider написал(а):
$name=uniqid("");


хм, а тут разве МД5 не надо использовать?


$name=md5(uniqid(""));

Спустя 5 часов, 48 минут, 43 секунды (12.12.2009 - 09:31) phz написал(а):
В мануале написано:

Если вам нужен уникальный идентификатор или лексема и вы намереваетесь выдать эту лексему пользователю по сети (т.е. как куки сессии), рекомендуется использовать её вместе со строками

$token = md5(uniqid("")); // без префикса
$better_token = md5(uniqid(rand(),1)); // лучше, труднее взломать


Это создаст 32-символьный идентификатор (128-битное 16-ричное число), который очень трудно угадать.

Спустя 10 минут, 40 секунд (12.12.2009 - 09:42) VolCh написал(а):
copy($_FILES['newfile']['tmp_name'], '$name');

Вот в этом месте, по идее, не должно быть кавычек вокруг $name

Спустя 3 минуты, 16 секунд (12.12.2009 - 09:45) VolCh написал(а):
Цитата (brainraider @ 12.12.2009 - 04:42)
$name=uniqid("");


хм, а тут разве МД5 не надо использовать?


$name=md5(uniqid(""));

Если стоит задача только сгенерировать уникальное имя, то не надо

Спустя 3 часа, 27 минут, 1 секунда (12.12.2009 - 13:12) ak167 написал(а):
VolCh, спасибо! Как же я сам не заметил!(((
Теперь все работает!)))

Спустя 4 месяца, 5 дней, 12 часов, 34 минуты, 41 секунда (18.04.2010 - 00:47) ak167 написал(а):
Может кто-нибудь подскажет как сделать такой скрипт безопасным? И где в нем уязвимости?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.