2013-04-30 74 views
0

我試圖通過CLI使用exec命令來調用CodeIgniter控制器,以便在不等待服務器回覆的情況下發送電子郵件。通過CLI的CodeIgniter執行控制器

但是,這根本不起作用,我不明白爲什麼。

的過程中用戶控制器開始與庫調用

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

$email%20更換@發送,從而CI可以在接受它作爲有效的URL

然後梅勒庫的代碼如下

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

我怎樣才能解決這個問題呢?

+1

你應該在任何情況下使用'escapeshellarg($電子郵件)'和' escapeshellarg($ token)'來防止shell命令注入。也許這會修復錯誤。 – hek2mgl 2013-04-30 15:50:35

+0

Nicelly指出,但是,不,沒有解決任何問題 – 2013-04-30 15:53:27

+0

你打電話給控制器怎麼樣?從命令行或瀏覽器? – raidenace 2013-04-30 15:53:52

回答

0

有一點可以檢查是有用的,你的代碼是直接使用,還是通過系統函數$ _SERVER ['REMOTE_ADDR']間接使用,CLI模式中不存在該代碼。我自己也有點類似CLI的問題。

你可以檢查,如果這是通過修改核心/ 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';