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

标签 php wordpress

我完全没有找到这个问题的答案。希望这里有人可以提供帮助。

我有一个 PHP 脚本(具体来说是一个 WordPress 模板),当用户点击它时,它会自动导入和处理图像。问题在于图像处理会占用大量内存,尤其是当多个用户同时访问模板并启动图像处理时。我的服务器因此多次崩溃。

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

它在理论上运行良好。从那以后,该网站就没有崩溃过,我可以告诉你。但是它有两个主要问题:

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

  2. 如果脚本在处理图像时超时 - 如果队列中有很多图像,则很有可能出现这种情况 - 您遇到的问题与第 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/

相关文章:

php - 计算每个页面请求的查询数?

php - NGINX/PHP/MySQL 非英文字符位置错误

php - 如何在 PHP 中的 MySQLi 准备语句中使用 SQL 语句中的引号?

php - 单元测试创​​建对象的方法

php - 带有wordpress作为子文件夹的Rails heroku应用程序,无法登录到管理员

php - Html 表单传递不带点的输入复选框变量

php - 在 WordPress 中使用 preg_match_all 返回部分图像的 url

javascript - 跨站点脚本 Iframe 权限被拒绝问题

wordpress - 无法在 Wordpress 中更改站点可见性

php - 将 WordPress 网站从实时迁移到本地时,特色图像被破坏