上传的 Excel 文件 tmp_name 有时只是空的

Posted

技术标签:

【中文标题】上传的 Excel 文件 tmp_name 有时只是空的【英文标题】:Uploaded Excel files tmp_name is only empty sometimes 【发布时间】:2022-01-07 04:08:36 【问题描述】:

所以我在我的上传功能中发现了一个错误,我已经使用了一段时间了。但是今天当我上传一个带有一些tables etc. in notes 的excel 文件时,tmp_name 是空的。该文件只有 2.3kB,当我尝试使用大小为 11kB 的旧文件时,它可以完美运行。

我尝试打印数组,结果如下:

Array ( [xml_file] => Array ( [name] => export_test.xlsx [type] => [tmp_name] => [error] => 1 [size] => 0 ) )

带有notes 或类似内容的格式化单元格可以使其无法上传吗?

当我上传 11kB 文件时,我得到以下信息,这是正确的:

Array ( [xml_file] => Array ( [name] => export (3).xlsx [type] => application/vnd.openxmlformats-officedocument.spreadsheetml.sheet [tmp_name] => C:\xampp\tmp\php39F3.tmp [error] => 0 [size] => 53226 ) )

我使用的 html/PHP 表单是这样的:

<form name="form" style="display: inline-block; width: 80%;" method="post" action="../Test/DashboardFiles/upload.php" enctype="multipart/form-data">
    <div class="input-group">
            <div class="custom-file">
                <input type="file" name="xml_file" accept=".xl*" class="btn custom-file-input" id="f02">
                <label class="custom-file-label" for="f02">Choose file</label>
            </div>
            <div class="input-group-append">
                    <input style="border-radius: .35rem !important;" class="btn btn-outline-secondary formClickResetUrl" id="uploadRVTM" type="submit" name="submit" value="Upload" disabled/>
                    <input type="hidden" name="project" value="
                                                                <?php
                                                                if (isset($_GET['Project'])) 
                                                                    echo $_GET['Project'][0];
                                                                else
                                                                    echo $FirstItemDD[0][0];
                                                                
                                                                ?>
                                                            ">
                <script>
                    typefile();
                </script>
            </div>
    </div>
</form>

upload.php 中,如果文件存在,我会移动文件等。但我们只是说它只包含 print_r($_FILES);

临时文件保存在C:\xampp\tmp 中,在我的php.ini 中更改,最大上传大小为upload_max_filesize=2M

【问题讨论】:

[error] =&gt; 1 表示UPLOAD_ERR_INI_SIZE - “上传的文件超过了 php.ini 中的 upload_max_filesize 指令。” php.net/manual/en/features.file-upload.errors.php PHP 不太可能对此撒谎。 “带有注释或类似内容的格式化单元格可以使其无法上传吗?” - 不是本身;但如果这些单元格中的数据量(分别是实际发送的数据),加上上传文件大小,达到post_max_size,那么整个请求也不会成功。跨度> @CBroe 有趣的是,当我保存与2003 相同的文件时,some feature might be lost.... 我仍然尝试过,现在它也可以上传该文件了。哪个功能阻止它上传我不知道.. post_max_size = post_max_size=8M Excel 文件中包含的任何“功能”都不会对上传部分本身产生任何影响(除非您运行某种服务器防火墙,它会检查 POST 正文并查找“恶意” 东西。) @CBroe 这不是由于防火墙,尝试将其关闭但仍然出现错误。但是我尝试增加upload_max_filesize to 12M,现在它可以工作了。但这也很有意义……我的文件是 2300kB 而不是 2.3kB。我不知道的一件事是为什么我的 11000kB 文件可以上传?` 你建议upload_max_filesize 大小是多少? 【参考方案1】:

为了保护您的服务器资源,主机对可以上传的文件的最大大小设置了限制。此最大值(以 MB 为单位)在 upload_max_filesize 指令中定义。

upload_max_filesize=2M 更改为upload_max_filesize=15M

php.ini中更改此设置

【讨论】:

以上是关于上传的 Excel 文件 tmp_name 有时只是空的的主要内容,如果未能解决你的问题,请参考以下文章

PHP错误 - 上传文件

PHP 错误 - 上传文件

Cakephp中的AJAX文件输入图片上传

php5.4 文件上传问题 5.4以前 $_FILE['file']['tmp_name'] 存储的是历史文件 5.4怎么是tem/phpXXXX了

PHP上传图片,并以原文件名保存!

PHP处理上传文件信息数组中的文件类型 正确获取