0

我正在尝试使用 exec 命令通过 CLI 调用 CodeIgniter 控制器,以便在不等待服务器回复的情况下发送电子邮件。

但是,这根本行不通,我真的不明白为什么。

该过程在用户控制器中通过库调用开始

$this->load->library('Mailer');
...
$this->mailer->send_user_email($email,$token);

$email发送时%20替换为,因此 CI 可以将@其作为有效 URL 接受

然后在Mailer Library中代码如下

chdir('/var/www/projectroot');
$command='php index.php mailing send_email '.$mail.' '.$token.' > output.txt 2> error.txt &';
exec($command);

然后在邮件控制器中应该发送邮件

 $transport = Swift_SmtpTransport::newInstance(
   ....

  echo $mailer->send($message);

我已经测试过直接在服务器命令行中调用这个控制器,它工作得很好。此外,变量中生成的字符串$command是正确的,并且如果我手动将其提供给 CLI 也可以工作。

也没有给 output.txt 文件提供任何类型的输出,也没有给 error.txt

我该如何解决这个问题?

4

1 回答 1

0

检查可能有用的一件事是,您的代码是直接使用还是由系统函数间接使用,$_SERVER['REMOTE_ADDR'],这在 CLI 模式下不存在。我自己对 CLI 也有类似的问题。

您可以通过将 core/Input.php(2.1.3 中的第 351 行)修改为:

    if(isset($_SERVER['REMOTE_ADDR']))
        $this->ip_address = $_SERVER['REMOTE_ADDR'];
    else
        $this->ip_address = '0.0.0.0';
于 2013-05-01T06:00:27.850 回答