2011-09-29 79 views
0

我想在Apache请求在Apache子进程中处理之前,在Apache中运行一些代码。这将不得不在Apache的父母身上发生。它会设置一些新的全局变量。有没有办法在Apache中预加载代码在PHP中?

当孩子跑的时候,会有这些新变量准备好和等待。

APC(以及类似的)不是一个选项,因为这个代码是昂贵的运行。

我试图避免编写一个PHP模块。

回答

2

就我个人而言,我将php_value auto_prepend_file config.inc.php放在.htaccess(或在httpd.conf中)中,以便在任何PHP脚本执行之前运行config.inc.php来设置我的全局变量。

请注意,这是在每个请求上运行的,所以如果它是一个大的安装脚本,它将会很昂贵。

而且,如果PHP安装为CGI,则这将不起作用,在这种情况下,您需要在php.ini中设置auto_prepend_file设置。

1

Apache本身无法执行预加载的PHP代码并为每个父代设置变量。这是一个编译好的应用程序,它只能通过服务器api执行PHP代码,并不能与PHP存储器明智地共享。这基本上是两个世界。

但是,有效的是构建在PHP中的网络服务器。这样的Web服务器可以在HTTP请求之间保存变量。事实上所有的全局变量。因此,您的代码必须与该模式兼容,并干净地关闭应该卸载的部分(代码永远不会被卸载,只有全局变量未被设置)。

这样的网络服务器是appserver-in-php

但是,我不完全明白如何/为什么/为什么要防止编写一个PHP模块(以及哪种?编译?在用户空间中?)。

2

最好的路要走,就像daiscog所说的那样,使用自动前置。如果你需要在apache内部设置它,你可以使用环境变量来传递它们:

设置它们为Apache,只要你喜欢,https://httpd.apache.org/docs/2.2/env.html,并使用$ _ENV在PHP中访问它们 - 虽然这显然不适用于像数组这样的“复杂”php变量,你可以用它来将字符串从apache传递到php。

相关问题