在cron作业和Web服务器执行的PHP脚本之间共享数据


Share data between cron-job and webserver executed PHP scripts

下面是脚本如何进行数据共享的常见方法:

cron作业--计划-->主脚本

HTTP请求--触发-->子脚本

主脚本-->[数据库]<--子脚本

但是,他们是否可以使用下面的任何一个来共享数据,而不是使用数据库?

  • global变量
  • 系统存储器
  • 会话存储器
  • memcache/apc/任何其他类似的东西
  1. 全局变量-
  2. 系统存储(来自注释:这是命令行)-,因为这将涉及一个启动另一个,并且仍然是单向的
  3. 会话存储-,使用命名会话,但默认情况下将使用file(可以配置为使用shm然后在内存中…)
  4. memcached-是
  5. apc-是,但需要显式配置才能在clisapi中启用
  6. 文件-。为了加快速度,您可以使用ramfs将文件存储在内存中的文件系统中
  7. sockets-yes(使其中一个成为侦听器并从另一个进行连接)
  8. 数据库-是(为什么不呢?)

如果我遗漏了任何内容,您可以搜索php进程间通信

  1. 不可能
  2. 系统存储是什么意思
  3. 不可能
  4. memcach:如果两个应用程序都知道值的密钥,那就没问题了,apc:不可能

剩下的唯一方法是fs。要么是DaveRandom建议的套接字,要么是一个简单的文件。

你为什么不想使用数据库?你具体想做什么?

当然,您可以从cron作业(php-cli)执行的脚本连接到MySQL服务器,就像从Web服务器连接一样,假设命令行的php.ini已经加载了数据库库。

若不想使用数据库,可以设置套接字或使用临时传递文件。但使用数据库将是最有效和整洁的方式。

我支持一个文件解决方案:

  • 编码/理解/维护很简单
  • 它是崩溃万无一失的,当出现问题时,你不会丢失内容
  • 它可以防止并发写入
  • 如果您的操作系统决定需要缓存以进行频繁访问,那么它的速度与内存一样快。(通常不尝试取代操作系统优化会更简单/更安全/更快。)