如果伺服器的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,也和伺服器相關。