PHP脚本流程帮助指南

4

我不是在寻找代码,只是需要建议如何或需要什么才能实现我所描述的内容。这是最难的部分,将我的想法传达给其他人,并描述我需要做的事情,而不知道哪些函数可以帮助我。

我想通过一个简单的http web调用来执行PHP脚本A。 这很简单。 在脚本A内部,我希望它执行脚本B(我知道怎么做),并且我希望它也执行脚本C,但只在60秒的时间范围内执行一次,无论脚本A在此期间被调用多少次,因为脚本A将在该时间范围内被多次调用,并且需要持续执行脚本B。 当经过60秒(或我想指定的任何时间)后,脚本A就会重置自身,以便在新的60秒时间范围内再次可执行脚本C。计时器= sleep(x)。 那么我需要做什么才能使得脚本A在执行一次脚本C之后的60秒内排除执行脚本C呢?就像执行脚本C的代码被“锁定”或跳过一样。我应该寻找哪些函数来学习这个呢?结构问题困扰着我。

2个回答

2
我会使用sessions。将您呼叫C的时间记录在一个会话变量中,并且在60秒自那时起不允许A呼叫C。在A的顶部(必须在脚本的任何输出之前进行)添加以下内容:
session_start();

当你想要调用C时,使用类似这样的代码:
if (!isset($_SESSION['c_call_time']) || $_SESSION['c_call_time'] < time() - 60) {
    $_SESSION['c_call_time'] = time();
    // call C
}

@user655685提出了一个有效的观点,即脚本可能由不同的用户调用,并且时间限制分别适用于每个用户。如果这是一个问题,您可以通过声明自定义会话处理程序来解决它,这些处理程序为所有用户使用相同的存储位置。请参见手册,了解如何执行此操作的说明(在他们的示例中,您将忽略传递给读取和写入回调的$id参数)。

嗯,看起来是个好主意。我熟悉会话变量的基本用法。在这种情况下,它被用作时间比较器。我是唯一的用户,所以调用会话只与我有关。我只使用这个C调用一次,拨打Linphone,所以我们不希望每次按A键时都拨打Linphone。当Twilio按A键时,B记录来电号码和文本消息。IVR然后解析B生成的文本文件。Linphone是在Twilio第一次传入A的短信时启动IVR的东西。很棒,对吧?你给了我我想要的,非常感谢! - Nanosynth
听起来是一个有趣的项目!很高兴我能提供一些帮助。 - Nick

1
会话可以解决这个问题,但如果脚本由另一个用户调用,则会出现问题,因为PHP仅在PHP环境中单独运行,这将是不可能的。您将需要创建一个外部变量(即文件)或数据库条目,以跟踪上次运行的时间戳,然后每分钟删除文件(文件/数据库条目应具有上次运行的时间戳)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接