0

Zend Frameworkのディレクトリ構造とcronジョブに関連する投稿がかなり見つかりましたが、明確な答えはありません:(

メールを送信するジョブを作成するための次のコードがあります。スクリプト(emailNotification.php)がパブリックディレクトリの/ jobsの下にある限り、完全に機能します。

public function emailAction() {

    $request = $this->getRequest();
    if ($request->isPost()) {

        $emailFrom = $request->getPost('emailFrom');
        $messageFrom = $request->getPost('messageFrom');
        $subject = $request->getPost('Sub');
        $emailTo = $request->getPost('emailTo');

        // create a queued job
        date_default_timezone_set('UTC');            
        $q = new ZendJobQueue();
        $ts = date('Y-m-d H:i:s', time()+30);
        $id=$q->createHttpJob('jobs/emailNotification.php',array('emailFrom'=>$emailFrom,
                'messageFrom'=>$messageFrom,'subject'=>$subject,
                'emailTo'=>$emailTo),
                array('name'=>'email notification using a single job execution scheduled to run after 30 seconds','schedule_time'=>$ts));

        if(!$id)
            $this->_helper->json(array('status' => 'success', 'message' => "Queued job didn't work."));

        $this->_helper->json(array('status' => 'success', 'message' => "Email sent successfully."));
    } // request->isPost()

}// function emailAction

私のディレクトリ構造は、ZFによって作成されたデフォルトの構造です。

  [MyProject]
     [application]
     [data]
     [docs]
     [library]
     [public]
        index.php
     [scripts]

別のディレクトリ、たとえばpublic/jobsではなくscripts/jobsからスクリプトを実行するようにcreateHttpJobを変更するにはどうすればよいですか?他にやるべきことはありますか?

4

1 に答える 1

0

それは、cron ジョブの呼び出し方法と、そのスクリプトの開始時に実行しているブートストラップの量 (存在する場合) に大きく依存します。コードを次のように変更します。

$id=$q->createHttpJob(APPLICATION_PATH.'/../scripts/jobs/emailNotification.php', [...]

まず、cron スクリプトで APPLICATION_PATH が設定されていることを確認するだけです。

于 2012-05-29T18:26:39.147 に答える