Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 发送特定位置的电子邮件警报_Php_Mysql_Codeigniter_Google Maps_Cron - Fatal编程技术网

Php 发送特定位置的电子邮件警报

Php 发送特定位置的电子邮件警报,php,mysql,codeigniter,google-maps,cron,Php,Mysql,Codeigniter,Google Maps,Cron,在网页上有一个谷歌地图,用户可以在其中更改位置到他感兴趣的位置,并通过按下按钮注册新工作通知。保存的兴趣位置将由谷歌地图的边界定义。每当新作业出现在该范围内时,将根据用户选择的频率(每小时或每天)向该用户发送电子邮件警报 问题:我对如何处理所有用户的所有警报感到困惑 目前,我正在考虑对一个表使用cron作业,该表包含所有的lat1、lng1、lat2、lng2、user_id,用于每小时运行一次的小时警报,另一个cron作业用于另一个表,用于每天运行一次的警报,比如说晚上9点。cron作业将循环

在网页上有一个谷歌地图,用户可以在其中更改位置到他感兴趣的位置,并通过按下按钮注册新工作通知。保存的兴趣位置将由谷歌地图的边界定义。每当新作业出现在该范围内时,将根据用户选择的频率(每小时或每天)向该用户发送电子邮件警报

问题:我对如何处理所有用户的所有警报感到困惑

目前,我正在考虑对一个表使用cron作业,该表包含所有的
lat1、lng1、lat2、lng2、user_id
,用于每小时运行一次的小时警报,另一个cron作业用于另一个表,用于每天运行一次的警报,比如说晚上9点。cron作业将循环遍历定义google地图边界的所有单个用户的lat、lng对,并查询主
作业
数据库中任何在1小时(或1天)内张贴时间戳的作业。如果有,将发送电子邮件警报


对于服务器来说,这似乎需要做很多工作,尤其是当数据库中有5000个用户的位置首选项和1000000个作业时。(30个ISH分钟完成这个任务?)我被困在这里,想要你的意见。

< P>而不是每次运行Con时搜索所有的东西(假设我正在正确地阅读这就是你正在做的),我会考虑在添加警报时执行那个检查:

警报已添加到系统中。系统检查任何匹配边界,如果找到任何匹配边界,则将每个匹配的信息存储到单独的表中。在这个新表中增加两列,一列用于每小时发送,一列用于每日发送

在每小时检查中,只发送那些尚未应用每小时标志的内容,而对于每日检查,则发送那些尚未设置每日标志的内容

然后删除任何在之后设置了这两个选项的位置


这样做,您将把要完成的工作从对每个cron作业(所有警报,所有边界)的一次大规模检查分解为对每个警报(一个警报,所有边界)的一次较小的检查。

我认为您可能可以使用此频率创建两个cron

  • 按小时计算
  • 白天
(或您喜欢的任何频率)

在php codeigniter中,与其为所有用户处理所有警报,不如在用户订阅位置时创建一个包含此作业详细信息的任务文件。例如,用户id、位置(坐标)、频率。此任务文件的确切详细信息取决于 在你的情况下,你需要分析你的系统。然后将此任务文件放在一个目录中

然后根据上面指定的频率,创建一个通用的php脚本,以在频率中调用。此脚本将在目录中循环,处理任务文件并发送电子邮件。这样,您就不用担心扫描整个数据库了。还有一些小细节,如删除、更新、删除任务文件,但这完全与实现相关


旁注,这可能是不敬的,因为您用php标记了这个问题,但如果您想知道,quartz完全可以做您想要做的事情,但它是用Java实现的。如果你愿意,你可以查出来

如何将警报添加到系统中?我想这是找到使用类似于此()的数据的最佳方法的关键。用户移动地图以找到他喜欢的地点并按下按钮。google地图边界坐标随后保存到表格中,用于每小时或每日警报。