[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка файлов на сервер с проверкой рассширения
de facto
День добрый

Пробую написать простой скрипт загрузки файлов на сервер с проверкой расширения, подскажите в чем проблема. В результате работы скрипта - пустой экран и пустой каталог назначения=(
Индексный файл:
HTML
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="fufel" /><br>
<input type="submit" value="Загрузить файл" /><br>
</form>


Файл upload.php

PHP
if(isset($_POST["fufel"])) 
{
   $fufel=trim($_POST["fufel"]);
}
else 
{
   $fufel="";
}

if(!empty(
$fufel))
{
          $ext=array(".gif",".txt",".jpg");
              if(in_array($_FILES["fufel"]["name"],$ext))
{
                   copy($_FILES["fufel"]["tmp_name"], "c:/fignya/".$_FILES["fufel"]["name"]);
                         echo "Все окей";
}
            else
{
                         echo "Лажа";
}}




Спустя 13 минут, 16 секунд (13.08.2009 - 23:40) waldicom написал(а):
В
PHP
$_FILES["fufel"]["name"]

что хранится? Расширение файла или его имя? И что точно делает функция in_array() ?

Вместо copy() лучше использовать move_uploaded_file()

Спустя 9 минут, 54 секунды (13.08.2009 - 23:50) waldicom написал(а):
PandoraBox2007 напиши мне плиз код для социалки типа одноклассников.

Спустя 5 минут, 15 секунд (13.08.2009 - 23:56) de facto написал(а):
Цитата (waldicom @ 13.08.2009 - 20:40)
В
PHP
$_FILES["fufel"]["name"]

что хранится? Расширение файла или его имя? И что точно делает функция in_array() ?

Вместо copy() лучше использовать move_uploaded_file()

хранится имя файла с расширением

in_array проверить присутствует ли в массиве значение

Спустя 2 минуты, 55 секунд (13.08.2009 - 23:59) waldicom написал(а):
Цитата (de facto @ 13.08.2009 - 22:56)
Цитата (waldicom @ 13.08.2009 - 20:40)
В
PHP
$_FILES["fufel"]["name"]

что хранится? Расширение файла или его имя? И что точно делает функция in_array() ?

Вместо copy() лучше использовать move_uploaded_file()

хранится имя файла с расширением

in_array проверить присутствует ли в массиве значение

Все верно, хранится имя файла с расширением!
А в массиве $ext у тебя хранятся только расширения. Поэтому и не работает. А вообще вон тебе код уже на блюдечке преподнесли.

Спустя 11 минут, 7 секунд (14.08.2009 - 00:10) de facto написал(а):
извените, но немного непонятно в коде знаки "?" и ":" sad.gif

раскажите или отправте в гугл или на пост форума

Спустя 3 минуты, 8 секунд (14.08.2009 - 00:13) kirik написал(а):

Спустя 22 минуты, 7 секунд (14.08.2009 - 00:35) PandoraBox2007 написал(а):
Цитата (de facto @ 13.08.2009 - 23:10)
извените, но немного непонятно в коде знаки "?" и ":" sad.gif

это условие True/False тоже самое и тут только одной строкой обязательно должна передавать правду и ложь

чуть поправил
PHP
"c:/fignya/$file_hash.$file_type"


не оттуда расширение тащил smile.gif

Спустя 9 минут, 30 секунд (14.08.2009 - 00:44) de facto написал(а):
скопировал код, проверил - результат тот же "пустой экран и пустой каталог назначения=("

Спустя 2 минуты, 3 секунды (14.08.2009 - 00:46) PandoraBox2007 написал(а):
PHP
define("DIR_PIC"'c:\fignya');

if (!empty(
$_POST["fufel"]))
{
 
$file_type substr($_FILES["fufel"]["name"], strrpos($_FILES["fufel"]["name"], ".")+1);
 
 
$ext = array("gif","txt","jpg");
 if(
in_array($file_type$ext))
 {
  
$file_hash md5_file($_FILES["fufel"]["tmp_name"]);
  
$error_move move_uploaded_file($_FILES["fufel"]["tmp_name"], DIR_PIC '\\' $file_hash $file_type);
  echo (!
$error_move) ? 'Все окей' 'Ошибка перемещения файла';
 } else {
   echo 
'Лажа';
 }
}

Спустя 9 часов, 33 минуты, 17 секунд (14.08.2009 - 10:20) Daff написал(а):
Могу предложить такой вариант (проверка расширения файла осуществляется с помощью регулярного выражения)

PHP
$updir="c:/fignya/";  
if (
is_uploaded_file($fufel))
{
  if (!
ereg("gif$|txt$|jpg$",$fufel_name))
  {
  echo 
"<p>Лажа!<br>
  <input name='back' type='button' value='Вернуться назад' onclick='jаvаscript:self.back();'></p>"
;
  }
  else
  {
  
$dest=$updir.$fufel;
  if (
move_uploaded_file($fufel$dest)) 
     {echo 
"<p>Все окей</p>";}
  else
     {echo 
"<p>Файл не закачан!</p>";}
  }
}

Спустя 15 минут, 48 секунд (14.08.2009 - 10:36) waldicom написал(а):
Цитата (Daff @ 14.08.2009 - 09:20)
Могу предложить такой вариант (проверка расширения файла осуществляется с помощью регулярного выражения)

А такой файл загрузится: picturejpg ?

Спустя 1 час, 4 минуты, 32 секунды (14.08.2009 - 11:40) Daff написал(а):
Цитата
А такой файл загрузится: picturejpg ?

Загрузится, если его расширение удовлетворяет допустимым.

Спустя 2 часа, 1 минута, 34 секунды (14.08.2009 - 13:42) olgatcpip написал(а):
PHP
$gImageTypes = array ('image/pjpeg''image/jpeg''image/gif');
if (!
in_array($_FILES['fufel']['type'], $gImageTypes))
        {
            
$error.='<br />Ошибка! Добавляемые изображения должны быть картинками (.jpeg, .gif).';
        }
я так проверяю тип файла.

Спустя 2 часа, 1 минута, 40 секунд (14.08.2009 - 15:43) twin написал(а):
Немного не верно. Дело в том, что разные браузеры по разному передают mime.
Вот самый простой вариант:
PHP
$types = array('.gif','.jpg','.jpeg','.png');
    
        $type 
= strrchr($_FILES['fufel']['name'], ".");
        $type = mb_strtolower($type);
        
            if
(in_array($type, $types))
            (

а вообще можно считать несколько первых байтов и по ним точнее определить. Еще точнее по размерам. У картинок есть ширина и высота.

Спустя 13 часов, 23 минуты, 31 секунда (15.08.2009 - 05:07) PandoraBox2007 написал(а):
twin дело говорит mime это уязвимость подменяем его и получаем заливку шелла так как расширение не проверяется и структура файла тоже
Быстрый ответ:

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