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

时间:2013-01-23 04:59:17

标签: php file-upload

当我测试带有此扩展名的图像文件时,我正在制作上传脚本.JPG,我不知道jpg或jpeg之间的差异,但似乎$ _FILES无法识别此文件类型。

我已经阅读了几个线程,$ _FILES在mime类型方面不可靠,所以我决定使用php的mime类型函数mime_content_type(),php的getimagesize(),{{1虽然pathinfo返回文件名和类型,但是我需要不存在的文件路径,所有函数都以$ _FILES ['file'] ['tmp_name']作为参数传递。 / p>

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

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

任何遇到此问题的人请分享您的解决方法或“你是怎么做的”。

7 个答案:

答案 0 :(得分:47)

如果$_FILES[$field]['tmp_name']为空,则表示文件尚未上传。您应该查看$_FILES[$field]['error']以了解原因。

FWIW,据我所知,$_FILES[]中的mime类型由浏览器提供。

更新:这里有一些用于处理所有文件上传错误的封装代码:

        $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.';
                }
            }
        }

答案 1 :(得分: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

或者在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.ini upload_max_filesize设置,那么PHP不会在错误日志中报告错误。例如,如果您将文件设置为2M(我认为是默认设置),则上传6MB文件。

答案 2 :(得分:5)

发布答案,因为我的评分太低了。

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

我希望这可以帮助别人。

答案 3 :(得分:3)

我遇到了同样的问题,熟悉大多数.NET平台会让你忘记客户端html中发生的事情。

我的问题是我的表单有一个MAX_FILE_SIZE隐藏输入,其值比文件的等价字节小。

你的表格应该有这个;

<强>

除此之外,您的表单标记必须包含 enctype =&#34; multipart / form-data&#34;

我觉得最大文件大小是kb,但它是以字节为单位的,这要归功于stackoverflow中的其他一些页面。

可能导致此问题的另一个原因是人们在之前的评论中提到的php.ini设置。你也应该post_max_size = 200M到php.ini文件。

如果您在像我这样的Windows上进行开发,您可以看到在C:\ Windows \ Temp中显示错误的转储文件,称为&#34; php ** VERSION ** _ errors.log&#34;。它会有所帮助。

答案 4 :(得分:1)

我遇到了$ _FILES字段'tmp_name'没有.JPG文件扩展名值的问题,并且只需几步即可成功修复它。这些措施可能有助于将来的某些人。

  1. 首先,我实施了由。提供的Switch Case解决方案 用户'staticsan'。链接在这里 - https://stackoverflow.com/a/14472801/3681985。这个解决方案帮了我 跟踪php.ini文件中的参数等潜在问题 文件夹权限。
  2. php.ini文件名为php.ini.default。在将文件重命名为php.ini之前,更改参数upload_max_filesize和post_max_size不会产生任何结果。请记住试验参数值。
  3. 修复文件名问题后,我遇到了对必须移动上传的临时图像的文件夹的权限的质询。我已经更改了权限,并且能够看到上传到该文件夹​​的图像。

答案 5 :(得分:0)

试试这个,看看会发生什么,

if (($_FILES['file']['type']) == "image/jpg" || ($_FILES['file']['type']) == "image/jpeg") {
                      //do uploading stuff here
                    }else{
                    echo 'File is not a valid JPG,JPEG';
                    }

答案 6 :(得分:0)

好像这是一个随机问题,因为在制作上传CSV文件的脚本时,某些CSV文件上传没有问题,但在其他情况下,$_FILES['file'][tmp_name]将为空。