gpt4 book ai didi

php - 检查 php 脚本运行状态

转载 作者:行者123 更新时间:2023-12-02 18:25:39 26 4
gpt4 key购买 nike

简短背景:

我的数据库将包含一个电子邮件列表,用户将创建价格表并发送给这些客户的电子邮件。我希望单击按钮即可完成此操作,以确保发送前价目表正确无误,而不是设置 CRON 作业来为我处理此问题。

流程

我正在使用 Codeigniter 和远程主机上的 Linux 服务器。

  1. 用户单击按钮即可启动该过程。将数据库列状态设置为我在模型中获得的 PID。
  2. AJAX 调用 Controller 函数。此操作会一直运行,直到完成向客户发送电子邮件为止。 (目前为虚拟 sleep 功能)。
  3. 当脚本完成(HTTP 请求完成)时,ajax 会删除处理图标。

    • 如果用户在脚本启动后访问页面,如果 status != 0,则循环到 HTTP 请求 Controller 检查 PID 的状态。
    • 我注意到我获得的 PID 始终为 5012,并且在我的脚本中似乎始终在运行。
    • 我正在运行 if (shell_exec("ps aux | grep ". $pid . "| wc -l") > 0) {//PID is running } 作为我的检查是否进程正在运行,其中$pid是函数的参数。

将这一切整合在一起的最后步骤:

  • 如果用户访问该页面并且脚本正在运行,我无法查看脚本是否以及何时完成
  • 我不想暴力查询数据库,因为这似乎会成为以后的性能问题
  • 我最终想向网站添加一个静态图标,这样用户就不必返回此处检查状态

TLDR

我正在 codeigniter 中运行 PHP 脚本,并且需要一种方法,当我访问不同的页面或刷新当前页面时,我可以检查脚本是否仍在运行以获得正确的用户反馈。

最佳答案

由于性能原因,您希望避免使用数据库,但在某些地方您需要一个标志或其他方式来识别脚本正在运行。 PHP session 已退出,因为从另一个 session 查看它的人不会设置相同的标志。

尝试使用比数据库更快的东西 - 比如内存缓存。

<?php
// if memcache->is_running is set
// echo some response message saying it's running and exit
// set memcache->is_running w/ the start time maybe
// ... your code
// write memcache->is_running start timestamp and end timestamp to db or file
// clear memcache->is_running

关于php - 检查 php 脚本运行状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18405566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com