
正文
php配置-解决大数据超多字段的POST方式提交无法完全接受的问题
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
例如:在盘点表的数据提交中出现了POST大量数据超多字段的将近2000个字段,部分字段没有接受;修改方法为修改php.ini
将max_input_var调大,该值默认为1000
max_input_vars = 5000
相近的配置还有:
max_execution_time = 600max_input_time = 600memory_limit = 32mfile_uploads = onupload_tmp_dir = /tmpupload_max_filesize = 32mpost_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 = onupload_tmp_dir = /tmpupload_max_filesize = 50m//设置为50Mpost_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();







