【问题标题】:Laravel how to get data from a job?Laravel如何从工作中获取数据?
【发布时间】:2019-08-15 06:32:13
【问题描述】:

我得到了 Laravel 队列(使用 Redis)。我需要从这个队列中得到这份工作。我正在尝试做:

$queues = Queue::getRedis()->zrange('queues:confluence:delayed' ,0, -1);
foreach ($queues as $job) {
    $tmpdata = json_decode($job);
    $command = $tmpdata->data->command;
}

但是在$command 我得到了这个字符串:

"O:16:\"App\Jobs\TestJob\":8:{ s:7:\"\u0000*\u0000name\";s:5:\"12345\";s:6:\ "\u0000*\u0000job\";N;s:10:\"connection\";N;s:5:\"queue\";s:10:\"confluence\";s:15:\"chainConnection \";N;s:10:\"chainQueue\";N;s:5:\"延迟\";i:5;s:7:\"链式\";a:0:{} }"


> It does not seems like json or anything else (what I can parse to
> normal object/array). How can I get job data in this way?

【问题讨论】:

    标签: laravel queue jobs


    【解决方案1】:

    看来我在这里遇到了同样的问题:Laravel 8 problem to unserialize command from payload (of failed job)

    $command = unserialize($tmpdata->data->command);将无法工作,因为我使用的序列化字符串“\u0000”中有空值:

    $str = str_replace('\u0000', ' ', $payload['data']['command']);
    

    在此字符串修复后,我使用:

    $unserialized = unserialize($str, ['allowed_classes' => false]);
    

    但这似乎是一个糟糕的解决方案。一定是 Laravel 有更好的东西可以提供。

    【讨论】:

      【解决方案2】:

      您看到的数据是序列化的。你可以这样反序列化它:

       $command = unserialize($tmpdata->data->command);
      

      尽管小心,并阅读此命令的文档,因为它存在潜在的安全风险:https://www.php.net/manual/en/function.unserialize.php

      【讨论】:

        猜你喜欢
        • 2020-12-25
        • 2021-09-29
        • 1970-01-01
        • 2019-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-29
        相关资源
        最近更新 更多