-1

When I upload a file in PHP I am getting the wrong type for xlsx files.

It is telling me the type is a file name

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

Any ideas?

Hi

The code I am using is

view/display file

    <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>

File 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');        

        }

the print_r() statement prints

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

Please note this only happens to xlsx files all other files work fine

4

2 回答 2

2

type键提供文件的 MIME 类型,但此信息由浏览器提供。像这样:

然而,这种 mime 类型在 PHP 端没有被检查,因此不要认为它的价值是理所当然的。

然而,$_FILESsuperglobal 绝不是只读的,这毫无价值。像其他超全局变量一样,您的 PHP 代码可以覆盖它:

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

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

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

Chrome - 网络

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

铬 - 提交

展开节点,您将看到数据(application/vnd.openxmlformats-officedocument.spreadsheetml.sheet在本例中):

Chrome - 有效负载

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

于 2013-06-21T09:58:59.803 回答
1

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

我认为您只是从另一个文件中复制了代码。

于 2013-06-20T08:07:41.480 回答