[英]Reintroduce $HTTP_POST_VARS in PHP 5.3
我需要在共享托管環境中運行遺留 PHP應用程序 。 我已經向我的客戶承諾我將支持該遺留應用程序一段時間,但我發現它不起作用,因為它廣泛使用已棄用的$HTTP_POST_VARS
。
降級PHP不是一種選擇。 修補應用程序可能是不可行的,因為PHP文件是從Windows可執行文件生成的(我不是在開玩笑!),每次從桌面重新生成站點時,我們都會丟失修改。
我問是否有辦法告訴PHP為主機上的所有網站或僅針對特定虛擬主機重新引入$HTTP_POST_VARS
。 任何其他選項/建議表示贊賞
你可以這樣做
config.php文件
$HTTP_POST_VARS = &$_POST;
$HTTP_GET_VARS = &$_GET;
$HTTP_COOKIE_VARS = &$_COOKIE;
的.htaccess
php_value auto_prepend_file /path/to/config.php
PHP doc auto_prepend_file字符串
指定在主文件之前自動解析的文件的名稱。 包含該文件就像使用require函數調用它一樣,因此使用了include_path。
特殊值none禁用自動前置。
編輯:要進一步徹底,這些是其他超級全局,也可能是別名:
$HTTP_SERVER_VARS = &$_SERVER;
$HTTP_POST_FILES = &$_FILES;
$HTTP_SESSION_VARS = &$_SESSION;
$HTTP_ENV_VARS = &$_ENV;
怎么樣的
$HTTP_POST_VARS = $_POST;
如果您可以在頁面中包含代碼,那應該可行。 當然你必須有權訪問源代碼並在windows中重新編譯exe,但你說可以 。
register_long_arrays
適用於5.3,但是他們在php 5.4中使用了這個
http://www.php.net/manual/en/ini.core.php#ini.register-long-arrays
是的,此設置標有PHP_INI_PERDIR
,因此您可以通過單獨的.htaccess或單個ini文件進行設置,也可以全局設置。
看起來以下可以工作。
首先,使用以下代碼在某處創建edisplaypatch.php
<?php
if (getenv('EDISPLAY_PATCH')) {
if (!isset($HTTP_GET_VARS)) $HTTP_GET_VARS = $_GET;
if (!isset($HTTP_POST_VARS)) $HTTP_POST_VARS = $_POST;
if (!isset($HTTP_COOKIE_VARS)) $HTTP_COOKIE_VARS = $_COOKIE;
}
?>
此代碼可以推廣並與需要舊的長數組的任何其他程序一起重用
然后在Apache的vhost配置中添加
SetEnv EDISPLAY_PATCH true
重新加載Apache。
測試代碼有效:如果SetEnv不存在則不顯示任何內容,如果存在則顯示您在querystring中作為rnd
參數發送的內容
<?php
echo $HTTP_GET_VARS['rnd'];
//phpinfo();
?>
缺點:我在每個PHP請求中都包含一個文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.