如何创建php计划进程?

如何创建php计划进程?,php,Php,我被要求创建一个web应用程序,在一定时间内向用户发送更新 比如说 用户1从2009年6月到8月每5分钟请求更新一次 user2仅在今天每10分钟请求更新一次 user3从2009年6月到8月每1天请求更新一次 我不知道如何自动后台处理。。。我应该添加到cron吗? cron可以在windows服务器上工作吗(在windows上是apache) windows不使用cron,但我认为它确实有某种调度。一般来说,答案是肯定的,cron作业是在后台运行这些作业的方式。在Windows服务器上,您可以

我被要求创建一个web应用程序,在一定时间内向用户发送更新

比如说

  • 用户1从2009年6月到8月每5分钟请求更新一次
  • user2仅在今天每10分钟请求更新一次
  • user3从2009年6月到8月每1天请求更新一次
  • 我不知道如何自动后台处理。。。我应该添加到cron吗?
    cron可以在windows服务器上工作吗(在windows上是apache)

    windows不使用cron,但我认为它确实有某种调度。一般来说,答案是肯定的,cron作业是在后台运行这些作业的方式。

    在Windows服务器上,您可以编写计划任务。在计划任务中,可以将其设置为按所需频率运行更新

    从:

    使用计划任务,您可以计划在最方便的时间运行任何脚本、程序或文档

    更具编程性的方法是保存用户的设置和上次更新时间。然后,您可以使用一个脚本来检查并根据需要运行更新


    您可以有一个计划任务,每分钟左右运行一次该脚本,该脚本将根据用户的设置进行更新。

    如果您在专用服务器上,您可以使用windows server上的系统工具>计划任务。
    如果您确实无法更改服务器上的任何内容,您可以尝试在Linux服务器上运行cron,向windows服务器发送请求。。。呵呵

    我刚刚写了一个项目,在WindowsXP和2003下使用Apache、PHP和计划任务。它非常简单,工作原理与cron类似

    需要注意的是,计划任务的GUI控件没有命令行那么精细。我每天只能安排一次。幸运的是,您可以使用命令行执行此操作

    schtasks/create/sc minute/mo 10/st 00:00:00/tn“此处任务名称”/ru“系统”/tr“C:\wamp\bin\php\php5.3.0\php.exe\”C:\Program Files\script.php\”


    这将在“系统”用户标识下创建每10分钟运行一次的计划任务(从午夜开始),称为“任务名称”。看到路径周围的转义引号了吗?您需要在有空格的路径周围加上转义引号。

    正如Marcel所建议的,我将创建一个cron作业(*nix)/计划任务(Windows),并让它每分钟左右运行一次

    然后,此作业将查看所有用户的更新订阅,确定哪些需要发送新的更新,然后发送它们。显然,您希望此作业在不到一分钟的时间内完成(如果作业每分钟运行一次),如果您尝试一次性处理多个用户,这可能是一个问题

    我不建议尝试从PHP中创建和管理cron作业/计划任务。只设置一个作业一次,然后用PHP代码处理其余的作业要容易得多


    <>如果Con作业/计划任务不适合你,你也可以考虑对你网站的普通请求进行支持。例如,Wikipedia的MediaWiki软件是如何处理后台任务的——它们被从作业队列中拉出来,并作为不相关页面请求的一部分进行处理。

    添加一个Cron或计划任务,以最低的公共间隔(5分钟?1分钟?)执行

    计划任务应该查询一个数据库表,该表包含有关用户任务频率的信息。我将以秒表示频率,然后使用UNIX时间戳来确定执行的资格。这样计算就比较容易了:

    • 查找当前时间,四舍五入到最接近的公共间隔(假设60秒的间隔):现在=时间戳-(时间戳%60)
    • 查找间隔为当前时间段偶数除数的用户
    该表可以如下所示:

    CREATE TABLE `scheduled_tasks` (
      `id` int(7) unsigned NOT NULL auto_increment,
      `user_id` int(7) unsigned NOT NULL,
      `task` varchar(32) NOT NULL,
      `interval` int(10) NOT NULL,
      `date_start` date NOT NULL default '0000-00-00',
      `date_end` date NOT NULL default '2030-12-31', -- Hopefully you won't be still maintaining this app 
      PRIMARY KEY  (`id`)
    ) ;
    INSERT INTO `scheduled_tasks` (user_id, task, interval, date_start, date_end )
    VALUES
      (1, 'standard_job', 5*60,  '2009-06-01', '2009-08-01'),
      (2, 'standard_job', 10*60, CURDATE(),  CURDATE() ),
      (3, 'standard_job', 24*60*60, '2009-06-01', '2009-08-01')
    
    要查找要运行的作业,此查询可以工作:

    SELECT `user_id`, `task`
    FROM `scheduled_tasks` 
    WHERE (UNIX_TIMESTAMP() - (UNIX_TIMESTAMP() % 60 ) ) % `interval` = 0
      AND CURDATE() BETWEEN `date_start` AND `date_end`
    

    它返回一个要运行的用户/任务列表。如果需要,您可以为每个用户添加多个条目。

    定义更新。你的意思是更新页面吗?(我想不是,因为你可以在时间结束时简单地刷新页面,使用元刷新或Javascript…)你是说电子邮件吗?像发送消息或电子邮件一样更新。用户可以设置自己的首选项。。比如每5分钟向我发送一次更新,从2010年2月1日至10日向我发送更新,等等。。。就像一个预定的任务。但我可以在同一时间拥有10个以上的用户(可能是100个用户?)仅供参考:用户不只是3个用户,他们可以超过10个、20个、50个或更多。。。那么把所有东西都放在cron上好吗?有没有什么好的php类可以让使用cron变得更容易