如何在指定时间触发PHP函数(含发往Discord的cURL函数)
PHP指定时间触发Discord cURL请求实现方案
方案1:服务器端一次性定时任务(推荐)
首先把你的cURL逻辑封装为独立PHP脚本,示例如下:
<?php // 你自己的业务逻辑,以下为Discord Webhook请求示例 $discordWebhook = '你的Discord Webhook链接'; $postData = [ 'content' => '定时触发的消息内容', // 可补充embeds等其他Discord支持的参数 ]; $ch = curl_init($discordWebhook); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_exec($ch); curl_close($ch); ?>
如果你用的是Linux服务器,直接用at命令配置一次性定时任务即可:
- 先将目标时间(如2021年8月18日EST上午10点)转换为服务器所在时区的对应时间,避免时区误差
- 终端执行
at 10:00 08/18/2021(替换为转换后的服务器时间) - 输入执行命令
php /你的脚本存放路径/discord_request.php,按Ctrl+D保存即可,系统会在指定时间自动执行脚本
如果是需要周期性重复触发,用crontab -e添加对应时间规则即可。
方案2:PHP常驻进程延迟执行
如果无法操作服务器定时任务,且定时间隔较短(不超过24小时),可以直接在PHP代码中做时间判断:
<?php // 关闭PHP执行超时限制 set_time_limit(0); // 指定目标时间与时区 $targetTime = new DateTime('2021-08-18 10:00:00', new DateTimeZone('EST')); $waitSeconds = $targetTime->getTimestamp() - time(); if ($waitSeconds > 0) { // 休眠到目标时间点 sleep($waitSeconds); } // 到点后执行cURL逻辑 // ... 此处放你的cURL代码 ?>
注意:该方案需要保持PHP进程一直运行,进程被中断后任务会失效,不适合长时间定时场景
方案3:Discord Bot内置定时
如果你已经部署了Discord PHP Bot,可以直接用Bot框架的定时组件实现:
- 部署常驻运行的Discord Bot服务
- 调用框架的定时任务接口,注册一次性执行任务,指定到目标时间点触发你要的cURL请求或者Discord消息推送即可
该方案适合已有Bot运行环境的场景,不需要额外新增定时服务。
注意事项
- 所有时间计算必须统一时区,避免因时区不一致导致触发时间偏差
- 调用Discord接口时注意遵守官方速率限制,避免触发封禁
- 重要任务建议添加日志记录,方便排查执行失败的问题
内容的提问来源于stack exchange,提问作者AnotherUser
相关产品推荐
相关产品推荐

