下面是主和子脚本如何进行数据共享的常见方法:
cron作业--计划-->主脚本
HTTP请求--触发-->子脚本
主脚本-->[数据库]<--子脚本
但是,他们是否可以使用下面的任何一个来共享数据,而不是使用数据库?
global
变量- 系统存储器
- 会话存储器
- memcache/apc/任何其他类似的东西
- 全局变量-否
- 系统存储(来自注释:这是命令行)-否,因为这将涉及一个启动另一个,并且仍然是单向的
- 会话存储-是,使用命名会话,但默认情况下将使用file(可以配置为使用shm然后在内存中…)
memcached
-是apc
-是,但需要显式配置才能在clisapi中启用- 文件-是。为了加快速度,您可以使用
ramfs
将文件存储在内存中的文件系统中 - sockets-yes(使其中一个成为侦听器并从另一个进行连接)
- 数据库-是(为什么不呢?)
如果我遗漏了任何内容,您可以搜索php进程间通信
- 不可能
- 系统存储是什么意思
- 不可能
- memcach:如果两个应用程序都知道值的密钥,那就没问题了,apc:不可能
剩下的唯一方法是fs。要么是DaveRandom建议的套接字,要么是一个简单的文件。
你为什么不想使用数据库?你具体想做什么?
当然,您可以从cron作业(php-cli
)执行的脚本连接到MySQL服务器,就像从Web服务器连接一样,假设命令行的php.ini
已经加载了数据库库。
若不想使用数据库,可以设置套接字或使用临时传递文件。但使用数据库将是最有效和整洁的方式。
我支持一个文件解决方案:
- 编码/理解/维护很简单
- 它是崩溃万无一失的,当出现问题时,你不会丢失内容
- 它可以防止并发写入
- 如果您的操作系统决定需要缓存以进行频繁访问,那么它的速度与内存一样快。(通常不尝试取代操作系统优化会更简单/更安全/更快。)