为什么我的Laravel上传会产生HTTP错误504

时间:2018-08-13 13:13:22

标签: php laravel laravel-5

我在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
               }
             }
           }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

无论我设置了多少max_execution时间,我总是会超时。

我所做的解决方法是通过AJAX处理上传。我使用JavaScript读取Excel文件的每一行。每行都通过AJAX POST提交到Route中定义的方法。该方法与问题中的样本平行。

我也在看Laravel Queue来处理请求。