例如:在盤點表的數據提交中出現了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();