通过ajax发送响应,但继续PHP脚本

时间:2014-02-02 20:18:41

标签: php ajax

我有一个脚本通过http将文件上传到我的网络服务器,我需要的是服务器向http帖子发送响应,然后继续运行一些命令。

例如

文件通过http

发布

服务器将文件插入数据库并将响应发送到http。

但我需要服务器在响应后继续运行并继续对文件进行一些编辑。

示例php

function uploadFile(){

$imageName = $tmpname . '.jpg';
            move_uploaded_file ($_FILES["foto"]["tmp_name"], $targetDir . $imageName);

$data = Array('ALL THE DATABASE DATE')
$returnid = $this->uploader_model->addData($data);  

//I NEED IT TO RETURN THIS TO THE AJAX HTTP REQUEST
            echo json_encode(array(
                    'returned' => 'Successfully uploaded..',
                    'id' => $returnid
            ));

//I NOW NEED IT TO KEEP RUNNNG SOME EDITING ON THE IMAGE HERE IE..
shell_exec(" run some image editing here 2>&1");

}

我看到忽略用户中止,如

ignore_user_abort(1); // run script in background 
set_time_limit(0); // run script forever

但这是否意味着脚本将永远运行并在服务器收到多个请求时崩溃?对于如何在此场景中正确使用此功能感到有点困惑

请帮助

1 个答案:

答案 0 :(得分:0)

除非您制作脚本,否则您的脚本将无法永久运行,例如:通过使用无限循环。话虽如此,这不一定是一个好方法。

为了确保最佳的用户体验,您应该通过推迟任何耗时的任务来确保您的脚本快速执行。例如,您可以创建任务队列并使用cron运行排队任务。

或者,如果您决定使用问题中描述的解决方案,那么在文件成功上传后,最好使用AJAX 运行该解决方案。当用户导航离开网页时,AJAX请求可能会被终止,因此您仍需要确保服务器继续执行您的脚本。

顺便说一下,如果你真的想向客户发送一些东西,你也应该运行flush()。