Php загружает изображение в каталог

Я экспериментировал с возможностью загрузки php, я смотрел этот учебник по w3school.

http://www.w3schools.com/php/php_file_upload.asp I installed this script on MYDOMAIN.com/New.html <html> <body> <form action="upload_file.php" method="post" enctype="multipart/form-data"> <label for="file">Filename:</label> <input type="file" name="file" id="file"><br> <input type="submit" name="submit" value="Submit"> </form> </body> </html> 

И затем я помещаю этот фрагмент на MYDOMAIN.com/upload_file.php

 <?php $allowedExts = array("jpg", "jpeg", "gif", "png"); $extension = end(explode(".", $_FILES["file"]["name"])); if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 20000) && in_array($extension, $allowedExts)) { if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"] . "<br>"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br>"; echo "Type: " . $_FILES["file"]["type"] . "<br>"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>"; echo "Stored in: " . $_FILES["file"]["tmp_name"]; } } else { echo "Invalid file"; } ?> 

Теперь есть очень высокая вероятность того, что я просто очень запутанный человек, но я предполагаю, что это должно быть сделано, это взять файл, который я поместил в файл New.html, и если это файл с изображениями, загрузите его в мой каталог, просто вывод неверного файла Im не уверен, что делать с помощью большой надежды, чтобы услышать в ближайшее время спасибо

Проблема вашего скрипта заключается в том, что вы, вероятно, пытаетесь загрузить файл выше вашего предела! Вы указали очень низкий максимальный размер файла! Распечатайте свой $ _FILES var, чтобы получить информацию о том, что не так;)

Однако, чтобы переместить файл в вашу папку, вам все равно нужно использовать move_uploaded_file :

 $allow = array("jpg", "jpeg", "gif", "png"); $todir = 'uploads/'; if ( !!$_FILES['file']['tmp_name'] ) // is the file uploaded yet? { $info = explode('.', strtolower( $_FILES['file']['name']) ); // whats the extension of the file if ( in_array( end($info), $allow) ) // is this file allowed { if ( move_uploaded_file( $_FILES['file']['tmp_name'], $todir . basename($_FILES['file']['name'] ) ) ) { // the file has been moved correctly } } else { // error this file ext is not allowed } } 

лучший способ загрузить изображения, я думаю, будет копировать изображение и хранить его внутри папки, а затем сохранять новое местоположение изображения в базу данных.

для перемещения файла мы можем использовать функцию move_uploaded_file

 $oldpath = $_FILES['image']['tmp_name']; $newpath ="new_folder_location/".$_FILES['image']['name']; move_uploaded_file($oldpath, $newpath); 

Ваш код проверки проверяет расширение, тип mime и размер файла.

Возможно, вы загрузили файл с прописными буквами в расширении. Когда вы проверяете расширение, вы проверяете его чувствительность к регистру, .JPG является допустимым расширением файла изображения, поэтому вы должны сделать свой регистр нечувствительным:

 if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 20000) && in_array(strtolower($extension), $allowedExts)) // ^ added strtolower() 

Если это не проблема, тогда файл слишком велик или имеет неправильный тип mime. Чтобы отладить, просмотрите массив файлов с помощью:

 print_r($_FILES); 

Я бы сказал, что проблема в том, что If, там много условий (также «недопустимый файл» – это Else часть этого if), попробуйте упростить его для отслеживания проблемы, на первый взгляд, я бы сказал, что это из-за размера проверка:

 && ($_FILES["file"]["size"] < 20000) 

это около 20 КБ, довольно мало для изображения, если вы загружаете фотографию, пытаетесь установить более высокое значение или вынести это условие и посмотреть, работает ли скрипт

Это происходит потому, что следующее выражение оценивается как false:

 (($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 20000) && in_array($extension, $allowedExts) 

Это означает, что либо

  • Тип файла неверен (это не файл GIF / JPEG / PNG / PNJPEG)
  • Файл больше 20000 байт
  • Расширение файла неверно (это не любые «jpg», «jpeg», «gif», «png»)

Мое предположение было бы размером файла – резко увеличить его. Измените его на следующие, чтобы разрешить размеры до 10 МБ:

 && ($_FILES["file"]["size"] < 10485760) 

Лучший способ увидеть проблему – добавить эту строку в начало вашего скрипта:

 var_dump($_FILES); 

Я согласен с ответом Иво, но я думаю, что вы можете изменить следующую часть кода следующим образом:

 $typePicture = array('jpg','png','jpeg','gif'); // Allow certain file formats if($typePicture[0] != "jpg" || $typePicture[1] != "png" || $typePicture[2] != "jpeg" || $typePicture[3] != "gif" ) { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $uploadOk = 0; }