2009-07-30 50 views
1

在PHP中,我希望能夠設置一個變量值「superglobally」 - 這是一個我定義的值,可供在第一行服務器上運行的每個腳本訪問的代碼(即不需要require_once()任何或類似的東西)。通過在我的系統上設置環境變量varname。但它需要重新啓動才能更改Windows系統上的變量值,這不太合適。

是否有任何其他解決方案不足以修改php源代碼?

+0

小心分享*爲什麼*你這樣做? – hobodave 2009-07-30 18:27:16

回答

4

您可以使用php.ini設置auto_prepend_file來執行此任務。它允許你指定一個PHP腳本,它在任何'普通'PHP腳本執行之前運行。

引述手冊:

auto_prepend_file string

指定在主文件之前自動解析的文件名。包含文件就像使用require()函數調用一樣,因此使用include_path。

特殊值none禁用自動預先設置。

爲了讓變量的超級全球存在,只是延長其他超級全局的一個,像你這樣$ _ENV,如沒有,

<?php 
$_ENV['mystuff'] = "Hello World!"; 
$_SERVER['FOO'] = "BAR"; 
?> 

乾杯,

5

如果您正在使用Apache,你可以看看mod_env

它將允許您在Apache的配置(和.htaccess文件中使用SetEnv指令,如果您的A帕什服務器配置,所以你可以使用這些),就像這樣:

在我的Apache的文件:

<VirtualHost *> 
     ServerName  tests 
     DocumentRoot /home/squale/developpement/tests 

     .... 

     SetEnv MY_TEST_VARIABLE "Hello, World!" 

     .... 

</VirtualHost> 

(需要是一個Apache的重新啓動才能予以考慮)

還是在.htaccess文件:

SetEnv MY_OTHER_TEST_VARIABLE "This is looking nice !" 

(立刻考慮)

,然後,這些變量在$_SERVER可供選擇:

var_dump($_SERVER); 

給我:

array 
    'MY_TEST_VARIABLE' => string 'Hello, World!' (length=13) 
    'MY_OTHER_TEST_VARIABLE' => string 'This is looking nice !' (length=22) 
    'HTTP_HOST' => string 'tests' (length=5) 
    'HTTP_USER_AGENT' => string 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.1) Gecko/20090716 Ubuntu/9.04 (jaunty) Shiretoko/3.5.1' (length=105) 
    'HTTP_ACCEPT' => string 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' (length=63) 
    'HTTP_ACCEPT_LANGUAGE' => string 'en-us,en;q=0.5' (length=14) 
    .... 
    .... 

這不是$_ENV喜歡你的要求...但是,幾乎;-)
這個想法是真的一樣^^