【问题标题】:Laravel 5.1 - Execute a PHP script in the BackgroundLaravel 5.1 - 在后台执行 PHP 脚本
【发布时间】:2016-06-30 22:57:19
【问题描述】:

我有一个使用 Laravel 5.1 编写的 Web 应用程序,它在用户请求某个页面或单击按钮时运行脚本。这应该在后台激活脚本。我已经尝试过使用作业和队列。

这是我的代码块: 我的工作.php

class myjob extends Job implements SelfHandling, ShouldQueue {
use InteractsWithQueue, SerializesModels;

/**
 * Create a new job instance.
 *
 * @return void
 */
public function __construct()
{
    //
}

/**
 * Execute the job.
 *
 * @return void
 */
public function handle()
{
    //
    set_time_limit(0);
    $this->writeJobLogs('Error', 'Start Execution');
    //Job Processing Code
    $this->writeJobLogs('Error', 'End Execution');
}
}

控制器.php

class ManageController extends Controller {
    public function testJob(){
        $this->dispatch(new myjob());
    }
}

作业处理代码预计至少需要 10 分钟才能执行。 现在,当我运行代码时,它会引发错误,之后给出如下:

[Symfony\Component\Process\Exception\ProcessTimedOutException] 进程 ""C:\wamp\bin\php\php5.5.12\php.exe" "artisan" queue:work --queue="default" --delay=0 --memory=128 --sleep=3 - -tries=0 --env="local"" 超出 超时 60 秒。

& 作业处理代码预计将根据用户请求同时执行多次。所以我怀疑队列是否可以正常工作,或者我还有其他更好的选择。如果有,请提出建议。

【问题讨论】:

    标签: php laravel symfony-process


    【解决方案1】:

    Laravel 队列不会在后台运行进程,而是让您能够将执行推迟到稍后的时间。您的脚本超时,因为它超过了 php.ini 中指定的最大执行时间。

    【讨论】:

    • 如果我想在后台运行进程,你有什么建议?
    • 我相信 exec 或 shell_exec 命令是您想要用来在后台执行 PHP 代码的命令。看到这个:florian.ec/articles/running-background-processes-in-php
    • 这是一个关于这个主题的 SO 帖子:stackoverflow.com/questions/45953/…
    • 感谢您的快速回复。这篇文章表明他们正在使用基本的 PHP exec 和 shell exec 命令,在 Laravel 中还有其他可能的方法吗?
    • 据我所知,这是很好的旧常规 PHP 来实现这一点。
    【解决方案2】:

    我想到的第一个解决方案(可能不适合您)是在控制器内部的单独功能上设置日志记录命令,例如。

    public function writeLog()
    {
        // Do your logging here
    }
    

    并对指向这些函数的路由进行 AJAX 调用,例如;

    // Laravel Route
    Route::get('ajaxDoStuff', 'FooController@writeLog');
    
    // AJAX on Blade Template
    $.ajax({
    //all the usual stuff for an AJAX call
    url: "/ajaxDoStuff"
    });
    

    无论如何我都会这样做,不确定它是否适合你?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 2021-08-27
      • 1970-01-01
      相关资源
      最近更新 更多