Здравствуйте, уважаемые знатоки.
Никогда не думал что запнусь на таком лёгком, казалось бы, вопросе...
В форме есть input file для отправки файлов. Поле не обязательное. На другой странице мы принимаем форму и если файлов нет, то необходимо забить на это.
Однако скрипт упрямо не забивает на массив $_FILES, а пытается его раскрыть и обработать, сопровождая это ошибками. Есть ли какая-то проверка массива $_FILES или обязательно вешать на него гору проверок...
Вот код отправки:
<meta charset="utf-8">
<form action="proba2.php" method="post" enctype="multipart/form-data">
<p>Изображения:
<input type="file" name="pictures[]" multiple/>
<input type="submit" value="Отправить" />
</p>
</form>
Вот принимающий код:
<?php
echo "<strong>empty</strong><br />";
if (!empty($_FILES['pictures[]'])) { echo "есть файлы<br />"; }
else {echo "нет файлов<br />";}
echo "<strong>sizeof</strong><br />";
if (sizeof($_FILES)!=0) { echo "есть файлы<br />"; }
else {echo "нет файлов<br />";}
echo "<strong>isset</strong><br />";
if (isset($_FILES)) { echo "есть файлы<br />"; }
else {echo "нет файлов<br />";}
echo "<strong>!</strong><br />";
if(!$_FILES) {echo "нет файлов<br />";}
else {echo "есть файлы<br />";}
echo "<strong>count</strong><br />";
if(count ($_FILES['pictures']['name'])>0) {echo "есть файлы<br />";}
else {echo "нет файлов<br />";}
echo "<strong>Первая переменная</strong><br />";
if($_FILES['pictures']['name'][0]=='') {echo "нет файлов<br />";}
else {echo "есть файлы<br />";}
echo "<strong>foreach</strong><br />";
foreach ($_FILES["pictures"]["error"] as $key => $error) {
echo "Раскрыли массив</br>";
if ($error == UPLOAD_ERR_OK) {
echo "Чё то делаем с файлами<br />";
$tmp_name = $_FILES["pictures"]["tmp_name"][$key];
$name = $_FILES["pictures"]["name"][$key];
move_uploaded_file($tmp_name, "data/$name");
}
else {echo "Не трогаем файлы <br />";}
}
echo "<strong>for</strong><br />";
for ($i=0; $i<count ($_FILES['pictures']['name']); $i++) {
echo "Раскрыли массив</br>";
$filename=end(explode(".", $_FILES['pictures']['name']));
$filename = mb_strtolower($filename);
if ($filename=="jpg" or $filename=="bmp" or $filename=="jpeg" or $filename=="gif") {
echo "Чё то делаем с файлами<br />";
$tmp_name = $_FILES["pictures"]["tmp_name"][$key];
$name = $_FILES["pictures"]["name"][$key];
move_uploaded_file($tmp_name, "data/$name");
}
else {echo "Не правильное расширение .$filename. <br />";}
}
?>
Из всего этого корректно отображает информацию только проверка первой переменной, однако я до конца не уверен, что это правильное решение.
Может кто поделиться опытом???
Ну и второй вопрос для тех кому первый показался лёгким. input file загружает файлы в алфавитном порядке, а можно ему как то указать в том порядке, что нужно?