在后台执行带有参数的类方法PHP

时间:2016-02-07 00:20:40

标签: php background fat-free-framework

我有一个将邮件发送给多个收件人的类方法,此方法接收2个参数(一个是整数,另一个是String),但是,当从主进程调用此方法时,超时到期并且发送无止境。然后,我需要在后台运行这个函数(send),我需要动态传递参数,到目前为止我已尝试使用pickedShape命令。

我确实读过某个地方,我可以传递类和方法名称,只在命令中放置一个空格。因此,我正在进行的命令是exec();但是,这个突击队不起作用,因为我没有收到邮件。

在此命令中:

  • mail.php =文件脚本php
  • 通知=班级名称
  • 发送=方法名称
  • 1 = param1
  • '文本' = param2

然后,我有很多问题:

  1. 在后台运行此命令的正确方法是什么?
  2. 如何动态传递参数?我是否只是将命令字符串与我的变量连接起来?
  3. 顺便说一句,这与#34; Fat-Free Framework"。

    一起使用

    提前谢谢你,

    来自墨西哥,

2 个答案:

答案 0 :(得分:2)

除了Omar的回答之外,我还在这里发布了另外两个特定于框架的解决方案:

解决方案1:

使用框架的abort()方法断开HTTP客户端并继续在后台发送邮件:

$f3->route('GET|POST /myroute',function($f3){
    echo 'Well done Callaghan!'; // message for the client
    $f3->abort(); // stop response here => the client can request something else
    // now we can run extra tasks in the background
    ini_set('max_execution_time',3600);// it may take some time
    $mail->send();
    $mail->send();
    $mail->send();
    ...

});

解决方案2:

使用框架的Cron插件来安排后台任务:

$cron=Cron::instance();
$cron->set('MassMailing','Mass\Mailing->go','@hourly');
// Mass\Mailing->go will be executed every hour

您需要一个允许cron jobs启用此解决方案的网络托管。

答案 1 :(得分:0)

exec 需要一个字符串参数,你也必须使用 escapeshellarg 来转义你发送的文本,所以整个命令应该看起来像这样:

 $text_to_send = "Hello World , "
 exec("/usr/bin/php /home/cesar/www/mails.php notices send 1 " . $text_to_send . " > /dev/null");

现在你 mail.php 你可以像这样回复文字:

$text_to_send = $argv[5];

你还有其他的选择,可以在除了这个之外的后台发送电子邮件,例如你可以将文本存储在数据库表中,然后你创建一个工作的cron作业,让我们说1分钟,检查是否有在该表中发送的任何文本,然后从数据库发送后删除该文本。

其他替代方法是使用libray创建后台作业以发送电子邮件,例如 php-resque gearman