За последние 24 часа нас посетили 55344 программиста и 1725 роботов. Сейчас ищут 856 программистов ...

помогите с $_FILES

Тема в разделе "PHP для новичков", создана пользователем kit, 11 фев 2009.

  1. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Надо загрузить фото только jpeg или gif размером не более 500 кб, пишу:
    PHP:
    1.  
    2. if ($_FILES['foto']["size"]>1) //проверяю есть ли фото
    3. {
    4.     if ($_FILES['foto']["type"]=='image/pjpeg' || $_FILES['foto']["type"]=='image/gif') //проверяю тип
    5.     {
    6.     }
    7.     else
    8.     {
    9.         echo "<b>&nbsp;Ошибка загрузки фото!</b></br>&nbsp;Вы пытаетесь загрузить файл формата <b>".$_FILES['foto']["type"]."</b>. Загружаемый файл должен быть в формате .jpeg или .gif!<b></br>";
    10.     }
    11.     if ($_FILES['foto']["size"]>1024*500)//проверяю размер
    12.     {
    13.         $size=round($_FILES['foto']["size"]/1024);
    14.         echo "<b>&nbsp;Ошибка загрузки фото!</b></br>&nbsp;Размер загружаемого файла ".$size." kb. Загружаемый файл должен быть размером не более 500 kb!<b></br>";
    15.     }
    16. }
    17.  
    с фотами небольшого размера вроде все работает, но стоит загрузить фоту мерта 2-3, сразу не определяет ни тип, ни вес фоты. Почему? В чем тут ошибка? И еще, в таком виде
    PHP:
    1.  
    2. if ($_FILES['foto']["size"]>1) //проверяю есть ли фото
    3. {
    4.     [b]if ($_FILES['foto']["type"]!=='image/pjpeg' || $_FILES['foto']["type"]!=='image/gif') //проверяю тип
    5.     {
    6.         echo "<b>&nbsp;Ошибка загрузки фото!</b></br>&nbsp;Вы пытаетесь загрузить файл формата <b>".$_FILES['foto']["type"]."</b>. Загружаемый файл должен быть в формате .jpeg или .gif!<b></br>";
    7.     }[/b]   if ($_FILES['foto']["size"]>1024*500)//проверяю размер
    8.     {
    9.         $size=round($_FILES['foto']["size"]/1024);
    10.         echo "<b>&nbsp;Ошибка загрузки фото!</b></br>&nbsp;Размер загружаемого файла ".$size." kb. Загружаемый файл должен быть размером не более 500 kb!<b></br>";
    11.     }
    12. }
    13.  
    даже тип не определяет. Опять не понятно почему?
     
  2. alexeurodnepr

    alexeurodnepr Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    все работает... по принципу второго... почти...

    index.php
    PHP:
    1.  
    2. <?php
    3. @$foto = $HTTP_POST_FILES['foto'];
    4. if ($foto_size>1) //проверяю есть ли фото
    5.  {
    6.      if ($foto_type != 'image/jpeg' || $foto_type != 'image/gif') //проверяю тип
    7.      {
    8.          echo "<b> Ошибка загрузки фото!</b></br> Вы пытаетесь загрузить файл формата <b>".$foto_type."</b>. Загружаемый файл должен быть в формате .jpeg или .gif!<b></br>";
    9.      } } else { echo "the first \"if\" is ok<br>"; }  
    10.      if ($foto['size']>1024*500)//проверяю размер
    11.      {
    12.          $size=round($foto['size']/1024);
    13.          echo "<b> Ошибка загрузки фото!</b></br> Размер загружаемого файла ".$size." kb. Загружаемый файл должен быть размером не более 500 kb!<b></br>";
    14.      } else { echo "the second \"if\" is ok<br>"; }
    15.    
    16.  
    17. ?>
    18.  
    19. <form action="index.php" method="POST" enctype="multipart/form-data">
    20. <input type="file" name="foto">
    21. <input type="submit" name="sumbit" value="Upload">
    22. </form>
    23.  
    24.  
     
  3. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Вставил этот код, он у меня не работает так же как и мой код.
    PHP:
    1. if ($foto_size>1) //проверяю есть ли фото
    Он сразу говорит: нет у тебя никакой фоты, т.е. размер не определяется больших фот.
    Что за переменная $HTTP_POST_FILES? Насколько я понял переменные такого типа использовались в ранних версиях ПХП и на смену ей пришла переменная $_FILES? Если это так, разницы в коде нет. Если ошибаюсь, то подскажите где прочесть про $HTTP_POST_FILES. Может у меня в php.ini надо какую точказапятую убрать, а?
    И что это за собака (@) перед $foto ?
     
  4. Вот ее надо убрать.
     
  5. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Что самое интересное, что имя файла $_FILES['foto']["name"] определяет четко, вне зависимости от размера и типа, а остальные параметры определяются только у небольших файлов. Ничего не понимаю! Почему так? У кого-нибудь есть чего-нибудь ядовитое?
     
  6. alexeurodnepr

    alexeurodnepr Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    псину я поставил для себя... можешь удалить её...
    не знаю у меня грузит любой размер файла... все ок...
     
  7. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    убрал, сделал
    PHP:
    1. echo $foto_size." - ".$foto_type." - ".$foto['size']." - ";
    пишетчто ничего не видит! нет значений этих переменных! И еще вопрос почему в одном варианте $foto_size, а в другом $foto['size'] ?
     
  8. alexeurodnepr

    alexeurodnepr Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    то я проверял, так и так, забыл оставить в однотипном варианте
     
  9. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    у маленького файла определяет только $foto['size']=10043, у большого (в 2 мега) $foto['size']=0. Остальные вышеперечисленные переменные не видит.
     
  10. alexeurodnepr

    alexeurodnepr Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    посмотри чё у тя тут стоит post_max_size, upload_max_filesize в php.ini
     
  11. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    post_max_size = 8M
    upload_max_filesize = 2M, блин понял! Никак не запомню надо комп или только апач перегрузить?
     
  12. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    НЕ РАБОТАЕТ!!! Тип не определяется.
    alexeurodnepr делаю листинг массива print_r ($HTTP_POST_FILES['foto']);
    Array ( [name] => kitoboy.jpg [type] => image/pjpeg [tmp_name] => C:\Windows\Temp\phpD467.tmp [error] => 0 [size] => 2556 )
    А результат таклй:
    Ошибка загрузки фото!
    Вы пытаетесь загрузить файл формата image/pjpeg. Загружаемый файл должен быть в формате .jpeg или .gif!
    Что за фигня такая? Вроде image/pjpeg и там и там одинаково пишется!
     
  13. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    IE отсылает image/pjpeg для jpeg'ов. Не проверяй mime.
     
  14. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    а можно чуть поразвернутей ответ, плиз. А то тут все-таки "Программирование на PHP для новичков" :roll:
     
  15. alexeurodnepr

    alexeurodnepr Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    1. ребут апатча достаточно
    2. он говорит, что проверку не нужно делать такую как мы делали
    PHP:
    1.  
    2. <?php
    3.  if ($foto_type != 'image/jpeg' || $foto_type != 'image/gif')
    4.  
    вот пример, пробуй так проверять на тип файла
    PHP:
    1.  
    2. <?php
    3. $ext = array(".gif",".jpg");
    4. if(in_array(strrchr($_FILES['foto']['name'], ".")),$ext))
    5. {
    6.     ...
    7. } else {
    8. echo "У вас не соответствующий формат ";
    9. }
    10.  
     
  16. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    вроде победил с помощью preg_match

    PHP:
    1.  
    2. <?
    3. $foto = $HTTP_POST_FILES['foto'];
    4. $type_foto1=preg_match('<image/pjpeg>', $HTTP_POST_FILES['foto']["type"]);
    5. $type_foto2=preg_match('<image/gif>', $HTTP_POST_FILES['foto']["type"]);
    6. $type_foto3=preg_match('<image/jpeg>', $HTTP_POST_FILES['foto']["type"]);
    7.  
    8. if ($foto['name']) //проверяю есть ли фото
    9. {
    10.      if ($foto['size']>1024*500 || $foto['size']==0)//проверяю размер
    11.      {
    12.          echo "<b> Ошибка загрузки фото!</b></br> Размер загружаемого файла больше 500kb. Загружаемый файл должен быть размером не более 500 kb!<b></br>";
    13.                 $mest=$mest+1;
    14.      }
    15.      else
    16.     {
    17.         if ($type_foto1==1 || $type_foto2==1 || $type_foto3==1) //проверяю тип
    18.         {
    19.         }
    20.         else
    21.         {
    22.              echo "<b> Ошибка загрузки фото!</b></br> Вы пытаетесь загрузить файл формата <b>".$foto['type']."</b>. Загружаемый файл должен быть в формате .jpeg или .gif!<b></br>";
    23.                 $mest=$mest+1;
    24.         }
    25.     }
    26. }
    27. ?>
    Пока все работает без проблем. Всем спасибо!!!
     
  17. alexeurodnepr

    alexeurodnepr Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    люди говорят применять регуляр только при необходимости т.к. он долго соображает... имхо мой пример лучше :)