带有加载脚本的PHP自动启动

时间:2009-05-06 18:57:07

标签: php autostart

是否有一个设置可以让我在PHP启动时自动加载/执行一些脚本,就像让一些常量进入全局内存一样。

还有一个可以跨用户访问的全局内存吗?关于内存还没有可供所有用户访问的内存吗?一个人设置另一个人访问它或者我是否应该每次都要读取和写入文件,以便在数据库临时表之间共享某些内容。

惊讶的PHP没有这个?

感谢。

5 个答案:

答案 0 :(得分:7)

PHP不提供跨脚本共享的全局缓存。您可以根据您的要求以不同方式解决此问题。

如果要设置计算成本不高的全局常量,可以编写定义这些常量的脚本,然后自动使该脚本在请求的文件之前运行。这是使用php.ini中的auto_prepend_file option完成的。

如果要计算昂贵的值,可以使用memcached作为所有PHP脚本都可访问的全局缓存。有multiple client APIs使用PHP连接到memcached。

当然,如果这些值是每个用户,您还可以在user session中存储全局值。甚至使用MySQL。

答案 1 :(得分:2)

如果我理解正确,您希望PHP在启动Apache时执行某些脚本,以存储一些全局共享值。如果我错了,请编辑/评论。

简短的回答是:不,你不能这样做。 PHP并不是一个等待客户端请求的服务器。它单独处理每个HTTP请求。

答案很长:嗯......你可以在每个请求上执行auto_prepend_file来执行此操作。您可以创建一些简单的bash脚本并使用它来启动Apache然后调用PHP脚本,但它不会在Apache中执行。

对于共享内存,有一些选择。使用平面文件,数据库或memcached可能是最便携的。某些安装启用了Shared Memory功能,但无法保证。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

如果您使用某个子系统(如APC共享内存,甚至是memcached),您可以在apache start上自动运行数据生成器脚本,方法是编辑它的启动脚本(/etc/init.d/[apache2|httpd])。例如,您可以在start | restart之后立即向生成器脚本添加curl或wget请求。

第一次“外部”请求中有一个未初始化状态的可能性很小,但我确定你可以处理它。