有没有办法在使用JavaScript上传之前检查文件大小?
我有一个非常大的html表单(包含行的表,其中包含多个输入),我需要通过POST请求提交给PHP脚本.问题是PHP的$ _POST超全局中没有一些值没有出现.
我检查(使用Firebug扩展),这些值实际上是由浏览器发送到服务器的.
$ _POST被填充,但有些值只是缺失.
我检查了什么是原始请求使用:
$raw_post = file_get_contents('php://input');Run Code Online (Sandbox Code Playgroud)
并且返回的字符串具有值.它们只是没有解析成$ _POST数组.我注意到的奇怪的是,似乎php://输入值在一定长度后被切断,其余的字符串不会通过$ _POST.
我想到了post_max_size和memory_limit并将它们设置为大值:
memory_limit = 256M
post_max_size = 150M
但根据php文档,如果请求的大于post_max_size,$ _POST不应包含任何值.
由于形式和请求的大尺寸我不能在这里发布,但我可以发布用于调试问题的PHP脚本:
var_dump($file = file_get_contents('php://input'));
var_dump($_POST);
//... then i parsed the $file
Run Code Online (Sandbox Code Playgroud)
服务器版本:Apache/2.2.9(Debian)
PHP版本:PHP 5.3.2-0.dotdeb.2
可以enyone解释这种奇怪的PHP行为的原因,我应该怎么做(更改PHP设置,代码?)在处理表单时使用$ _POST数组?
编辑:要明确:不仅缺少价值观.$ _POST也不包含这些键.
原始帖子的片段:
t_dodparam%5B198%5D=&t_dodparam2%5B198%5D=&t_kolejnosc%5B198%5D=199&n_indeks=201&n_wartosc=testtesttestRun Code Online (Sandbox Code Playgroud)
密钥't_dodparam'在post中,它有密钥198.缺少其余的参数(ex t_dodparam2在post中,但它没有198这样的密钥,并且$ _POST中没有n_wartosc这样的密钥)
我在LAMP环境中发现了一个奇怪的现象.
在前端,我用jQuery执行一个AJAX post请求,如下所示:
$.post('save.php', {data1: d1, data2: d2, [...], dataN: dN})
Run Code Online (Sandbox Code Playgroud)
的变量d1,以dN从网站(例如,从文字输入,文字区域,复选框等)与jQuery预先收集.
该文件save.php将post参数data1传递给dataN一个查询并将其保存在数据库中.
除非我在请求期间更改页面(例如,通过单击链接),否则请求大约需要500毫秒并且没有问题.
通常情况下,我希望请求被中止和忽略(这很好)但是(这是奇怪的行为)请求似乎已经完成,但只有部分数据被传输并因此被保存.
这意味着,例如,PHP脚本只保存data1到data5并设置data6到dataN空.
这个问题似乎已经被AJAX请求(不是PHP脚本),因为场引起$_POST['data6'],以$_POST['dataN']在PHP中没有设置在这种情况下.
所以我的问题:
为什么会发生这种情况(这是预期的行为)?
我怎么能避免呢?
更新
问题既不是jQuery也不是php.jQuery正确收集值并尝试将它们发布到php.我刚刚验证了它 - 它有效.另一方面,php脚本处理它按预期获得的所有内容 - 它只是没有收到整个请求.
所以问题必然是被中断的请求本身.与我预期它不会中止或失败不同,它仍会传输所有数据直到中断.
然后php获取此帖子数据并开始处理它 - 显然缺少一些信息.
更新2
我加入一个参数固定的问题eof后dataN,并检查它是否是PHP设置.通过这种方式,我可以确保传输了整个请求.
然而,这并不能解决我仍然不理解的问题的根源.
有人帮忙吗?