Подтвердить что ты не робот

Поле $_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.

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

4b9b3361

Ответ 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] был бы пустым.