PHP附带了一个创建临时文件的错误,但我只使用普通形式的输入字段



我在PHP和/或IIS中遇到了一个非常奇怪的错误,我根本无法解决。我似乎有POST或数组变量嵌套限制,尽管我已经调整了所有相关的内容。我得到这个错误:

注意:未知:在Unknown的系统临时目录中创建的文件0

警告:无法修改标头信息-标头已在未知0中发送

我有这样的设置:

  • PHP 7.2.29
  • 带IIS的Windows Server 2012 R2(8.5?(

我在源页面中所做的非常简单,而且我根本不做任何文件处理,所以我应该不会在临时文件上传或类似方面遇到任何问题。它也不应该尝试创建一个临时文件!?我所拥有的只是一个带有一些input字段的form,然后在目标页面上做一个phpinfo()(用于调试(。

我在下面的源PHP页面有一个静态的数据量。我输出100行,每行中都有一个名为var的数组变量。此变量的静态值为12345678:

<?PHP
echo "<form action='postpage.php' method='POST'>";
echo "<input type='submit' /><br><br>";
for ($row = 0; $row < 100; $row++) {
for ($column = 0; $column < 9; $column++) {
echo "<input type='text' name='var[]' value='12345678' /> ";
}
echo "<br>";
}
echo "</form>";
?>

我的postpage.php只有以下内容:

<?PHP
phpinfo();
?>

但是,当我在表单上单击Submit时,我会收到如上所示的错误,并且phpinfo()是否根本不显示任何POST或REQUEST变量!?

有趣的是,当我将静态值从12345678更改为1234567时,一切都正常!此外,如果我调整变量名称和行或列的数量,那么我可以调整它,但我总是遇到问题,我敢说,数据量相当小。

我相信会有PHP或IIS设置,但我已经尝试了我所知道的一切,这些是我现在的设置:

PHP:

  • 最大输入测试级别=10000
  • 最大输入值=100000
  • memory_limit=512M
  • post_max_size=512M

IIS(IIS管理器>MyServer>请求筛选>查询字符串>编辑功能设置(:

  • 最大URL长度=65536
  • 最大查询字符串=32768

有人知道我可以看什么吗?

经过更多的故障排除后,我发现了问题-这是php.iniupload_tmp_dir的故障目录

虽然我在过去几年里没有改变这个目录设置,我希望它能工作,但显然没有。几周前,我确实将PHP从7.2.x更新到了7.2.x的新版本,但直到现在才遇到这个问题。

当我将目录更新到正确的上传目录时,它突然出现了另一个错误:

警告:未知:输入变量超过1000。要增加限制,请在0行的Unknown中更改php.ini中的max_input_vars

这个错误我可以与之相关,在将其更改为更高的值后,一切都正常:-(

我可以看到,在PHP 7.1中,tempnam现在抛出了一个Notice,所以我目前的猜测是,可能有一个cookie或类似的东西在使用这个方法,然后抛出一个通知,推翻其他错误。

如果你有更好的答案,请提出,因为我会接受这个答案,因为我不是想问问题,只是接受我自己的答案!:-(

在阅读Beauvais的答案后,我检查了我的php.ini,该文件已设置、启用并读取

upload_tmp_dir=G:\www\temp

我不知道目录"temp"没有在G:\www 中创建

创建目录并运行程序后,没有出现警告。

希望这对其他人有用。

最新更新