Php 7 形式不适用于 enctype="multipart/form-data" 和 method="post"
Php 7 form doesn't work with enctype="multipart/form-data" and method="post"
我正在使用 PHP 7.0.9 和 IIS 8。我有一个 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);
?>
按原样,当我点击"Upload Image"时,页面挂了,好像在不停地上传文件。
但是如果我删除 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 是否正在接收请求。
"I cannot replicate it with the same php version, but with Apache instead of IIS"
检查一下您的 IIS 防火墙。
使用 $_FILES(对于文件)而不是 $_POST
最后,罪魁祸首是 Glimpse。我完全不知道为什么,但是一旦我删除了 web.config 中插件的所有痕迹,通过 PHP 上传又可以了。
我正在使用 PHP 7.0.9 和 IIS 8。我有一个 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);
?>
按原样,当我点击"Upload Image"时,页面挂了,好像在不停地上传文件。
但是如果我删除 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 是否正在接收请求。
"I cannot replicate it with the same php version, but with Apache instead of IIS"
检查一下您的 IIS 防火墙。
使用 $_FILES(对于文件)而不是 $_POST
最后,罪魁祸首是 Glimpse。我完全不知道为什么,但是一旦我删除了 web.config 中插件的所有痕迹,通过 PHP 上传又可以了。