如何解决Laravel 5中的超时错误

时间:2015-05-15 23:49:11

标签: php laravel

我有以下设置:

在我的路线中:

Route :: get('articles','ArticlesController @ index');

控制器中的索引方法很简单:

public function index()
{
   $articles = Article::all();
   return View('articles.index', compact('articles'));
}

并在视图中:

@extends('../app')
@section('content')
<h1>Articles</h1>
<p>
    @foreach($articles as $article)
    <article>
        <h2><a href="{{action('ArticlesController@show', [$article->id])}}">{{$article->title}}</a></h2>
        <p>{{ $article->body }}</p>
    </article>
    @endforeach
</p>
@stop

我试图替换:

$articles = Article::all();

$article = Article::latest()->get();

这样我才能真正展示最新的文章。 我收到了错误:

FatalErrorException in Str.php line 322:
Maximum execution time of 30 seconds exceeded

并且调用堆栈是:

in Str.php line 322
at FatalErrorException->__construct() in HandleExceptions.php line 131
at HandleExceptions->fatalExceptionFromError() in HandleExceptions.php line 116
at HandleExceptions->handleShutdown() in HandleExceptions.php line 0
at Str::snake() in helpers.php line 561
at snake_case() in ControllerInspector.php line 105
at ControllerInspector->getVerb() in ControllerInspector.php line 78
at ControllerInspector->getMethodData() in ControllerInspector.php line 39
at ControllerInspector->getRoutable() in Router.php line 251
at Router->controller() in Router.php line 226
at Router->controllers() in Facade.php line 210
at Facade::__callStatic() in routes.php line 21
at Route::controllers() in routes.php line 21
in RouteServiceProvider.php line 40

...等

我已将控制器方法恢复到原来的状态,但错误仍然存​​在。

你能告诉我如何解决这个问题吗?

13 个答案:

答案 0 :(得分:44)

超过30秒的最长执行时间错误与Laravel无关,而是与您的PHP配置无关。

以下是修复方法。您需要更改的设置为max_execution_time

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 30     ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
memory_limit = 8M      ; Maximum amount of memory a script may consume (8MB)

您可以将max_execution_time更改为300 您可以在max_execution_time = 300部分的phpinfo函数的输出中找到PHP配置文件的路径。

答案 1 :(得分:34)

这是一个纯粹的PHP设置。 另一种方法是通过在php文件的顶部插入以下内容来增加特定php脚本的执行时间限制:

ini_set('max_execution_time', 180); //3 minutes

答案 2 :(得分:10)

在Laravel:

在查询之上添加set_time_limit(0)行。

set_time_limit(0);

$users = App\User::all();

它可以帮助您处理不同的大型查询,但您需要改进查询优化。

答案 3 :(得分:3)

有时您只需要优化代码或查询,设置更多max_execution_time不是解决方案。

代码的运行时间不应超过30秒。

答案 4 :(得分:1)

如果使用PHP7,我建议您更改public / .htaccess

中的默认值
<IfModule php7_module>
   ...
   php_value max_execution_time 300
   ...
</IfModule>

答案 5 :(得分:1)

尝试

ini_set('max_execution_time', $time);
$articles = Article::all();

其中$time以秒为单位,请立即将其设置为0。请确保在功能完成后将其恢复到60

答案 6 :(得分:1)

使用__construct方法设置时间限制,或者您也可以在希望有较大时间限制的位置设置索引控制器。

public function __construct()
{
    set_time_limit(8000000);
}

答案 7 :(得分:0)

执行与laravel不相关,请转到php.ini文件 在php.ini文件中设置max_execution_time = 360(时间可能会根据需要而变化) 如果您想增加特定页面的执行力,请在页面顶部写入ini_set('max_execution_time',360)

否则在htaccess中 php_value max_execution_time 360

答案 8 :(得分:0)

添加上述查询

ini_set(“ memory_limit”,“ 10056M”);

答案 9 :(得分:0)

如果您要在Heroku上托管Laravel应用,则可以在项目的根目录中创建custom_php.ini,只需添加max_execution_time = 60

答案 10 :(得分:0)

我刚才有一个类似的问题。但是,这与修改php.ini文件无关。它来自for循环。如果您嵌套了for循环,请确保正确使用了迭代器。就我而言,我是从内部迭代器迭代外部迭代器。

答案 11 :(得分:-3)

             选项-MultiViews -Indexes     

RewriteEngine On

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

#cambiamos el valor para subir archivos
php_value memory_limit 400M
php_value post_max_size 400M
php_value upload_max_filesize 400M
php_value max_execution_time 300 #esta es la linea que necesitas agregar.

答案 12 :(得分:-4)

您需要按 CTRL + F5 。它会在那之后起作用。