2

我有一个批量 Flash 上传脚本,可以将视频文件上传到目录。简单的。上传完成后,它会为该文件创建一条 mysql 记录,然后继续处理队列中的下一个文件。

在此之前,我希望它调用一个后台进程,将上传的 avi avi 文件转换为与 ipod 兼容的 mp4 文件,并生成一些预览缩略图。正如您可以想象的那样,这需要一些时间......我可以简单地将转换代码放在文件上传器中......但它会为每个文件挂起 10-20 分钟,这是一个诺诺(甚至你它是一个仅限管理员的功能)。

所以我希望它在后台分叉转换过程,并在转换文件的同时进行下一次上传。

像这样的东西可以完成这项工作,还是我实际上必须使用 php fork 函数?

exec("/usr/bin/php ./convert.php?id=123 > /dev/null 2>&1 &");
4

3 回答 3

1

exec() 的 php 手册页说:

如果使用此函数启动程序,为了使其继续在后台运行,程序的输出必须重定向到文件或另一个输出流。否则将导致 PHP 挂起,直到程序执行结束。

所以,是的,你的 exec 电话可以解决问题。

于 2009-10-08T21:26:25.820 回答
1

在架构上实现这一点的最佳方式是工作队列,您的 PHP 前端将后端文件中的守护进程提供给进行转换。将 PHP 与您的工作分离,您的 UI 将始终保持响应式。

好久没写PHP了,不过我的理解是任何启动的进程都属于最大超时规则,都是在Web服务器下运行的。您不希望出现这种情况;您当然不希望 Web 请求能够启动其他进程。

编写一个在 Web 服务器外部运行的简单守护程序,并监视文件夹中的上传文件。您的 Web 前端将它们转储到那里,并且您的守护程序为每次转换生成一个线程,直到您拥有多少个内核。在架构上,这是更明智的选择。

另请参阅我对这个问题的回答,这也是相关的。

于 2009-10-08T21:27:16.020 回答
0

它会成功,但它似乎是一个难以管理的想法。如果您只是要启动并且永不回头,那么事情可能会很快出错。

如何安排一个每隔几分钟运行的脚本并轮询仍在队列中的任何内容。您可以访问 cron 吗?

于 2009-10-08T21:29:06.907 回答