PHP自启动和加载脚本

3
有没有一种设置方式,可以让一些脚本在PHP启动时自动加载/执行,就像将一些常量加载到全局内存中一样?
另外,是否有一个可供所有用户访问的全局内存?关于内存,是否没有一个可供所有用户访问的内存?一个人设置,另一个人访问它,或者我必须每次读写文件才能共享某些内容,或者使用数据库临时表。
很惊讶PHP没有这个功能?
谢谢。

这个问题可能可以分成两个问题来获得更好的答案。 - James Socol
5个回答

7

PHP没有提供一个全局的缓存,可以在多个脚本之间共享。根据您的需求,您可以以不同的方式解决这个问题。

如果您想设置全局常量并且这些常量计算起来不会很耗时,您可以编写一个定义这些常量的脚本,然后使用php.ini中的auto_prepend_file选项自动运行此脚本,使其在请求的文件之前运行。

如果您要计算昂贵的值,您可以使用memcached作为可由所有PHP脚本访问的全局缓存。有多个客户端API可以使用PHP连接到memcached。

当然,如果这些值是每个用户独有的,您也可以将全局值存储在用户会话中。甚至可以使用MySQL。


3
如果我理解正确,您想让PHP在启动Apache时执行一些脚本,以存储一些全局共享的值。如果我错了,请编辑/评论。
简短的答案是:不行。PHP并不是一个一直运行等待客户端请求的服务器。它处理每个HTTP请求。
长答案是:嗯...你可以使用auto_prepend_file在每个请求上执行它。您可以创建一些简单的bash脚本,然后使用它来启动Apache,然后调用PHP脚本,但它不会在Apache中执行。
至于共享内存,有几个选择。使用平面文件、数据库或memcached可能是最可移植的。一些安装启用了共享内存函数,但不能保证。

0

如果您正在使用某种MVC框架,您可以在那里定义变量并确保每次加载文件。您可以使用$GLOBALS['var_name'] = $value; 并在该请求期间的其他文件中访问它。


所以没有办法在Apache和PHP启动后自动运行脚本。我必须手动运行脚本。 - coool

0
每个运行的PHP脚本实例都有自己的全局变量、函数、常量等,没有直接从一个运行的脚本实例复制变量到另一个实例的方法。但是,可以使用间接方法,如使用文件、数据库或memcached。

0

如果您使用某些子系统(例如APC共享内存,甚至是memcached),则可以通过编辑其启动脚本(/etc/init.d/[apache2|httpd])在Apache启动时自动运行数据生成器脚本。例如,您可以在启动|重新启动后的生成器脚本中添加curl或wget请求。

第一次“外部”请求可能存在未初始化状态的小概率,但我相信您可以处理这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接