我有以下设置:
在我的路线中:
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
...等
我已将控制器方法恢复到原来的状态,但错误仍然存在。
你能告诉我如何解决这个问题吗?
答案 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
1}} {/ 1}}秒
您可以在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 。它会在那之后起作用。