Поле $_FILES 'tmp_name' не имеет значения для расширения файла .JPG
Я делал загрузку script, когда я тестировал файл с этим расширением .JPG, я не знаю, в чем разница между jpg или jpeg, но кажется, что $_FILES не распознают этот тип файла.
Я прочитал несколько потоков, которые $_FILES не настолько надежны, когда речь заходит о типе mime, поэтому я решил использовать функцию php mime type mime_content_type()
, php getimagesize()
, pathinfo()
, хотя возвращает pathinfo имя файла и тип, но мне нужен путь к файлу, который НЕ присутствует, все функции передаются с параметрами $_FILES ['file'] ['tmp_name'] в качестве параметров.
Итак, эта проблема возникла, когда я решил загрузить файл изображения, например sample.JPG, я думаю, что большинство этих файлов являются исходными с камеры < - что я думаю, хотя, но тем не менее, что более важно, так это то, что я могут загрузить их .JPG,.jpg, jpeg,.png. все они отлично работают, за исключением .JPG.
Основная проблема заключается в том, что поле ['tmp_name'] в $_FILES не имеет значений при загрузке .JPG.
Любой из вас, ребята, столкнувшиеся с этой проблемой, поделитесь своим обходным путем или "как вы это сделали".
Ответы
Ответ 1
Если $_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 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.';
}
}
}
Ответ 2
Проверьте 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
(который, по моему мнению, является значением по умолчанию).
Ответ 3
Отправка ответа, потому что мой рейтинг слишком низкий.
Не забудьте перезагрузить сервер после установки максимального размера файла в вашем php.ini. Я потратил несколько часов на эту проблему, думая, что это не проблема с размером файла, а я забыл перезапустить. После перезагрузки все сработало.
Я надеюсь, что это может помочь кому-то.
Ответ 4
У меня была такая же проблема, и знакомство с большей частью платформой .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". Это помогает.
Ответ 5
Я столкнулся с проблемой с полем $_FILES 'tmp_name', не имеющим значения для расширения файла .JPG и успешно исправил его за несколько шагов. Эти меры могут помочь кому-то в будущем.
- Прежде всего, я внедрил решение Switch Case, предлагаемое
пользователь 'staticsan'. Ссылка здесь -
fooobar.com/questions/181200/.... Это решение помогло мне
отслеживать потенциальные проблемы, такие как параметры в файле php.ini и
разрешения папки.
- Файл php.ini был назван php.ini.default. Изменение параметров upload_max_filesize и post_max_size не дало результата, пока я не переименовал файл в php.ini. Не забудьте поэкспериментировать с значениями параметров.
- После исправления проблемы с именем файла я столкнулся с проблемой с правами доступа к папке, в которой необходимо загрузить загруженное временное изображение. Я изменил разрешения и смог увидеть изображение, загруженное в папку.
Ответ 6
Просто попробуйте это и посмотрите, что произойдет,
if (($_FILES['file']['type']) == "image/jpg" || ($_FILES['file']['type']) == "image/jpeg") {
//do uploading stuff here
}else{
echo 'File is not a valid JPG,JPEG';
}
Ответ 7
Кажется, это случайная проблема, потому что, когда я делал script для загрузки CSV файлов, некоторые файлы CSV не имели бы проблем с загрузкой, но в других случаях $_FILES['file'][tmp_name]
был бы пустым.