Поле $ _FILES 'tmp_name' не имеет значения для расширения файла .JPG

Я делал сценарий загрузки, когда я тестировал файл с этим расширением .JPG, я не знаю, в чем разница между jpg или jpeg, но кажется, что $ _FILES не распознают этот тип файла.

Я прочитал несколько потоков, которые $ _FILES не настолько надежны, когда речь заходит о типе mime, поэтому я решил использовать функцию mime типа php mime_content_type() , php's getimagesize() , pathinfo() , хотя pathinfo возвращает имя файла и тип, но мне нужен путь к файлу, который НЕ присутствует, все функции передаются с параметрами $ _FILES ['file'] ['tmp_name'] в качестве параметров.

Так что эта проблема возникла, когда я решил загрузить файл изображения, например sample.JPG, я думаю, что большинство из этих файлов являются исходными с камеры <- это то, что я думаю, хотя, но тем не менее важно то, что я могу их загрузить. JPG, .jpg, jpeg, .png. все они отлично работают, за исключением .JPG.

Основная проблема заключается в том, что поле ['tmp_name'] в $ _FILES не имеет значений при загрузке .JPG.

Любой из вас, ребята, столкнувшиеся с этой проблемой, поделитесь своим обходным путем или «как вы это делали».

Если $_FILES[$field]['tmp_name'] пуст, файл не был загружен. Вы должны посмотреть на $_FILES[$field]['error'] чтобы узнать, почему.

FWIW, и, насколько я понимаю, тип mime в $_FILES[] предоставляется браузером.

Обновление : вот немного загруженного кода для обработки всех ошибок при загрузке файлов:

  $message = 'Error uploading file'; switch( $_FILES['newfile']['error'] ) { case UPLOAD_ERR_OK: $message = false;; break; case UPLOAD_ERR_INI_SIZE: case UPLOAD_ERR_FORM_SIZE: $message .= ' - file too large (limit of '.get_max_upload().' bytes).'; break; case UPLOAD_ERR_PARTIAL: $message .= ' - file upload was not completed.'; break; case UPLOAD_ERR_NO_FILE: $message .= ' - zero-length file uploaded.'; break; default: $message .= ' - internal error #'.$_FILES['newfile']['error']; break; } if( !$message ) { if( !is_uploaded_file($_FILES['newfile']['tmp_name']) ) { $message = 'Error uploading file - unknown error.'; } else { // Let's see if we can move the file... $dest .= '/'.$this_file; if( !move_uploaded_file($_FILES['newfile']['tmp_name'], $dest) ) { // No error supporession so we can see the underlying error. $message = 'Error uploading file - could not save upload (this will probably be a permissions problem in '.$dest.')'; } else { $message = 'File uploaded okay.'; } } } 

Проверьте ваш php.ini и, в частности, этот параметр

 ; Maximum allowed size for uploaded files. ; http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize upload_max_filesize = 6M 

Или сделайте это в своем Apache Config:

 <Directory "/var/www/vhosts/path/to/your/directory/import/"> php_value post_max_size 6M php_value upload_max_filesize 6M </Directory> 

Я бы также сказал, что плохо, что PHP не сообщает об ошибке в журналах ошибок, если вы загружаете файл, размер которого превышает настройку php.ini upload_max_filesize . Например, если вы загружаете 6 МБ-файл, когда он установлен на 2M (что я считаю по умолчанию).

Отправка ответа, потому что мой рейтинг слишком низок.

Не забудьте перезагрузить сервер после установки максимального размера файла в вашем php.ini. Я потратил несколько часов на эту проблему, думая, что это не проблема с размером файла, а я забыл перезапустить. После перезагрузки все сработало.

Надеюсь, это поможет кому-то.

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

Моя проблема заключалась в том, что у моей формы был скрытый ввод MAX_FILE_SIZE, который имеет некоторое значение меньше, чем эквивалентные байты файла.

Ваша форма должна иметь это;

Кроме этого, ваш тег формы должен включать enctype = "multipart / form-data"

Я искал, что максимальный размер файла был в kb, но он находится в байтах, благодаря некоторой другой странице в stackoverflow.

Другая причина, которая может вызвать эту проблему, – ваши настройки php.ini, о которых люди упоминали в предыдущих комментариях. Вы также можете post_max_size = 200M в файл php.ini.

Если вы работаете в Windows, как я, вы можете увидеть файл дампа, который показывает ошибки в C: \ Windows \ Temp, называемые «php ** VERSION ** _ errors.log». Помогает.

Я столкнулся с проблемой с полем $ _FILES 'tmp_name', не имеющим значения для расширения файла .JPG и успешно исправил его за несколько шагов. Эти меры могут помочь кому-то в будущем.

  1. Прежде всего, я реализовал решение Switch Case, предлагаемое пользователем «staticsan». Ссылка здесь – https://stackoverflow.com/a/14472801/3681985 . Это решение помогло мне отслеживать потенциальные проблемы, такие как параметры в файлах php.ini и папках.
  2. Файл php.ini был назван php.ini.default. Изменение параметров upload_max_filesize и post_max_size не дало результата, пока я не переименовал файл в php.ini. Не забудьте поэкспериментировать с значениями параметров.
  3. После исправления проблемы с именем файла я столкнулся с проблемой с правами доступа к папке, в которой должно быть перемещено загруженное временное изображение. Я изменил разрешения и смог увидеть изображение, загруженное в папку.

Просто попробуйте это и посмотрите, что произойдет,

 if (($_FILES['file']['type']) == "image/jpg" || ($_FILES['file']['type']) == "image/jpeg") { //do uploading stuff here }else{ echo 'File is not a valid JPG,JPEG'; } 

Кажется, что это случайная проблема, потому что, пока я делал сценарий для загрузки CSV-файлов, некоторые файлы CSV не имели бы проблем с загрузкой, но в других случаях $_FILES['file'][tmp_name] был бы пустым.