Я делал сценарий загрузки, когда я тестировал файл с этим расширением .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 и успешно исправил его за несколько шагов. Эти меры могут помочь кому-то в будущем.
Просто попробуйте это и посмотрите, что произойдет,
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]
был бы пустым.