【问题标题】:Php 7 form doesn't work with enctype="multipart/form-data" and method="post"PHP 7 表单不适用于 enctype="multipart/form-data" 和 method="post"
【发布时间】:2017-05-28 21:59:38
【问题描述】:

我正在使用带有 IIS 8 的 PHP 7.0.9。我有一个 html 表单来上传图像。方法为POST,动作正确,enctype为“multipart/form-data”。但是,当我提交表单时,页面会挂起,就好像它试图无休止地上传所选文件一样——它的重量约为 30kb,没什么大不了的......

这是我的表格:

<!DOCTYPE html>
<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="text" name="textInput" id="textInput">
    <input type="submit" value="Upload Image" name="submit">
</form>

</body>
</html>

这里是upload.php:

<?php

echo "ok<br/>";
var_dump($_POST);

?>

按原样,当我点击“上传图片”时,页面挂起,就好像它在无休止地上传文件一样。

但如果我删除 enctype 或者如果我通过 get 更改操作,则提交表单并打印:

ok
array(0) { }

$_POST 数组显然是空的,但为什么它不能与 enctype="multipart/form-data" 一起使用?

仅供参考

file_uploads = On
upload_max_filesize = 20M
max_file_uploads = 20
upload_tmp_dir = C:\Windows\temp

...并且 C:\Windows\temp 对所有人都是可写的。是的,大家组——我对此感到非常恼火,我不想要任何权利问题。

稍后进行一些测试...

如果我使用:

<form action="upload.php" method="get" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="text" name="textInput" id="textInput">
    <input type="submit" value="Upload Image" name="submit">
</form>

结果是:

ok
array(3) { ["fileToUpload"]=> string(13) "imageName.png" ["textInput"]=> string(4) "blah" ["submit"]=> string(12) "Upload Image" }

好像是方法和enctype的问题。

编辑

对于它的价值,我认为这绝对是一个 IIS 问题:当我查看 IIS 日志时,我看到了对表单的请求:

2017-01-16 13:28:19 X.X.X.X GET /testupload.html - 80 - X.X.X.X Mozilla/5.0+(Windows+NT+6.2;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/55.0.2883.87+Safari/537.36 - 304 0 0 1140

但是当我提交表单时什么都没有写;所以我什至不知道 IIS 是否正在接收请求。

【问题讨论】:

  • 您是否尝试过使用其他浏览器?仅当您省略输入类型文件时,它是否适用于输入类型文本?
  • 我无法使用相同的 php 版本复制它,而是使用 Apache 而不是 IIS。
  • @Blackbam 我用 Chrome 55 和 Internet Explorer 10 尝试过。
  • 实际发生了什么 - 浏览器只是冻结了吗?您是否检查了上传目录的权限?也许文件无法移动到那里(如果仅使用文本提交表单?)?
  • @Blaatpraat 代码再简单不过了;我很确定问题出在一些 IIS 配置错误...

标签: php html file-upload iis-8


【解决方案1】:

最后,罪魁祸首是 Glimpse。我完全不知道为什么,但是一旦我删除了 web.config 中插件的所有痕迹,通过 PHP 上传又可以工作了。

【讨论】:

    【解决方案2】:

    “我无法使用相同的 php 版本复制它,而是使用 Apache 而不是 IIS”

    看看你的 IIS 防火墙。

    【讨论】:

    • 如果您想回复评论,请发表评论。此外,IIS 中没有内置防火墙。
    • @ArthurSPITZNAGEL — 如果您没有足够的声誉来发表评论,那么请不要发表评论并继续前进。不要发表评论作为答案。
    【解决方案3】:

    使用 $_FILES(用于文件)而不是 $_POST

    【讨论】:

    • $_POST 不应该是空的,他说他试过了
    猜你喜欢
    • 1970-01-01
    • 2014-10-27
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多