php 大数据 post,php配置-解決大數據超多字段的POST方式提交無法完全接受的問題...

例如:在盤點表的數據提交中出現了POST大量數據超多字段的將近2000個字段,部分字段沒有接受;修改方法為修改php.ini

將max_input_var調大,該值默認為1000

max_input_vars = 5000

相近的配置還有:

max_execution_time = 600max_input_time= 600memory_limit=32m

file_uploads=on

upload_tmp_dir= /tmp

upload_max_filesize=32m

post_max_size= 32m

在nginx中相近的配置有:

keepalive_timeout 60;

send_timeout 3m;

client_max_body_size 500m;

例如:修改上傳圖片的最大限制,避免entity too large的錯誤

首先,將php的upload_max_filesize 和 post_max_size 調大

再將nginx的 client_max_body_size 調大

或將apache的LimitRequestBody調大

//php配置

max_execution_time = 600        //設置頁面訪問超時時間為600smax_input_time= 600          //設置GET和POST等接收數據的最大超時時間為600sfile_uploads=on

upload_tmp_dir= /tmp

upload_max_filesize=50m    //設置為50M

post_max_size=50m //設置為50M//nginx配置

client_max_body_size 50M //設置為50M//apache配置

LimitRequestBody 50 * 1024 * 1000    //設置為50M

例如:Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)

注意這個不是因為memory_limit參數的問題,即使memory_limit配置的最大也有可能出問題;關鍵在於代碼循環中unset變量;

我的php.ini中memory_limit原來為128M,報了這個錯誤;后來我將memory_limit調成1024M還是報同樣的錯誤。

//處理原料出庫單

$wmsMaterialOutSheetModels = \core\models\WmsMaterialOutSheet::find()->orderBy(['id'=>SORT_ASC])->all();//提示文字

$tip = Console::ansiFormat(PHP_EOL."開始處理所有原料出庫單的計件類型和非標准重量", [Console::FG_YELLOW]);

Console::output("{$tip}");unset($tip);//設置進度條

Console::startProgress(0, count($wmsMaterialOutSheetModels));//輪詢所有成品出庫單

foreach ($wmsMaterialOutSheetModels as $key => &$wmsMaterialOutSheetModel){$transtion = \Yii::$app->db->beginTransaction();try{//提示文字

$tip = Console::ansiFormat(PHP_EOL."正在處理原料出庫單{$wmsMaterialOutSheetModel->wms_material_out_sheet_number}", [Console::FG_YELLOW]);

Console::output("{$tip}");unset($tip);//已經處理過則無需再次處理

if (\Yii::$app->redis->sismember("in_sheet_number_updated_piece_type", $wmsMaterialOutSheetModel->wms_material_out_sheet_number)){throw new \yii\db\Exception(PHP_EOL."原料出庫單{$wmsMaterialOutSheetModel->wms_material_out_sheet_number}已經更新過,無需再次更新");

}//修改原料出庫單

$wmsMaterialOutSheetModel->piece_type = 2;$wmsMaterialOutSheetModel->off_standard_weight = $wmsMaterialOutSheetModel->wms_material_out_sheet_out_weight;if(!$wmsMaterialOutSheetModel->save(false, ['piece_type', 'off_standard_weight'])){throw new \yii\db\Exception(PHP_EOL."處理原料出庫單{$wmsMaterialOutSheetModel->wms_material_out_sheet_number}失敗");

}else{$tip = Console::ansiFormat(PHP_EOL."處理原料出庫單{$wmsMaterialOutSheetModel->wms_material_out_sheet_number}成功",[Console::FG_GREEN]);

Console::output("{$tip}");unset($tip);

}//修改原料出庫單詳情

$wmsMaterialOutSheetDetailModels = \core\models\WmsMaterialOutSheetDetail::find()->where(['wms_material_out_sheet_number'=>$wmsMaterialOutSheetModel->wms_material_out_sheet_number

])->orderBy(['id'=>SORT_ASC])->all();foreach ($wmsMaterialOutSheetDetailModels as $detail_key => $wmsMaterialOutSheetDetailModel){$wmsMaterialOutSheetDetailModel->piece_type = 2;$wmsMaterialOutSheetDetailModel->off_standard_weight = $wmsMaterialOutSheetDetailModel->wms_material_out_sheet_detail_out_weight;if (!$wmsMaterialOutSheetDetailModel->save(false, ['piece_type', 'off_standard_weight'])){throw new \yii\db\Exception(PHP_EOL."處理原料出庫單{$wmsMaterialOutSheetModel->wms_material_out_sheet_number}詳情{$detail_key}失敗");

}else{$tip = Console::ansiFormat(PHP_EOL."處理原料出庫單{$wmsMaterialOutSheetModel->wms_material_out_sheet_number}詳情{$detail_key}成功",[Console::FG_GREEN]);

Console::output("{$tip}");unset($tip);

}

}unset($wmsMaterialOutSheetDetailModels);//更新進度條

Console::updateProgress($key+1, count($wmsMaterialOutSheetModels));//如果是模擬更新則回滾

if (!$is_update){throw new \yii\db\Exception(PHP_EOL."此次是模擬更新,不會真正更新計件類型和非標准重量,正在回滾到初始狀態!");

}$transtion->commit();//將已更新的出庫單號添加到已更新隊列中

\Yii::$app->redis->sadd("in_sheet_number_updated_piece_type", $wmsMaterialOutSheetModel->wms_material_out_sheet_number);

}catch(\yii\base\Exception $e){$transtion->rollBack();$tip = Console::ansiFormat(PHP_EOL.$e->getMessage(),[Console::FG_RED]);

Console::output("{$tip}");unset($tip);

}catch(\yii\base\ErrorException $e){$transtion->rollBack();$tip = Console::ansiFormat(PHP_EOL.$e->getMessage(),[Console::FG_RED]);

Console::output("{$tip}");unset($tip);

}unset($wmsMaterialOutSheetModel);

}unset($wmsMaterialOutSheetModels);//設置進度條

Console::endProgress();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值