Php 如何在Zend Framework中运行一个长的后台进程
我试图运行一个后台进程,当用户向某个操作发送表单时,告诉他该进程已启动,并且在十分钟内更新数据。但是我有一些麻烦。 我的行动如下:Php 如何在Zend Framework中运行一个长的后台进程,php,zend-framework,Php,Zend Framework,我试图运行一个后台进程,当用户向某个操作发送表单时,告诉他该进程已启动,并且在十分钟内更新数据。但是我有一些麻烦。 我的行动如下: public function actualizarLineasAction() { $this->view->titulo = $this->_helper->x->lang("Actualizar el número de líneas de todos los clientes"); if(
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
内容类型:text/html
解析错误:语法错误,第9行的/homez.636/innovaco/fenix/public/index.php中出现意外的T_OBJECT_运算符
我担心服务器php的版本,在通过htaccess的应用程序中,它设置为5_4,但在comand line中,我不能这样做
这就是这个错误的问题吗?如果没有,发生了什么
在Zend框架中进行后台处理而不维护客户端等待响应的最佳方式是什么
我非常感谢你的帮助
多谢各位
您好。对于我将使用的后台进程 在PHP手册中,请参见注释部分和第一个白色注释 如果使用此函数启动程序,为了使其在后台继续运行,程序的输出必须重定向到文件或其他输出流。否则将导致PHP挂起,直到程序执行结束
您可以在下面的用户贡献部分找到一些示例。好吧,最后我可以在命令行下运行PHP5.3,并且可以使用exec()函数来完成。一切正常,我运行了一个后台进程,在finalize中大约需要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.
非常感谢Tim和Adrian,你的回答非常有用 Zend不支持PHP4。是的,我知道,但我不明白这对Zend应用程序有什么影响,我正在运行一个comand。。。你的意思是,如果服务器在5.4中运行,那么这个错误不会出现,并且一切正常吗?index.php的第9行是什么?好的,你不能在PHP4中链接对象方法调用(
bootstrap()->run()
),所以这就是为什么你会得到那个特定错误的原因,但是ZF应用肯定不会在PHP4中运行。另外,我非常确定proc\u open
在脚本完成之前不会返回。如果您的服务器有多个PHP版本,则需要找到5.4版的PHP CLI路径。然后调用exec('php…')
而不是调用exec('/path/to/php5.4/php…')
。你可能需要和你的主持人核实一下。谢谢你,阿德里安,我已经仔细阅读了这些文档,你说得对。我要用exec()来做这件事。@jortsc总是很乐意帮忙
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.