如何在没有等待的情况下调用函数在PHP中完成?

时间:2017-03-18 06:52:55

标签: php laravel laravel-5.3

我在项目中使用Laravel框架。

我需要在PHP中调用函数,但我不需要等待它。

例如:

public function payment($Authority)
{
   if (test == 1)
       $this -> one($Authority); // don't wait for this call.
   return view ("site.payment");

}

private function one($Authority)
{
   // php code
   // python code
}

3 个答案:

答案 0 :(得分:1)

您可以尝试使用PThreads扩展程序(http://php.net/pthreads):

<?php
// create your own class from Thread
class MyWorkerThreads extends Thread
{
    private $workerId;
    private $authority;

    public function __construct($id, $authority)
    {
        $this->workerId = $id;
        $this->authority = $authority;
    }

    // main function
    public function run()
    {
        echo "Worker #{$this->workerId} ran" . PHP_EOL;
        echo $authority;

        // make some long run tasks
        $html = file_get_contents('http://google.com?q=testing');
    }
}

...
$worker = new WorkerThreads($i, $Authority);
// start new thread with long run task
$worker->start();
...
// You can wait for the job to be finished at any time, using join
$worker->join();

答案 1 :(得分:1)

Laravel有一个队列作业系统。您可以创建一个作业来调用该代码,并让您的payment方法将作业分派给队列进行处理。 (假设您不使用sync驱动程序)。

  

&#34;队列允许您推迟处理耗时的任务,例如发送电子邮件,直到稍后。推迟这些耗时的任务可以大大加快对您的应用程序的Web请求。&#34; - Laravel 5.3 Docs - Queues

public function payment($Authority)
{
    if (test == 1) {
        // send to queue for processing later
        dispatch(new SomeJob($Authority));
    }

    return view ("site.payment");
}

答案 2 :(得分:0)

您可以调用另一个进程来使用proc_open运行代码。您也可以将其写入工匠命令,然后在另一个进程中调用命令运行。

以下是使用proc_open()

的示例