PHP文件上传错误类型

时间:2013-06-20 07:46:40

标签: php file file-upload

当我在PHP上传文件时,我的xlsx文件类型错误。

它告诉我类型是文件名

Array ( 
    [name] => report.xlsx 
    [type] => /folder/files/report/april_2013.xlsx 
    [tmp_name] => E:\path\to\temp\folder\phpCD1B.tmp
    [error] => 0
    [size] => 12433
) 

有什么想法吗?

您好

我正在使用的代码是

查看/显示文件

    <form enctype="multipart/form-data" method="POST" action="update_comp.php" name="myform2">
<label>Upload Files ( PDF,CSV or EXCEL only ) </label>
<input type="file" name="file">
</form>

文件update_comp.php

include ("filesFunctions.php"); 
if(isset($_FILES["file"])){
            $file = $_FILES["file"];
print_r($file);exit;
            $upload = new filesFunctions();
            $id = $upload->uploadFiles($file,'dairy');        

        }

print_r()语句打印

Array (
    [name] => report.xlsx
    [type] => /folder/files/report/april_2013.xlsx
    [tmp_name] => E:\folder\to\temp\php5ACD.tmp
    [error] => 0
    [size] => 12433
) 

请注意,这只发生在xlsx文件中,所有其他文件都可以正常工作

2 个答案:

答案 0 :(得分:2)

type密钥提供文件的MIME类型,但此信息为provided by the browser。就这样:

  

然而,在PHP方面没有检查这个mime类型   不要把它的价值视为理所当然。

然而,$_FILES超全球绝不仅仅是只读的。像其他超级全局一样,您的PHP代码可以覆盖它:

$_FILES['file']['type'] = 'Lorem ipsum dolor sit amet';

假设您没有摆弄$_FILES,第一个明显的故障排除步骤是启动浏览器的调试工具并检查它发送的POST数据。如果这是字符串的来源,你可以忘记PHP。

我不知道您的浏览器是什么。在Google Chrome中(在其他浏览器中使用类似的说明),您必须打开上传表单,点击 F12 ,然后点击“网络”:

Chrome - Network

当您选择文件并提交表单时,您会看到请求:

Chrome - Submit

展开节点,您将看到数据(在这种情况下为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet):

Chrome - Payload

此MIME类型通常由Microsoft Office安装程序配置。如果您的包含/folder/files/report/april_2013.xlsx,则可能需要修复或重新安装。

答案 1 :(得分:1)

完全错误的文件?名称:report.xlsx 之后你说april_2013.xlsx就像@ h2ooooooo说的那样。

我认为你刚从另一个文件中复制了代码。