php配置-解决大数据超多字段的POST方式提交无法完全接受的问题
例如:在盘点表的数据提交中出现了POST大量数据超多字段的将近2000个字段,部分字段没有接受;修改方法为修改php.ini
将max_input_var调大,该值默认为1000
max_input_vars = 5000
相近的配置还有:
max_execution_time = 600 max_input_time = 600 memory_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 //设置页面访问超时时间为600s max_input_time = 600 //设置GET和POST等接收数据的最大超时时间为600s file_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();
php配置-解决大数据超多字段的POST方式提交无法完全接受的问题的更多相关文章
- MySQL数据库如何解决大数据量存储问题
利用MySQL数据库如何解决大数据量存储问题? 各位高手您们好,我最近接手公司里一个比较棘手的问题,关于如何利用MySQL存储大数据量的问题,主要是数据库中的两张历史数据表,一张模拟量历史数据和一张开 ...
- hadoop job解决大数据量关联时数据倾斜的一种办法
转自:http://www.cnblogs.com/xuxm2007/archive/2011/09/01/2161929.html http://www.geminikwok.com/2011/04 ...
- 利用MySQL数据库如何解决大数据量存储问题?
提问:如何设计或优化千万级别的大表?此外无其他信息,个人觉得这个话题有点范,就只好简单说下该如何做,对于一个存储设计,必须考虑业务特点,收集的信息如下:1.数据的容量:1-3年内会大概多少条数据,每条 ...
- MySQL数据库解决大数据量存储问题
转载自:https://www.cnblogs.com/ryanzheng/p/8334915.html 提问:如何设计或优化千万级别的大表?此外无其他信息,个人觉得这个话题有点范,就只好简单说下该如 ...
- 解决大数据难题 阿里云MaxCompute获科技大奖
摘要: 据介绍,MaxCompute(大规模分布式的数据计算平台)是国内最早自研的大数据计算平台之一,主要应用于大规模数据处理场景.目前,这项源自浙江.解决世界级难题的成果已拥有EB(百京)级别的数据 ...
- Redis集合解决大数据筛选
Redis集合:集合是什么,就是一堆确定的数据放在一起,数学上集合有交集.并集的概念,这个就可以用来做大数据的筛选功能. 以商品为例,假如商品有颜色和分类.价格区间等属性. 给所有统一颜色的商品放一个 ...
- WCF 客户端解决大数据量传输配置
1. 服务端返回数据给客户端报错 在客户端配置文件中,主要是配置maxReceivedMessageSize <system.serviceModel> <bindings> ...
- MSSQL大数据量增加字段耗时对比
单个数据表记录数为1亿4千万条. 一.测试同时增加两个允许为空的字段. ALTER TABLE [dbo].[XRecord] ADD [sType] int,[cType] int GO 开始时间: ...
- 多线程外排序解决大数据排序问题2(最小堆并行k路归并)
转自:AIfred 事实证明外排序的效率主要依赖于磁盘,归并阶段采用K路归并可以显著减少IO量,最小堆并行k路归并,效率倍增. 二路归并的思路会导致非常多冗余的磁盘访问,两组两组合并确定的是当前的相对 ...
随机推荐
- 【转】用ffmpeg转多音轨的mkv文件
命令: ffmpeg -i AmericanCaptain.mkv -map 0:v -vcodec copy -map 0:a:1 -acodec copyAmericanCaptain.mp4 - ...
- 吴恩达课后作业学习2-week2-优化算法
参考:https://blog.csdn.net/u013733326/article/details/79907419 希望大家直接到上面的网址去查看代码,下面是本人的笔记 我们需要做以下几件事: ...
- 使用 ctypes 进行 Python 和 C 的混合编程
Python 和 C 的混合编程工具有很多,这里介绍 Python 标准库自带的 ctypes 模块的使用方法. 初识 Python 的 ctypes 要使用 C 函数,需要先将 C 编译成动态链接库 ...
- IDEA+'mvn' 不是内部或外部命令
问题描述: 提示'mvn' 不是内部或外部命令,也不是可运行的程序或批处理文件. 或者提示 The JAVA_HOME environment variable is not defined corr ...
- Java的错误类型
程序的错误分为:编译期语法错误.运行期异常错误和运行期逻辑错误 (1)编译期语法错误可以借助Eclipse的帮助方便地定位错误,并进行修改 如: (2)运行期异常,即 没有语法错误,编译可以通过,但运 ...
- Java多线程(七)——线程休眠
一.sleep()介绍 sleep() 定义在Thread.java中.sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”.sleep()会指定休眠时间,线程 ...
- MVC5 + EF6 完整教程 (转)
点击查看: MVC5 + EF6
- CRectTracker类的使用
CRectTracker(俗称“橡皮筋”类)是一个非常有意思的类.你在Windows中经常看到这样的情况:它可以用做显示边界,你也可以扽它的八个角用来放大缩小,或做框选使用.如何通过编程来实现这种功能 ...
- Python 学习 第十六篇:networkx
networkx是Python的一个包,用于构建和操作复杂的图结构,提供分析图的算法.图是由顶点.边和可选的属性构成的数据结构,顶点表示数据,边是由两个顶点唯一确定的,表示两个顶点之间的关系.顶点和边 ...
- 【开源】Skatch 正式发布 - 极速渲染抽象派草图
极速渲染抽象派草图 DEMO Simple Letter 简介 Skatch 这个词由 sketch wechart abstract cax 混合而成的一个新词,代表了cax wechart 抽象艺 ...