$ _FILES字段'tmp_name'在.JPG文件扩展名上没有任何值

lem*_*des 31 php file-upload

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

我读过一些线程$ _FILES ins't可靠的,当涉及到MIME类型,所以我决定使用的PHP的MIME类型功能mime_content_type(),PHP的getimagesize(),pathinfo()虽然PATHINFO返回一个文件名称和类型,但我需要的路径对于不存在的文件,所有函数都以$ _FILES ['file'] ['tmp_name']作为参数传递.

所以当我决定上传一个图像文件例如sample.JPG时出现了这个问题,我认为这些文件大部分来自相机< - 这就是我的想法,但更重要的是我可以上传它们. JPG,.jpg,jpeg,.png.除了.JPG,所有这些都很好.

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

你遇到这个问题的任何人请分享你的解决方法或"你是怎么做的"这样的事情.

sta*_*san 47

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

FWIW,据我所知,mime-type $_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.';
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

  • 1是`UPLOAD_ERR_INI_SIZE`,表示文件太大.:-)看这里:http://php.net/manual/en/features.file-upload.post-method.php (11认同)

crm*_*cco 19

检查您的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
Run Code Online (Sandbox Code Playgroud)

或者在Apache Config中执行此操作:

<Directory "/var/www/vhosts/path/to/your/directory/import/">
    php_value post_max_size 6M
    php_value upload_max_filesize 6M
</Directory>
Run Code Online (Sandbox Code Playgroud)

我还会说,如果您上传的文件大于php.ini upload_max_filesize设置,那么PHP不会在错误日志中报告错误.例如,如果您将其设置为6MB文件2M(我认为是默认值),则上传6MB文件.


Rea*_*ria 5

发布答案是因为我的评分太低了.

记住在php.ini中设置最大文件大小上限后重新启动服务器.我花了好几个小时在这个问题上认为这不是文件大小问题,同时我忘了重新启动.重启后一切正常.

我希望这可以帮助别人.