$_FILES 字段“tmp_name”在.JPG文件扩展名上没有值

2022-08-30 13:53:07

当我测试一个图像文件时,我正在制作一个上传脚本,.JPG这个扩展名,我不知道jpg或jpeg之间的区别是什么,但似乎$ _FILES不认识这种文件类型。

我已经读过几个线程,当涉及到哑剧类型时,$_FILES并不那么可靠,所以我决定使用php的mime类型函数,php的,虽然pathinfo返回文件名和类型,但我需要不存在的文件的路径,所有函数都使用$_FILES['file']['tmp_name']作为参数传递。mime_content_type()getimagesize()pathinfo()

因此,当我决定上传图像文件时,例如样本.JPG,我认为大多数这些文件都是来自相机<的原始图像 - 这就是我的想法,但更重要的是,我可以将它们上传.JPG,.jpg,jpeg,.png。除了.JPG之外,它们都很好用。

主要问题是,当要上传.JPG时,$_FILES中的字段 ['tmp_name'] 没有值。

任何遇到过这个问题的人,请分享你的解决方法或“你是怎么做到的”之类的事情。


答案 1

如果 为空,则表示文件尚未上传。你应该看看为什么。$_FILES[$field]['tmp_name']$_FILES[$field]['error']

FWIW,据我所知,哑剧类型是由浏览器提供的。$_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.';
                }
            }
        }

答案 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配置中执行此操作:

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

我还想说,如果您上传的文件大于php.ini设置,PHP不会在错误日志中报告错误,这是很差.ini。例如,如果您上传一个6MB的文件,而您将它设置为(我认为这是默认设置)。upload_max_filesize2M


推荐