Вот списал с книжки скрипт загрузки файлов на сайт а как обычно он не работает (книжку скоро сожгу из-за большого числа ошибок). Помогите мне разобраться в чем дело! Указывает на ошибку в самой последней строке 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 написал(а):
В мануале написано:
Если вам нужен уникальный идентификатор или лексема и вы намереваетесь выдать эту лексему пользователю по сети (т.е. как куки сессии), рекомендуется использовать её вместе со строками
Это создаст 32-символьный идентификатор (128-битное 16-ричное число), который очень трудно угадать.
Если вам нужен уникальный идентификатор или лексема и вы намереваетесь выдать эту лексему пользователю по сети (т.е. как куки сессии), рекомендуется использовать её вместе со строками
$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 написал(а):
Может кто-нибудь подскажет как сделать такой скрипт безопасным? И где в нем уязвимости?