php全局变量

php全局变量,php,global-variables,Php,Global Variables,嗯,我对php相对来说是新手,但以前在web应用程序上工作过。 我目前正在用php编写代码并运行ApacheHTTPD。我使用的数据库是PostgreSql 此web应用程序将非常频繁地连接到DB。出于这个原因,我正在寻找一种使我不必在每次用户访问页面时启动连接的方法 在php中是否可以为所有用户设置相同的变量 例如,我想在变量中保存一个DB连接对象,并随时使用它 当Apache服务器停止时,该变量将超出作用域。Smarmy answer first。是的,你可以。它被称为数据库;-) 不过,说

嗯,我对php相对来说是新手,但以前在web应用程序上工作过。 我目前正在用php编写代码并运行ApacheHTTPD。我使用的数据库是PostgreSql

此web应用程序将非常频繁地连接到DB。出于这个原因,我正在寻找一种使我不必在每次用户访问页面时启动连接的方法

在php中是否可以为所有用户设置相同的变量

例如,我想在变量中保存一个DB连接对象,并随时使用它


当Apache服务器停止时,该变量将超出作用域。

Smarmy answer first。是的,你可以。它被称为数据库;-)

不过,说真的,如果您试图跨请求持久化值,Apache+PHP(没有任何其他内容)不是最佳选择。通常,如果需要这种类型的功能,可以通过硬文件或数据库连接来完成,每次触发请求时都会刷新该连接。显然,这两者都不足以维持完全独立的联系


一般规则是一个请求一个连接。有一些方法可以保持连接,从而降低这个数字,但是
pg_connect
这本应该是解决这个问题的一种规范方法,但它似乎被打破了。您可能希望调查或取而代之。我不知道PDO驱动程序如何处理Postgre的
ATTR_PERSISTENT

频繁连接数据库是用PHP编写的web应用程序的一个常见功能,这就是为什么oci_pconnect()函数使用连接的持久缓存,可以在不同的脚本/页面请求中重复使用(因此每个Apache子进程或PHP进程只需支付一次DB连接开销)-参见


您想自己管理DB连接池有什么特别的原因吗?如果您完全有这个想法,那么您可以使用共享内存段之类的东西来存储要在进程之间共享的数据对象,但是您需要一个互斥系统,以避免在修改时因竞争条件而死亡共享数据的“看门狗”当一个进程死机而没有正确释放互斥锁时,要清理问题,等等。

您意识到每次调用网站时,PHP脚本都会启动一个全新的生命周期?即使全局变量也只能访问一个页面。这里的确切设计目标是什么?创建所需的db连接,并在该连接上运行所有准备好的查询。保存t connection object稍后:)@Mayank:我们在谈论多少个连接?因为大多数情况下,你不会遇到连接太多的问题。@PeeHaa每次创建连接(据我所知)都是一种开销。此外,我总是支持运行准备好的查询,而不是正常的查询。所以,问题是创建连接的次数,而不是创建连接的次数。如果可能的话,我想在Apache服务器内存中创建一个连接池。@Mayank:我想你不必担心连接。如果您只需为每个请求(例如,在引导文件中)设置一个连接,您就可以了。而且你想做的事根本不可能。PHP是以一种“什么都不能共享”的方式制作的。因此,1 connection==1 request我正在寻找一个可以保存db连接对象的解决方案。这个解决方案将把一个db连接对象保存到一个db中,为了检索这个对象,我必须连接到db:)@Mayank:可能您对PHP和数据库如何交互有一点错误的想法。也许你可以把问题弄得更具体、更具体一些,然后会有一些东西提示你自己。@Kerrek我知道PHP与后端交互的方式。我只是在这里碰碰运气,如果我能得到点什么的话。谢谢大家的帮助。我觉得pgpool很有趣;will会更仔细地研究一下,全局变量在会话中是否保持活动状态?我在one.php中创建了一个全局数组,并在文件末尾调用init()函数初始化该全局变量。init函数将具有仅初始化一次的逻辑。我希望这个全局变量跨越不同的页面。需要什么特别的东西吗?这(不是)一个推荐的做法吗?