gpt4 book ai didi

php - 如何使用 cron 作业安排动态功能?

转载 作者:IT王子 更新时间:2023-10-28 23:49:27 25 4
gpt4 key购买 nike

我想知道如何安排一个动态(自动填充数据)函数在节省的时间每天自动运行?

假设我有一个表单,一旦单击按钮,它就会将数据发送到函数,该函数会发布数据。我只是想让它自动化,这样我就不必按下按钮了。

<ul>
<?php
foreach($Class->retrieveData as $data)
{
<form method="post" action="">
<li>
<input type="hidden" name="name">'.$data['name'].'<br/>
<input type="hidden" name="description">'.$data['description'].'<br/>
<input type="submit" name="post_data" value="Post">
</li>
</form>
}
?>
</ul>

现在,表单会将数据传递给函数。

if(isset($_POST['post_data'])) // if post_data button is clicked then it runs myFunction()
{
myFunction();
}

myFunction()
{
$name = $_POST['name'];
$description = $_POST['description'];
}

我尝试执行以下操作,但问题是 Cron Job 只能运行整个 .php 文件,并且我正在检索节省的时间以从 MySQL 运行。

foreach($Class->getTime() as $timeData)
{
$timeHour = $timeData['timeHour'];
$timeMinute = $timeData['timeMinute'];

$hourMin = date('H:i');
$timeData = ''.$timeHour.':'.$timeMinute.'';

if($hourMin == $timeData)
{
run myFunction.
}
}

$hourMin 是当前小时:分钟,它与从 Mysql 自动运行的已保存时间相匹配。因此,如果 $hourMin == $timeData 则该函数将运行。

如果 $hourMin 等于 $timeData,我如何运行 Cron Job 以自动运行 myFunction()

所以...

List 1 = is to be runned at 10am
List 2 = is to be runned at 12pm
List 3 = is to be runned at 2pm

10am, 12pm, 2pm 是从 MySQL 检索的 $timeHour$timeMinute,但基于每个列表 ID。

编辑

@randomSeed,

1) I can schedule cron jobs.
2) $name and $description will all be arrays, so the following is what I am trying to accomplish.

$name = array(
'Jon',
'Steven',
'Carter'
);

$description = array(
'Jon is a great person.',
'Steven has an outgoing character.',
'Carter is a horrible person.'
);

如果预定时间正确,我想解析 $name 和 $description 中的第一个数组。

在数据库中我有以下内容

postDataTime table

+----+---------+----------+------------+--------+
| iD | timeDay | timeHour | timeMinute | postiD |
+--------------------------------------+--------+
| 1 | * | 9 | 0 | 21 |
|----|---------|----------|------------|--------|
| 2 | * | 10 | 30 | 22 |
|----|---------|----------|------------|--------|
| 3 | * | 11 | 0 | 23 |
+----|---------+----------+------------+--------+

iD = auto incremented on upload.
timeDay = * is everyday (cron job style)
timeHour = Hour of the day to run the script
timeMinute = minute of the hour to run script
postiD = this is the id of the post that is located in another table (n+1 relationship)

如果难以理解.. what is quinoa

if(time() == 10:30(time from MySQL postiD = 22))
{
// run myFunction with the data that is retrieved for that time ex:

$postiD = '22';
$name = 'Steven';
$description = 'Steven has an outgoing character.';

// the above is what will be in the $_POST from the form and will be
// sent to the myFunction()
}

我只是想根据保存到 MySQL 的时间安排一切,如我在最顶部(postDataTime 表)所示。 (我会展示我尝试过的东西,但我已经搜索了无数个小时来寻找我想要完成的示例,但我找不到任何东西,而且我尝试过的东西不起作用。)。

我以为我可以使用 exec() 函数,但从它看来不允许我运行函数,否则我会执行以下操作..

$time = '10:30';
if($time == time())
{
exec(myFunction());
}

最佳答案

Cron 任务需要您预设它们运行的​​时间,它们不能(是的,您可以通过编辑您的 crontab 的脚本来解决这个问题,但我不会说这是一个很好的主意)有时间运行动态决定。这意味着您基本上有两个选择:

1) 将 cronjob 设置为每分钟运行一次,并使用您触摸的临时文件来告诉它上次运行其中一项计划任务的时间每次运行时,它都会检查是否有任务要运行临时文件的最后时间戳和当前时间,如果有则运行任务。这是一个粗略但简单的解决方案。

2) 不要使用 cron。创建一个守护进程,它检查任务需要运行的时间并将它们放入优先级队列,然后它弹出最早的元素并休眠直到运行该任务的时间。它运行任务并将其重新插入以在未来 24 小时运行并重复。这个解决方案要优雅得多,但也需要做更多的工作。

关于php - 如何使用 cron 作业安排动态功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23796257/

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