我遇到了一個問題,即使用AJAX通過POST發送的大型數據集未在PHP中使用$_POST
變量。POST數據在瀏覽器和PHP之間被截斷
用戶通過webform上傳Excel/CSV文件,並通過AJAX進行分析。這個特殊的例子有775個記錄,每個記錄有13個字段/元素。添加正在提交的其他字段,並且數據集中的元素少於11,000個。從我在這個主題上所做的研究來看,32位瀏覽器(例如Firefox,Chrome等)應該能夠處理42.9億個元素,所以我沒有看到數據大小的問題,特別是響應從文件上傳包含所有元素。
當整個表單提交驗證並輸入到數據庫中時,問題只會擡頭。問題是,在兩個螢火蟲和Chrome開發者工具的控制檯顯示整個數據集被提交:
做的$_POST
一個var_dump
給出了這樣的:
php.ini中有'post_max_size'
集到200M。即使'upload_max_filesize'
設置爲100M。這個問題發生在Firefox 32.0.3和Chrome 37.0.2062.103米,我已經測試過個人以及UAT測試過的其他舊版本(包括IE 10)。
的AJAX調用是:
new wrapper.ajax('/t1.php', {
type: 'POST',
data: data,
form: $('form[name=oppForm]'),
success: function (response)
{
if (response.result)
{
window.location = response.result;
}
},
complete: function()
{
$("#submit").loading('done');
}
});
的PHP是:
<?php
var_dump($_POST);
有什麼想法?
編輯
與其他一些開發人員交談後,我還檢查了輸出的php://input
,發現它確實包含整個POST數據瀏覽器進行發送,但該數據沒有得到翻譯成$ _POST正確。但是,如果我從帖子數據中刪除了10個密鑰,並且提交了765而不是775,它確實能夠正常工作。
同時檢查'max_input_vars'和'max_input_nesting_level'(後者在你的情況下應該不那麼重要)。並檢查是否f.e. suhosin用於運行你的PHP代碼,它對傳入數據的安全性有額外的限制。 – CBroe 2014-10-07 16:08:35
如果在Apache上運行,還有[limitrequestbody](http://httpd.apache.org/docs/2.0/mod/core.html#limitrequestbody)需要考慮。 – naneau 2014-10-07 16:09:19
一位開發人員建議我查看「php:// input」和$ _POST之間的區別。 file_put_contents('/ tmp/zelda4.log',print_r(file_get_contents(「php:// input」),true)); file_put_contents('/ tmp/zelda5.log',print_r($ _ POST,true)); ' 而「php:// input」確實包含瀏覽器聲稱發送的所有預期內容,但$ _POST仍未顯示全部內容。 – 2014-10-07 16:24:24