真是奇怪的PHP行为与多个文件上传,我的坏?
这里的行为很奇怪。当前真是奇怪的PHP行为与多个文件上传,我的坏?,php,forms,file,file-upload,Php,Forms,File,File Upload,这里的行为很奇怪。当前upload\u max\u filesize是2M我的PHP安装有问题吗? <?php if(isset($_FILES['images'])) var_dump($_FILES['images']); ?> <html> <head> <title></title> <meta http-equiv="Content-type" content="text/html
upload\u max\u filesize
是2M
我的PHP安装有问题吗?
<?php if(isset($_FILES['images'])) var_dump($_FILES['images']); ?>
<html>
<head>
<title></title>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
</head>
<body>
<form method="post" action="processupload.php"
enctype="multipart/form-data">
<input id="images[]" name="images[]" type="file" multiple="" />
<input name="submit" type="submit" value="Upload" />
</form>
</body>
</html>
测试显示了不同的行为:
- 大尺寸(12米)mp3文件:
未设置$\u文件['images']
- 中等大小(4M)mp3文件:
$\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
- 在12M文件的情况下,
为空,因为post数据的(大小)之和大于post最大大小()$\u文件['images']
- 在4M文件的情况下,
和类型
为空,因为上载大小大于上载最大文件大小大小
$_FILES[<current_index_for_file>]['images']['error']
$\u文件[]['images']['error']
您只需检查
print_r($_FILES);
现在,您将了解阵列的结构。
如果我记得很清楚,您可以通过以下方式访问值:
$_FILES['images']['size'][<index>]
$_FILES['images']['type'][<index>]
$_FILES['images']...
$\u文件['images']['size'][]
$\u文件['images']['type'][]
$\u文件[“图像”]。。。
您可以将这些行放在代码的顶部,因为PHP.ini中的全局设置是有限的,所以您可以使用下面的行进行编程更改
ini_set('post_max_size', '25M');
ini_set('upload_max_filesize', '20M');
当您增加POST数据的大小时,您必须增加脚本执行时间,否则它将抛出致命错误,您可以将脚本执行时间增加
ini_set('max_execution_time', 0);
这里我提到的0是无限制的,出于安全目的,您必须使用服务器进行测试,并将其限制在几秒钟内。不是真的<代码>$\u文件[0]['images']即使选择了多个文件也为空。对不起,忘记['error'],设置正确,我的不好,但是关于类型和大小的奇怪行为仍然存在。完全错误。脚本在数据上传后执行。因此,最大执行时间是无用的。无法更改post_max_size/upload_max_filesize,因为数据已上载。顺便说一句,正确的anwser在我的第一篇文章中。@Polmonino您可以将这些代码作为两个页面(表单页面和操作页面)的通用代码,您应该知道将这些代码放置在何处。在分析任何事情之前,不要说完全错误的话。很酷,老兄,你又错了。你把
post\u max\u size
和upload\u max\u filesize
放在哪里并不重要,因为它们都是PHP\u INI\u PERDIR(意味着你不能在脚本中更改它们)。而且max\u execution\u time
是无用的,因为中的脚本只有在上传完成后才能执行!