首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  PHP

纯 PHP 能自动访问 api 更新数据吗?

  •  
  •   zhybzc · 43 天前 · 2682 次点击
    这是一个创建于 43 天前的主题,其中的信息可能已经有所发展或是发生改变。
    见过很多网站源码,都有自动更新数据的功能。
    但 php 正常情况下没人访问网站应该就不会运行,只有用户发送 http 请求的时候 php 才会执行,执行完了之后就马上退出了。

    那如果 php 没有后台运行的话是怎么做到自动更新数据的呢?我觉得网上的那些能自动更新数据的源码应该是没有使用系统的定时任务的,都是纯 php 实现的。
    34 回复  |  直到 2019-09-09 10:37:56 +08:00
        1
    alect   43 天前
    crontab 啊。。定时执行:
    * * * * * /usr/bin/php73 -f /home/cron.php &> /dev/null
        2
    alect   43 天前
    @alect #1 后面那句没看到。。你不去看怎么知道他更新了?你看了他不就能更新了?
        3
    zhybzc   43 天前
    @alect 也就是只能在用户访问网站的时候顺带更新吗?在 php 文件中加入一个条件判断,比如距离上次更新超过一定时间了就立刻更新。这样大多时候用户访问网站时是不会更新的,只有在超过一段时间没有更新,某个用户访问网站的时候 php 就会顺带执行更新,然后再退出。

    不过网上的那些源码真的是这样实现的吗?感觉他们好像不是这么弄的
        4
    kopisee   43 天前 via Android
    像 Discuz! 是有人访问的时候把之前的定时任务执行,所以定时关帖这些功能实际关帖操作的时间跟设定的时间有差别。

    也可以用 cron-job.org 这种网站定时访问从而触发执行。
        5
    icekingcy   43 天前 via iPhone
    你在说 CLI 模式吗?
        6
    jason56   43 天前
    swoole 了解下
        7
    xiaoriri666   43 天前
    计划任务了解一下 linux 的计划任务就可以定时实现更新数据
        8
    dyllen   43 天前
    有的网站,你访问他的时候,他会按照概率去触发定时任务,这就不需要做任何设置了。
        9
    xnode   43 天前
    有 好几种方法,
    第一种 cli 常驻内存执行
    第二种 定时任务 cli 访问
    第三种 定时任务 访问 curl url
    第四种 curl url 后 使用断开连接后 后台内存执行
        10
    tanszhe   43 天前
    while(true) {

    }
        11
    zjsxwc   43 天前
    不用 crontab
    就纯 php cli 呗

    while(1) {
    //do something
    sleep(60);
    }
        12
    explore365   43 天前
    cli
        13
    lllllliu   43 天前
    @alect 薛定谔的 PHP
        14
    lscho   43 天前
    2 楼是正解啊,一些简单的任务不需要定时任务或者常驻后台。。既然数据是给人看的,那自然会有用户去访问,触发 webhook,更新一下数据就行了。
        15
    liuxu   43 天前
    @lllllliu 别说 PHP,JAVA/PYTHON 也不行
        16
    misaka19000   43 天前
    PHP 是世界上最好的语言
        17
    robinchina   43 天前
    我用 VB 定时执行 PHP···············win 系统··
        18
    ben1024   43 天前
    其实还有个操作,访问时在调用定时任务
        19
    Hanada   43 天前 via iPad
    随便找个在线云监控,定时访问某个页面出发不就好了么,例如阿里云监控最低能以每分钟的频率来触发
        20
    Hanada   43 天前 via iPad
    出发=触发
        21
    newtype0092   43 天前
    我不要你觉得,我要我觉得,我觉得他们就是用 crontab 了。
        22
    alexmy   43 天前
    配合 crontab 刷数据,做统计多好。
        23
    linxl   43 天前
    没人访问不更新也没有问题啊...
    既然都没人访问了, 实际上定时任务没执行你也不知道啊
        24
    linxb   43 天前
    上 swoole,用毫秒定时器定时更新
        25
    tongz   43 天前
    程序在客户机安装的时候 shell_exec 创建一个 crontab 任务
        26
    zyy314680012   43 天前 via Android
    windows 计划任务 Linux crontab
        27
    zhengwenk   43 天前
    `我觉得网上的那些能自动更新数据的源码应该是没有使用系统的定时任务的,都是纯 php 实现的。`

    为什么你会觉得都是 php 实现的,依据何在?
        28
    gz911122   43 天前
    @liuxu
    java 怎么不行?
        29
    liuxu   42 天前
    @gz911122 你要说行那其实所有语言都能行
        30
    gz911122   42 天前
    @liuxu 不是,我没听明白你什么意思?
    能正面说明下吗?
        31
    liuxu   42 天前
    @gz911122 以标准 B/S 请求触发,php/java/python 作为 Server,这种非主动执是不能完成自动更新的。但如果没有这个限制,即使不依赖其他程序定时执行,只需要语言自己开发 daemon 进程程序也能完成
        32
    Mitt   41 天前
    首先 PHP 写个入口去执行 cron 操作,然后 cron 执行完后在避免 PHP 超时的情况下使用 curl 再访问一遍这个入口,相当于起线程一样的,访问完以后不等待结果直接取消,这样另一个线程也会继续执行 cron,这个线程就可以退出了,然后 cron 遍历可以设置 while 循环,在不触发 PHP 超时杀死的情况下可以一直跑,直到快超时了就用这个方法去开启新的线程来循环跑 cron, 在执行 cron 的时候可以定时写入文件时间或者其他方法来记录你这个 cron 还活着,然后用户访问网站的时候去检查一遍 cron 是否活着,死了就用上述方法去激活,这种方法虽然不稳定但是也确实符合你的要求,可以最低限度修改 PHP 配置就实现。
        33
    ETO   39 天前
    @lllllliu 这跟 php 没什么关系,只是 linux 定时任务精度的问题吧?
        34
    ETO   39 天前
    swoole 了解吧。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1010 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 18:55 · PVG 02:55 · LAX 11:55 · JFK 14:55
    ♥ Do have faith in what you're doing.