За последние 24 часа нас посетили 35237 программистов и 1742 робота. Сейчас ищут 1023 программиста ...

Подскажите в чем ошибка

Тема в разделе "PHP для новичков", создана пользователем daur, 16 июн 2017.

  1. daur

    daur Новичок

    С нами с:
    13 июн 2017
    Сообщения:
    37
    Симпатии:
    7
    Доброго времени суток!
    Что-то с проверкой не выходит никак...
    Массив

    Код (Text):
    1. $types = array('image/gif', 'image/png', 'image/jpeg');
    Далее код uploade
    Код (Text):
    1.  
    2.  
    3. <?php
    4.  
    5.   require ('functions.php');
    6. // Массив допустимых значений типа файла
    7. $tmp_path = 'tmp/';
    8. $img = $_FILES['file'];
    9. $path = 'images/';
    10. $types = array('image/gif', 'image/png', 'image/jpeg');
    11. $size = 11024000;
    12. $img_desc = reArrayFiles($img);
    13. //$_FILES['file']['name'] = uniqid("file_").".jpg";
    14.  
    15.  
    16.  
    17. if ($_SERVER['REQUEST_METHOD'] == 'POST')
    18. {
    19.  
    20.   // Проверяем тип файла
    21.   if (!in_array($_FILES['file']['type'], $types))
    22.     print_r($_FILES);
    23.  
    24.   foreach($img_desc as $val)
    25.     {
    26.            
    27.     die('<p>Запрещённый тип файла. <a href="?">Попробовать другой файл?</a></p>');
    28. print_r($_FILES);
    29.   // Проверяем размер файла
    30.   if ($_FILES['file']['size'] > $size)
    31.     die('<p>Слишком большой размер файла. <a href="?">Попробовать другой файл?</a></p>');
    32.      $img = $_FILES['file'];
    33.      
    34. print_r($img_desc);
    35.  
    36.   $name = resize($_FILES['file'], $_POST['file_type'], $_POST['file_rotate']);
    37.  
    38.   // Загрузка файла и вывод сообщения
    39.  
    40. }
    41. if(isset($_POST['file'])){
    42.     foreach ($_FILES['file']['name'] as $key => $val) {
    43.         echo $val."<br>";
    44.     }
    45. }
    46.  
    47. if(!empty($img))
    48. {
    49.     $img_desc = reArrayFiles($img);
    50.     print_r($img_desc);
    51.    
    52.     foreach($img_desc as $val)
    53.     {
    54.       //$newname = date('YmdHis',time()).mt_rand().'.jpg';
    55.        copy($val . $tmp_path . $name, $path . $name );
    56.         //move_uploaded_file($val['tmp_name'],'./uploads/'.$newname);
    57.     }
    58. }
    59.  
    60.  
    61.   }
    62.  
    63.  
    64.  
    65. ?>
    Результат :

    Код (Text):
    1. Array ( [file] => Array ( [name] => Array ( [0] => original-e02afae08e9fe72f19fe250312599c6e.jpg ) [type] => Array ( [0] => image/jpeg ) [tmp_name] => Array ( [0] => C:\Program Files\VertrigoServ\www\tmp\phpF9BD.tmp ) [error] => Array ( [0] => 0 ) [size] => Array ( [0] => 241088 ) ) )
    2. Запрещённый тип файла. Попробовать другой файл?
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    после 27 строки сценарий скрипта завершается. Причина: die / exit
     
  3. daur

    daur Новичок

    С нами с:
    13 июн 2017
    Сообщения:
    37
    Симпатии:
    7
    Так там же условие при котором идёт die
     
  4. gruth

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

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    а в чем проблема тогда?
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Я думаю проблема в отсутствии фигурных скобок у if(). Ты думаешь, что условие распостраняется на оператор die, а реально нет, только на одну команду после if().

    Фигурные скобки надо ставить всегда, чтобы не обманывать себя.
     
  7. daur

    daur Новичок

    С нами с:
    13 июн 2017
    Сообщения:
    37
    Симпатии:
    7
    не помогло
     
  8. daur

    daur Новичок

    С нами с:
    13 июн 2017
    Сообщения:
    37
    Симпатии:
    7
    Попробовал сделать так :
    Код (Text):
    1.  
    2.  
    3.  
    4.  
    5.  
    6.  
    7. <?php
    8. require 'functions.php';
    9. $path = 'images/'; //Путь до папки
    10. $types = array('image/gif', 'image/png', 'image/jpeg'); //типы
    11. echo '<pre>';
    12. $img = $_FILES['img'];
    13.  
    14.  
    15. if(!empty($img))
    16. {
    17.     $img_desc = reArrayFiles($img);
    18.  
    19.     if(!in_array($img,$types))
    20.     {
    21.     die('Данный тип файла фотографий не поддерживается. Вернитесь назад и выберите фотографию с друугим разрешением .jpeg, .gif или .png ');
    22.     }
    23.     else
    24.     {
    25.     foreach($img_desc as $val)
    26.     {
    27.  
    28.  
    29.         $newname = date('YmdHis',time()).mt_rand().'.jpg';
    30.  
    31.  
    32.     copy($val['tmp_name'], $path .$newname);
    33.     print_r($types);
    34.     }
    35. }
    36.  
    37.    }
    не помогло :(

    --- Добавлено ---
    --- Добавлено ---
    Код (Text):
    1. Array
    2. (
    3.     [0] => image/jpeg
    4. )
    5. Данный тип файла фотографий не поддерживается. Вернитесь назад и выберите фотографию с друугим разрешением .jpeg, .gif или .png
    Что-то мне непонятно....
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    ну так дебажь! что там у тебя в нужной переменной в нужный момент?
    http://phpfaq.ru/debug
    --- Добавлено ---
    везёт тому, кто сам везёт. старайся лучше.
     
  10. Emilien

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

    С нами с:
    30 июн 2016
    Сообщения:
    246
    Симпатии:
    156

    В $img должна быть строка, а у тебя там массив.
     
  11. daur

    daur Новичок

    С нами с:
    13 июн 2017
    Сообщения:
    37
    Симпатии:
    7
    Не помогло
    Код (Text):
    1. <?php
    2. require 'functions.php';
    3. $path = 'images/'; //Путь до папки
    4. $types = array('image/gif', 'image/png', 'image/jpeg'); //типы
    5. echo '<pre>';
    6. $img = $_FILES['img'];
    7. $type = $img['type'];
    8. var_dump($types, $type);
    9.  
    10. if(!in_array($_FILES['img']['type'],$types)){
    11.    print_r($type);
    12.    die('Данный тип файла фотографий не поддерживается. Вернитесь назад и выберите фотографию с друугим разрешением .jpeg, .gif или .png ');
    13. }
    14. if(!empty($img))
    15. {
    16.     $img_desc = reArrayFiles($img);
    17.    
    18.  
    19.     foreach($img_desc as $val)
    20.     {
    21.  
    22.     print_r($type);
    23.         $newname = date('YmdHis',time()).mt_rand().'.jpg';
    24.  
    25.  
    26.     copy($val['tmp_name'], $path .$newname .$types);
    27.     print_r($types);
    28.     }
    29. }
    30.  
    31.  
    Код (Text):
    1. C:\Program Files\VertrigoServ\www\upload.php:8:
    2. array (size=3)
    3.   0 => string 'image/gif' (length=9)
    4.   1 => string 'image/png' (length=9)
    5.   2 => string 'image/jpeg' (length=10)
    6. C:\Program Files\VertrigoServ\www\upload.php:8:
    7. array (size=1)
    8.   0 => string 'image/jpeg' (length=10)
    9. Array
    10. (
    11.     [0] => image/jpeg
    12. )
    13. Данный тип файла фотографий не поддерживается. Вернитесь назад и выберите фотографию с друугим разрешением .jpeg, .gif или .png
     
    denis01 нравится это.
  12. Emilien

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

    С нами с:
    30 июн 2016
    Сообщения:
    246
    Симпатии:
    156
    Ну так ничего не поменялось и опять в in_array первым аргументом массив.
    Искомая строка находится в $_FILES['img']['type'][0].
     
  13. umbabaraumba

    umbabaraumba Новичок

    С нами с:
    18 июн 2017
    Сообщения:
    100
    Симпатии:
    17
    В документации написано:Также вы можете использовать переменную$_FILES['userfile']['type']для исключения файлов, которые не удовлетворяют критерию касательно типа файла, однако, принимайте во внимание, что это поле полностью контролируется клиентом, используйте его только в качестве первой из серии проверок.

    Проверьте через var_dump что у вас приходит в $_FILES['img']['type']
     
  14. daur

    daur Новичок

    С нами с:
    13 июн 2017
    Сообщения:
    37
    Симпатии:
    7
    проблема решена
    Код (Text):
    1. if(empty(array_intersect($types, $type)){
    2.     print_r($type);
    3.     die('Данный тип файла фотографий не поддерживается. Вернитесь назад и выберите фотографию с друугим разрешением .jpeg, .gif или .png ');
    4. }
     
    denis01 нравится это.