Доброго времени суток! Что-то с проверкой не выходит никак... Массив Код (Text): $types = array('image/gif', 'image/png', 'image/jpeg'); Далее код uploade Код (Text): <?php require ('functions.php'); // Массив допустимых значений типа файла $tmp_path = 'tmp/'; $img = $_FILES['file']; $path = 'images/'; $types = array('image/gif', 'image/png', 'image/jpeg'); $size = 11024000; $img_desc = reArrayFiles($img); //$_FILES['file']['name'] = uniqid("file_").".jpg"; if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Проверяем тип файла if (!in_array($_FILES['file']['type'], $types)) print_r($_FILES); foreach($img_desc as $val) { die('<p>Запрещённый тип файла. <a href="?">Попробовать другой файл?</a></p>'); print_r($_FILES); // Проверяем размер файла if ($_FILES['file']['size'] > $size) die('<p>Слишком большой размер файла. <a href="?">Попробовать другой файл?</a></p>'); $img = $_FILES['file']; print_r($img_desc); $name = resize($_FILES['file'], $_POST['file_type'], $_POST['file_rotate']); // Загрузка файла и вывод сообщения } if(isset($_POST['file'])){ foreach ($_FILES['file']['name'] as $key => $val) { echo $val."<br>"; } } if(!empty($img)) { $img_desc = reArrayFiles($img); print_r($img_desc); foreach($img_desc as $val) { //$newname = date('YmdHis',time()).mt_rand().'.jpg'; copy($val . $tmp_path . $name, $path . $name ); //move_uploaded_file($val['tmp_name'],'./uploads/'.$newname); } } } ?> Результат : Код (Text): 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 ) ) ) Запрещённый тип файла. Попробовать другой файл?
@daur проведи отладку отладка/debug http://phpfaq.ru/debug https://netbeans.org/kb/docs/php/debugging_ru.html https://php.ru/forum/threads/howto-...i-po-shagam-i-s-kartinkami.58974/#post-474550
Я думаю проблема в отсутствии фигурных скобок у if(). Ты думаешь, что условие распостраняется на оператор die, а реально нет, только на одну команду после if(). Фигурные скобки надо ставить всегда, чтобы не обманывать себя.
Попробовал сделать так : Код (Text): <?php require 'functions.php'; $path = 'images/'; //Путь до папки $types = array('image/gif', 'image/png', 'image/jpeg'); //типы echo '<pre>'; $img = $_FILES['img']; if(!empty($img)) { $img_desc = reArrayFiles($img); if(!in_array($img,$types)) { die('Данный тип файла фотографий не поддерживается. Вернитесь назад и выберите фотографию с друугим разрешением .jpeg, .gif или .png '); } else { foreach($img_desc as $val) { $newname = date('YmdHis',time()).mt_rand().'.jpg'; copy($val['tmp_name'], $path .$newname); print_r($types); } } } не помогло --- Добавлено --- --- Добавлено --- Код (Text): Array ( [0] => image/jpeg ) Данный тип файла фотографий не поддерживается. Вернитесь назад и выберите фотографию с друугим разрешением .jpeg, .gif или .png Что-то мне непонятно....
ну так дебажь! что там у тебя в нужной переменной в нужный момент? http://phpfaq.ru/debug --- Добавлено --- везёт тому, кто сам везёт. старайся лучше.
Не помогло Код (Text): <?php require 'functions.php'; $path = 'images/'; //Путь до папки $types = array('image/gif', 'image/png', 'image/jpeg'); //типы echo '<pre>'; $img = $_FILES['img']; $type = $img['type']; var_dump($types, $type); if(!in_array($_FILES['img']['type'],$types)){ print_r($type); die('Данный тип файла фотографий не поддерживается. Вернитесь назад и выберите фотографию с друугим разрешением .jpeg, .gif или .png '); } if(!empty($img)) { $img_desc = reArrayFiles($img); foreach($img_desc as $val) { print_r($type); $newname = date('YmdHis',time()).mt_rand().'.jpg'; copy($val['tmp_name'], $path .$newname .$types); print_r($types); } } Код (Text): C:\Program Files\VertrigoServ\www\upload.php:8: array (size=3) 0 => string 'image/gif' (length=9) 1 => string 'image/png' (length=9) 2 => string 'image/jpeg' (length=10) C:\Program Files\VertrigoServ\www\upload.php:8: array (size=1) 0 => string 'image/jpeg' (length=10) Array ( [0] => image/jpeg ) Данный тип файла фотографий не поддерживается. Вернитесь назад и выберите фотографию с друугим разрешением .jpeg, .gif или .png
Ну так ничего не поменялось и опять в in_array первым аргументом массив. Искомая строка находится в $_FILES['img']['type'][0].
В документации написано:Также вы можете использовать переменную$_FILES['userfile']['type']для исключения файлов, которые не удовлетворяют критерию касательно типа файла, однако, принимайте во внимание, что это поле полностью контролируется клиентом, используйте его только в качестве первой из серии проверок. Проверьте через var_dump что у вас приходит в $_FILES['img']['type']
проблема решена Код (Text): if(empty(array_intersect($types, $type)){ print_r($type); die('Данный тип файла фотографий не поддерживается. Вернитесь назад и выберите фотографию с друугим разрешением .jpeg, .gif или .png '); }