我在Elastic Beanstalk上部署了Laravel应用。该应用程序具有一个表格,可以上传一个excel文件并将每一行保存到数据库记录中。如果Excel文件少于五行,我将被重定向回我的成功页面。这些行将按预期保存到每个数据库记录中。
如果Excel文件具有六个以上的记录,则我得到的页面花费了太长时间来响应HTTP 504错误。我已将以下代码插入处理上传的Controller上:
ini_set('max_execution_time', '3000');
在Elastic Beanstalk PHP配置上,我还将最大执行时间设置为3000。但是我仍然遇到HTTP 504错误。但是,我注意到所有行都保存到数据库中。这应该意味着即使我收到错误,Controller代码也会继续处理?我该如何解决?
谢谢
这是示例代码:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use Session;
use Excel;
use File;
use DB;
use Validator,
Carbon\Carbon,
Auth,
App\User,
Illuminate\Support\Facades\Route;
class ExcelUploadController extends Controller
{
public function index(){
#code goes here
}
public function upload(Request $request)
{
#this method uploads the excel file
if($request->hasFile('file'))
{
ini_set('max_execution_time', '300');#set to 5 mins
$path = $request->file->getRealPath();
$data = Excel::load($path)->get();
if(!empty($data) && $data->count())
{
foreach ($data as $rows) {
foreach ($rows as $row) {
$name = $row->name;#first column
$address = $row->address;
#code to save to database
}
}
}
}
}
}
答案 0 :(得分:0)
无论我设置了多少max_execution时间,我总是会超时。
我所做的解决方法是通过AJAX处理上传。我使用JavaScript读取Excel文件的每一行。每行都通过AJAX POST提交到Route中定义的方法。该方法与问题中的样本平行。
我也在看Laravel Queue来处理请求。