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

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

http://www.w3schools.com/php/php_file_upload.asp

I installed this script on MYDOMAIN.com/New.html






Filename:
<br>





А затем я поместил этот фрагмент на MYDOMAIN.com/upload_file.php


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

 MrCode20 нояб. 2012 г., 10:56
показать результатprint_r($_FILES);
 Botond Balázs20 нояб. 2012 г., 10:55
Пожалуйста, не используйте w3schools:w3fools.com
 asprin20 нояб. 2012 г., 10:53
я предполагаю, что выне загружайте файл изображения или размер загружаемого файла превышает 20000 байт

Ответы на вопрос(6)

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

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

$oldpath = $_FILES['image']['tmp_name'];
$newpath ="new_folder_location/".$_FILES['image']['name'];
move_uploaded_file($oldpath, $newpath);
 GaurabDahal20 нояб. 2012 г., 10:59
что такое печать var_dump ($ _ FILES) ?;

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

$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;
}
Решение Вопроса

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

Однако, чтобы переместить файл в папку, вам все равно нужно использовать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
    }
}
 Blank EDjok25 дек. 2013 г., 12:07
Лол извини я нене вижу, это была просто опечатка. :)
 Blank EDjok23 дек. 2013 г., 14:25
Когда вы взорвали файл для расширения, вы забыли, что результат возвращается в массиве, первым индексом которого в этом случае является "имя файла" и второй индекс "расширение файла"так что вместоif (in_array ($ ext. $ allow)) " я изменил это на "if (in_array ($ ext [1]. $ allow))
 Ivo24 дек. 2013 г., 11:20
Спасибо @BlankEDjok за указание на это, хотя вывсе еще не совсем правы! Вы не должны объединять параметры внутриin_array; это будет бессмысленно! Использование последнего сегмента имени файла правильно, и я исправил это;)

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

(($_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);

Ваш проверочный код проверяет расширение, тип 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);
 bush man20 нояб. 2012 г., 11:16
не могу согласиться, больше я не могуЯ вообще ничего не понимаю, и они не помогают 1 бит.
 Botond Balázs20 нояб. 2012 г., 11:07
+1 заstrtolower(), Это просто показывает, насколько плохи уроки на w3schools.

Я бы сказал, что проблема в том, что, если много условий там (также "файл поврежден" Еще одна часть этого, если), попробуйте упростить его, чтобы отследить проблему, на первый взгляд, я бы сказал, «s из-за проверки размера:

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

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

 bush man20 нояб. 2012 г., 11:07
Хм, на первый взгляд, это, кажется, исправляет это, но дает мне файл tmp home / content / 34/9587634 / tmp / phpSrWuFu Ведьма - это круто, но потом я смотрю в свой каталог и там ничего нет ???
 aleation20 нояб. 2012 г., 11:13
тебе нужен последний шаг,php.net/manual/es/function.move-uploaded-file.phpКогда вы загружаете файл, он всегда сначала сохраняется в каталоге tmp, затем вы используете эту функцию, чтобы переместить его в нужный каталог. Это стандартная процедура. Может быть это'Если вы пропустили последний шаг в учебнике или попробуйте другой, чтобы увидеть этот последний шаг, то их множество.

Ваш ответ на вопрос