我找到这个问题的答案是完全不成功的.希望有人可以提供帮助.
我有一个PHP脚本(一个特定的WordPress模板),当用户点击它时会自动导入和处理图像.问题是图像处理占用大量内存,特别是如果多个用户同时访问模板并启动图像处理.由于这个原因,我的服务器多次崩溃.
我的解决方案是,如果它已经运行,则不执行图像处理功能.在函数开始运行之前,我会检查一个名为image_import_running的数据库条目,看它是否设置为false.如果是,则该函数运行.函数的第一件事就是将image_import_running设置为true.然后,在完成所有操作后,我将其设置为false.
它在理论上很有效.该网站没有崩溃,我可以告诉你.但它有两个主要问题:
>如果用户在加载页面时关闭页面,则脚本永远不会完成处理图像,因此永远不会将image_import_running设置为false.在手动将图像设置为false之前,模板将永远不会再次处理图像.
>如果脚本在处理图像时超时 – 如果队列中有很多图像,这很有可能 – 你的问题与1号基本相同:脚本永远不会达到设置image_import_running的程度为假.
为了处理1号(我意识到的两个问题中的第一个),我在脚本中添加了ignore_user_abort(true).它有用吗?我不知道,因为2号仍然是一个问题.那就是我难倒的地方.
如果我可以询问服务器脚本是否正在运行,我可以这样做:
if($import_running && $script_not_running) {
$import_running = false;
}
但是如何设置$script_not_running变量呢?甘拜下风.
我和你分享了这整个故事,以防你有其他一些出色的解决方案.