运行服务器端PHP代码,无需等待任何返回

时间:2014-05-20 11:36:17

标签: php json

我正在寻找一种在我的服务器上运行函数来压缩多个文件的方法(操作可能很长)。

我写了代码来做到这一点(它有效)但我的问题是我的浏览器等待来自服务器的响应(我用json调用调用我的函数)并且它等待太久了。客户端不关心服务器正在做什么,有人知道是否有可能要求我的服务器这样做而不等待任何响应?我想要的结局是客户端在zip操作期间可以做任何其他事情,但现在不可能。

PS:对不起我的坏事,我已经尽我所能......对不起。

服务器端:

public function zipAction() {
ignore_user_abort(true);
set_time_limit(43000);
$uid = $this->getParam('uid');
if (isset($uid)) {
    $fileName = $uid . '.zip';
    $filter = new Zend_Filter_Compress(array(
        'adapter' => 'Zip',
        'options' => array(
            'archive' => $fileName
        )
    ));
    if ($filter->filter('uploads' . DIRECTORY_SEPARATOR . $uid)) {
        foreach (glob('uploads/' . $uid . '/*') as $file) {
        unlink($file);
    }
    rmdir('uploads/' . $uid);
    rename($uid . '.zip', 'uploads' . DIRECTORY_SEPARATOR . $uid . '.zip');
}
$this->_helper->json->sendJson(....);
}

clietn方面:

$.getJSON('index/zip', {'uid': uid});

提前感谢你,

1 个答案:

答案 0 :(得分:0)

这看起来像delegating tasks是一个好主意。

您可以使用任何类型的队列服务器与那些为您完成此操作的工作人员,如果同时多次请求ziping操作,这也会降低服务器的强度。

您可以通过将任务写入数据库并拥有CRON作业来不断阅读一两个任务并执行它们,从而轻松完成。另一种方式beanstalkd,IronMQ或任何其他方式(字面上有几十种)。如果你正在使用任何框架,它可能已经拥有了让你在很短的时间内完成所需的一切。