2009-05-06 25 views
2

有没有一种设置,我可以通过该设置获得一些脚本来在PHP启动后自动加载/执行,例如让一些常量进入全局内存。带有加载脚本的PHP自动启动

此外,还有一个全球内存,可以跨用户访问?关于内存还有没有可供所有用户访问的内存?一个人设置另一个人访问它,或者每次都必须读取和写入文件,以便在某个数据库临时表中共享某个内容。

惊讶的PHP没有这个?

谢谢。

+0

这可能可以分成两个问题,以获得更好的答案。 – 2009-05-06 19:33:32

回答

2

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

简短的回答是:不,你不能这样做。 PHP并不完全是一直等待客户端请求运行的服务器。它分别处理每个HTTP请求。

长的答案是:好吧......你可以做auto_prepend_file来完成每个请求。你可以创建一些简单的bash脚本并使用它来启动Apache,然后调用一个PHP脚本,但它不会在Apache中执行。

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

0

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

+0

因此,只要apache和php启动,就无法自动运行脚本。我必须手动执行以运行脚本。 – coool 2009-05-06 19:12:23

7

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

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

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

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

0

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

0

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

第一个'外部'请求有一点点未初始化状态的概率,但我确信你可以处理它。