我在项目中工作,允许我们的员工将大文件上传到我们的共享主机并获取下载链接.问题是我们的主机拒绝为共享主机更改LimitRequestBody.还有其他解决方案可以解决LimitRequestBody或其他任何方式来完成这项工作吗?
我正在开发一个项目,我使用Rgraph PHP库实现了几个图形/图表.在我的脚本中,我为图表执行以下操作:
Draw()方法绘制图形.canvas.toDataURL()方法创建图像数据变量.$.post()方法将此图像数据变量传递给服务器.此解决方案中的所有内容在我的localhost上运行良好,但是在开发服务器上,传递图像数据的AJAX请求返回a 403 Error.
我在客户端和服务器端都记录了数据以确定问题.客户端日志记录确认传递的imageData变量看起来正确.但是,服务器端日志记录确认传递的imageData变量是导致问题的原因.
去年有一个非常类似的问题,但他们无法确定这个问题的根本原因.任何人都可以帮我指出解决这个问题的正确方向吗?
我认为这是一个可能的数据编码问题,但如果是这种情况,为什么它在一台服务器而不是另一台服务器上运行?
我的相关Javascript:
radar.Set('chart.contextmenu', [
['Get PNG', RGraph.showPNG],
null,
['Cancel', function () {}]
]);
radar.Draw();
var imageData = radar.canvas.toDataURL("image/png");
console.log('imageData: ' + imageData);
console.log('filename: ' + 'tmpRadar<?php echo $us['UsersSurvey']['user_id']; ?>-<?php echo $survey['Survey']['id']; ?>.png');
$.post("/Surveys/save_chart", {
src : imageData,
filename: 'tmpRadar<?php echo $us['UsersSurvey']['user_id']; ?>-<?php echo $survey['Survey']['id']; ?>.png'
});
Run Code Online (Sandbox Code Playgroud)
客户端记录:
imageData: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABLAAAAOECAYAAACxbcj6AAAgAElEQ…AgQIAAgVECAqxR49YsAQIECBAgQIAAAQIECBAgQKCfwP8CXHJ+WDHVMbcAAAAASUVORK5CYII=
filename: tmpRadar19-1.png
POST http://website.com/Surveys/save_chart 403 (Forbidden) …Run Code Online (Sandbox Code Playgroud) 是否可以使用PHP上传~100 MB文件?
如果是这样,配置文件(php.ini)中需要进行哪些更改?
斯里兰卡
我使用dropzone.js使用JQuery处理前端的上传部分.
我的测试用例是:
上传34 MB文件.工作正常...
上传一个27 MB的文件.工作正常...
上传两个文件,每个文件是5 MB.工作正常...
上传两个文件,34 MB + 27 MB.失败,$_FILES是一个空数组
这是JQuery代码:
<script>
$(document).ready(function () {
Dropzone.options.myAwesomeDropzone = {
autoProcessQueue: false,
url: '<?= site_url("admin/video/upload"); ?>',
addRemoveLinks: true,
previewsContainer: ".dropzone-previews",
uploadMultiple: true,
parallelUploads: 50,
maxFilesize: 500, //500MB
acceptedFiles: 'video/*',
maxFiles: 100,
init: function () {
var myDropzone = this;
myDropzone.on("success", function (file, response) {
$("#success, #fail").hide();
$("#" + response).show();
});
myDropzone.on("maxfilesexceeded", function (file) {
this.removeFile(file);
});
$("#submit-all").click(function (e) {
e.preventDefault();
e.stopPropagation();
myDropzone.processQueue();
});
} …Run Code Online (Sandbox Code Playgroud) 背景信息
我正在使用在Nginx上运行的CodeIgniter 2.1.4和PHP 5.3。我有一个HTML表单,表示本质上是同类数据的行。每个“行”都有几个<input />字段,每个字段具有相同的名称。这是一个简化的示例:
<input type="text" name="firstname[]" />
<input type="text" name="lastname[]" />
Run Code Online (Sandbox Code Playgroud)
因此,我有很多firstname[]输入,lastname[]输入等。提交表单后(操作是POST),我在像这样的控制器方法中检索数据(请注意,我正在使用CodeIgniter):
$firstnames = $this->input->post('firstnames');
$lastnames = $this->input->post('lastnames');
Run Code Online (Sandbox Code Playgroud)
这些变量是包含表单中相应行中的值的数组,从这里我对这些数据进行一些处理。
问题
当表单中的行数很大(几百)时,生成的PHP数组的大小与表单中的输入数不匹配 -例如,表单可能有200个firstname输入,但$firstname仅数组有167。此外,$lastname变量的大小也不同-166。
当表单中的元素数量较少时,一切正常。
我的理论是,我超出了堆栈中某处的某种最大大小设置或缓冲区,导致表单数据被截断。是否存在我不知道的“最大表单大小”的PHP或CodeIgniter或nginx设置?
对于它的价值,当同时使用两者application/x-www-form-urlencoded或multipart/form-data作为表单的内容类型时,我都看到了相同的行为。
我想念什么?