如果脚本已经在运行,请不要运行脚本

bou*_*def 6 php wordpress

我找到这个问题的答案是完全不成功的.希望有人可以提供帮助.

我有一个PHP脚本(一个特定的WordPress模板),当用户点击它时会自动导入和处理图像.问题是图像处理占用大量内存,特别是如果多个用户同时访问模板并启动图像处理.由于这个原因,我的服务器多次崩溃.

我的解决方案是,如果它已经运行,则不执行图像处理功能.在函数开始运行之前,我会检查一个名为image_import_running的数据库条目,看它是否设置为false.如果是,则该函数运行.函数的第一件事就是将image_import_running设置为true.然后,在完成所有操作后,我将其设置为false.

它在理论上很有效.该网站没有崩溃,我可以告诉你.但它有两个主要问题:

  1. 如果用户在加载页面时关闭页面,则脚本永远不会完成处理图像,因此永远不会将image_import_running设置为false.在手动将图像设置为false之前,模板将永远不会再次处理图像.

  2. 如果脚本在处理图像时超时 - 如果队列中有很多图像,这很有可能 - 你的问题基本上与1号相同:脚本永远不会达到将image_import_running设置回的程度假.

为了处理1号(我意识到的两个问题中的第一个),我添加ignore_user_abort(true)了脚本.它有用吗?我不知道,因为2号仍然是一个问题.那就是我难倒的地方.

如果我可以询问服务器脚本是否正在运行,我可以这样做:

if($import_running && $script_not_running) {
    $import_running = false;
}
Run Code Online (Sandbox Code Playgroud)

但是我如何设置该$script_not_running变量?甘拜下风.

我和你分享了这整个故事,以防你有其他一些出色的解决方案.

Dvi*_*lva 1

尝试使用 ignore_user_abort(true);它会继续运行,即使该人离开并关闭浏览器。

您可能还想在数据库记录中放置一个数字而不是 true false 并设置可以一起运行的最大进程数