0

ユーザーがアクションにフォームを送信したときにバックグラウンド プロセスを実行しようとしています。プロセスが開始され、10 分後にデータが更新されることを伝えます。しかし、私にはいくつかの問題があります。私のアクションでは、次のようになります。

public function actualizarLineasAction()
    {
        $this->view->titulo = $this->_helper->x->lang("Actualizar el número de líneas de todos los clientes");
        if($this->getRequest()->isPost())
        {
            if($this->_getParam('start'))
            {
                $descriptorspec = array(
                    array('pipe', 'r'),
                    array('file', 'myfile.txt', 'a'),
                    array('pipe', 'w'),
                 );
               $proc = proc_open("php ".APPLICATION_PATH."/../scripts/update_clientes_lineas.php > ".APPLICATION_PATH."/../scripts/update_lines.log", $descriptorspec, $pipes);
               proc_close($proc);
                $this->view->message = $this->_helper->x->__("El proceso empezó en unos minutos habrá terminado y los contadores de líneas de los clientes estarán actualizados");

            }
        }
    }

スクリプトファイル(このスクリプトでは、検証とチェックを含む12500行の大きなファイルを解析してデータベースに挿入したい)テスト用の簡単なスクリプト:

<?php 
//It is only for test
for ($index = 1; $index < 1800; $index++) {
    $x = $index * 18;
    sleep(10);
}
echo "El resultado ".$x;
?>

このスクリプトに init、define、botstrap などを実行すると、同じ結果が得られます (今はそれらなしで試しています)。

X-Powered-By: PHP/4.4.9
Content-type: text/html

<br />
<b>Parse error</b>:  syntax error, unexpected T_OBJECT_OPERATOR in <b>/homez.636/innovaco/fenix/public/index.php</b> on line <b>9</b><br />

サーバー php のバージョンが心配でしたが、アプリケーションでは htaccess を介して 5_4 に設定されていますが、コマンド ラインでは実行できません。

それがこのエラーの問題ですか?そうでない場合は、何が起こっているのですか?

クライアントが応答を待たずにバックグラウンド プロセスを実行するための Zend Framework への最良の方法は何ですか?

助けていただければ幸いです。

どうもありがとうございました!

ご挨拶。

4

2 に答える 2

0

ついに、PHP 5.3 をコマンドラインで実行できるようになり、exec() 関数を使用して実行できるようになりました。すべて正常に動作します。ファイナライズに約 12 分かかるバックグラウンド プロセスを実行し、ユーザーは別のビューにリダイレクトして、プロセスの終了時にプロセスの結果を待ちます。

exec("php.5.3 ".APPLICATION_PATH."/../scripts/update_clientes_lineas.php  > ".APPLICATION_PATH."/../scripts/update.log 2>&1 &");
//2>&1 redirect STDERR to STDOUT and STDOUT to /null, & allows to run a process in background.

ティムとエイドリアンに感謝します。あなたの答えはとても役に立ちました!

于 2013-05-09T19:12:12.343 に答える