Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何调用PHP程序的一部分以便以后调用_Php_Asynchronous - Fatal编程技术网

我如何调用PHP程序的一部分以便以后调用

我如何调用PHP程序的一部分以便以后调用,php,asynchronous,Php,Asynchronous,我有一个PHP程序,它是这样工作的 用户上传图像 图像处理 其他时间密集型函数称为 上传确认发送给用户。 问题是第2项和第3项占用了很多时间-我如何延迟异步运行这些进程 我想在上传图像后直接开始运行进程,但仍然要继续做其他事情,而不是等待 我知道cron,但我不想安排任务——我只是不想等待它完成 我有什么选择 编辑 需要明确的是,此项目仅限于服务器端。没有javascript选项。为此需要使用ajax/jquery。上传图像后,请调用此。见打击 $.ajax({ url: 'proce

我有一个PHP程序,它是这样工作的

用户上传图像 图像处理 其他时间密集型函数称为 上传确认发送给用户。 问题是第2项和第3项占用了很多时间-我如何延迟异步运行这些进程

我想在上传图像后直接开始运行进程,但仍然要继续做其他事情,而不是等待

我知道cron,但我不想安排任务——我只是不想等待它完成

我有什么选择

编辑


需要明确的是,此项目仅限于服务器端。没有javascript选项。

为此需要使用ajax/jquery。上传图像后,请调用此。见打击

$.ajax({
     url: 'process.php',
     type: 'post',
     success: function(data) {

          //this is triggered when 2 and 3 is done.

     }


});

首先,我建议您重新安排您的任务:

用户上传图像 上传确认发送给用户

图像处理

其他时间密集型函数称为 然后,您有以下选项,即如何定义零件3和4:

备选案文1: 在第2步向用户发送确认,使用忽略用户中止并继续处理图像非最佳,因为用户仍将看到页面加载消息

选项2:IBP样式。 执行步骤1-2,然后将处理作业添加到某种数据库中。随机向用户显示图像。。图像实际上是指向php脚本的链接,该脚本忽略用户中止并处理项目队列

备选案文3: 与选项2相同,但不显示图像。相反,您必须使用cURL或类似的方法来请求自己的服务器。其思想是启动请求,不要等待它结束,只需停止主脚本执行

选项4:启动cron脚本,每5-15分钟启动一次,并执行所需任务。它还可以在后台24小时工作,在检查任务之间睡眠20秒。这个选项可能是最好的情况下,你有相对繁忙的网站

选项5:将任务添加到队列后,尝试执行exec或shell_exec之类的操作来破坏后台处理脚本

如何执行选项2和3的示例:

如果需要,将代码一分为二,这样耗时的逻辑就在一个单独的脚本中,例如timeConsumer.php。然后,您可以使用创建一个子进程,并在其中执行timeConsumer.php

或者,您可以使用或其中任何一种。在Unix/Linux系统上,您可以在命令字符串的末尾添加&以使程序在后台执行


您可以将上传图像的名称作为命令行参数传递给timeConsumer.php,然后可以通过全局变量访问该参数。这是一个数组

PHP并不是执行此任务的最佳工具。请将耗时的逻辑放在另一个脚本中,并在单独的进程中执行,也就是说,在涉及步骤1和步骤4的情况下,如何使用服务器端?作为cron运行的控制台脚本\may help@JvdBerg图像来自移动应用程序-后端是用php编写的现有系统此项目没有浏览器/客户端。只有服务器端如何才能只有步骤1和步骤4才是服务器端?图像来自移动应用程序-后端是用phpy编写的现有系统。您需要在步骤1中添加该脚本。它将在服务器端处理脚本process.php。如果3和4失败怎么办?已发送确认。步骤2说明图像已上载,未处理,因此我认为步骤3和步骤4失败没有问题:除此之外。。若实现了队列,那个么可以轻松地重新处理在下一个脚本实例中失败的映像。根据我的经验,选项4是最可靠的+1.谢谢