Задать вопрос
@Stockmg

Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/ при переходе на PHP 7.2?

Есть код загрузчика фалов(картинок) на сервер:

if(isset($_FILES)) {
		$allowedTypes = array('image/jpeg','image/png','image/gif','image/bmp','image/svg+xml','image/tiff');
		$uploadDir = "templates/universal/images/banners/"; //Директория загрузки. Если она не существует, обработчик не сможет загрузить файлы и выдаст ошибку
		for($i = 0; $i < count($_FILES['file']['name']); $i++)		{ //Перебираем загруженные файлы	
		$uploadFile[$i] = $uploadDir . basename($_FILES['file']['name'][$i]);
		$fileChecked[$i] = false;
		echo $_FILES['file']['name'][$i]." | ".$_FILES['file']['type'][$i]." — ";
		for($j = 0; $j < count($allowedTypes); $j++) { //Проверяем на соответствие допустимым форматам
		if($_FILES['file']['type'][$i] == $allowedTypes[$j]) {
		$fileChecked[$i] = true;
		break;
}
}
		if($fileChecked[$i]) { //Если формат допустим, перемещаем файл по указанному адресу
			if(move_uploaded_file($_FILES['file']['tmp_name'][$i], $uploadFile[$i])) {
				echo "<span class='badge alertgreeen-warning c-20'>Успешно загружен.</span>";
					} else {
				echo "Ошибка ".$_FILES['file']['error'][$i]."<br>";
}
			} else {
			echo "<span class='badge badge alert-danger c-20'>Недопустимый формат </span>";
}
}
			} else {
			echo "<span class='badge badge alert-danger c-20'>Вы не прислали файл!</span>" ;
}

На openserver проверил все работает, но когда заливаю на сайт там стоит php 7.2 вылазит ошибка

Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/
  • Вопрос задан
  • 88 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
@runapa
Скорее всего проблема в том, что вы пытаетесь посчитать пустой массив.
Добавьте проверку в начало скрипта:

if(isset($_FILES) && !empty($_FILES)) {
 // some code here
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
thewind
@thewind
php программист, front / backend developer
Этот скрипт рассчитан на загрузку нескольких файлов одновременно с именами вида ‘file[]’
Тогда count отработает, потому что в виде значения под ключом name будет нумерованный массив. Если вы заливаете один файл и форма сделана так, что передается один файл, а не массив, то вот и ошибка. Покажите код формы html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы