register_globals不能在執行期間(runtime)設定

如果伺服器的php有開啟register_globals,但不想使用,卻又沒有權限可以更改環境設定,或者不想改,那麼怎麼辦?

本來想說使用ini_set來操作,原本以為可以,但後來想到一個問題,如果在執行期間更改設定,那麼在未更改設定前,GET、POST傳遞過來的變數怎麼辦,而在執行期間更改後,如果原本已註冊成全域變數是否會取消?

實際測試結果,執行期間無法設定register_globals。

在PHP官網上也找到以下敘述

Please note that register_globals cannot be set at runtime (ini_set()). Although, you can use .htaccess if your host allows it as described above. An example .htaccess entry: php_flag register_globals off.  完整原文

這裡可以找到所有的設定項目,其中「Changeable」指的是可以更改設定項目的地方,總共有四個屬性,分別是PHP_INI_USER、PHP_INI_PERDIR、PHP_INI_SYSTEM、PHP_INI_ALL,請見Where a configuration setting may be set。有些項目只能在執行期間設定,有些只能在.htaccess、http.conf及php.ini,有些則沒有限制。

register_global屬於PHP_INI_PERDIR,屬於不可在執行期間設定的項目,所以最前面提到關於我對於變數註冊的疑惑便不再,從這裡也可以瞭解到,有些設定必須在執行之前便需就緒,而且這些可能屬於伺服器該執行的動作,所以可以設定在http.conf及.htaccess裡面,實際上php.ini在更改後也需要重啟apache,也和伺服器相關。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Proudly using Dynamic Headers by Nicasio WordPress Design