簡體   English   中英

在PHP 5.3中重新引入$ HTTP_POST_VARS

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM