【问题标题】:PHP running in Background/ServerPHP 在后台/服务器中运行
【发布时间】:2015-03-02 02:35:11
【问题描述】:

我想像这样在服务器中运行 PHP,例如我想检查客户的生日...

$someones_birthday_today = mysql_query("SELECT * FROM users WHERE birthdate=".date('Y-m-d')." ");

if($someones_birthday_today){
    mysql_query("INSERT INTO birthdays (`user_id`, `birthdate`) VALUE ('$user_id', '$birthdate') ");
}

查询选择和插入不会减慢该过程。但这是来自正在开发的移动应用程序的 Http 请求。我不想在用户每次访问我的应用日志视图时都请求。

每分钟/每天/每月,它将检查今天的生日并将其插入数据库以用于通知。 当用户登录到他的个人资料时,php 将查询生日表(如果有的话)。

原因:所以我希望每次用户登录到他的个人资料时都必须查询选择和插入。这样页面加载速度会更快

研究:我对 cron 工作做了一些研究。它说它应该可以在 web 主机中访问 shell。但是有没有其他办法呢?

我正在使用 Mac Mavericks 10.9 我正在使用 Laravel

【问题讨论】:

  • 你在这个问题上有很多事情要做,你可能想缩小范围(你总是可以问多个问题)。为什么要每分钟检查一次生日,而不是每天一次? “让查询选择并插入”如何加快页面加载速度?您是否考虑过使用 cron 脚本更新数据库的任何其他方法(通过 PHP 页面似乎没有必要)?
  • 即时计算生日,而不是按照“标准”做法创建必须添加(并且不要忘记删除)的新表
  • 欢迎使用 SO,但请避免使用已弃用的 mysql_* 函数;改用 PDO / MySQLi
  • @Jordan 对不起,我忘了说这只是一个示例。
  • @Raptor 我实际上在使用 laravel。它只是一个示例代码,我的想法是使用php的后台运行。

标签: php android api laravel-4 httprequest


【解决方案1】:

Cron Jobs 不是解决此问题的正确工具。

  • 如果您希望这样做仅出于检查用户个人资料的目的,那么您只需在用户查看他的个人资料并接受它时发送​​此查询。您发布的查询运行起来并不是特别慢。

  • 如果您确实想在用户访问的每个页面上确定用户的生日,您最好在用户登录时加载生日并通过缓存来记住生日user's session data 或使用 memcached

  • 如果您想显示生日列表或进行任何其他复杂的计算,那么您可以create a view 来实现与您的选择和后续插入几乎相同的事情:

    CREATE VIEW birthdays AS 
    SELECT user_id, birthdate FROM users WHERE birthdate=CURDATE();
    

    不同之处在于您只需运行一次 CREATE VIEW 语句(它是持久的)。您可以像查询表格一样查询视图,它会在日期更改或插入新用户记录时自动更新。

    再一次 - 如果您真的不需要大量查询它或必须用它做一些花哨的事情,这将是严重的过度使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 2017-01-28
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多