我完全没有找到这个问题的答案。希望这里有人可以提供帮助。
我有一个 PHP 脚本(具体来说是一个 WordPress 模板),当用户点击它时,它会自动导入和处理图像。问题在于图像处理会占用大量内存,尤其是当多个用户同时访问模板并启动图像处理时。我的服务器因此多次崩溃。
我的解决方案是,如果图像处理函数已经在运行,则不执行它。在函数开始运行之前,我会检查一个名为 image_import_running 的数据库条目,看看它是否设置为 false。如果是,则该函数运行。该函数所做的第一件事就是将 image_import_running 设置为 true。然后,在全部完成后,我将其设置回 false。
它在理论上运行良好。从那以后,该网站就没有崩溃过,我可以告诉你。但是它有两个主要问题:
如果用户在页面加载时关闭页面,脚本将永远不会完成图像处理,因此永远不会将 image_import_running 设置回 false。在手动将其设置为 false 之前,该模板将永远不会再次处理图像。
如果脚本在处理图像时超时 - 如果队列中有很多图像,则很有可能出现这种情况 - 您遇到的问题与第 1 个问题基本相同:脚本永远不会达到目的它将 image_import_running 设置回 false。
为了处理第一个问题(我意识到的两个问题中的第一个),我在脚本中添加了 ignore_user_abort(true)
。有用吗?我不知道,因为 2 号仍然是一个问题。这就是我难住的地方。
如果我可以询问服务器脚本是否正在运行,我可以这样做:
if($import_running && $script_not_running) {
$import_running = false;
}
但是如何设置 $script_not_running
变量呢?打败我。
我已经与您分享了整个故事,以防您有其他绝妙的解决方案。
最佳答案
尝试使用
ignore_user_abort(true);
即使用户离开并关闭浏览器,它也会继续运行。
您可能还想在数据库记录中输入一个数字而不是 true false 并设置可以一起运行的最大进程数
关于php - 如果脚本已经在运行,请不要运行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18114011/