2011-08-30 72 views
1

在我的舊項目中,post變量用作$ var_name而不是$ _post [「var_name」]。所以我需要更改所有文件中的代碼。所以我想在php.ini中更改任何內容((自動提取選項))來處理此操作而不更改編碼。謝謝。PHP Post變量

回答

4

您的舊項目使用了一個現在已被棄用(自5.3)和被刪除(自5.4)被稱爲「註冊全局變量」的功能。請閱讀爲什麼此功能被刪除:http://php.net/manual/en/security.globals.php

總之,不,你不想改變php.ini,以便您的舊應用程序可以工作。相反,您將更有可能希望修復舊的應用程序,以使其不需要註冊全局變量。


也就是說,如果這不是一個面向公衆的應用程序或安全不是一個問題,有一個辦法,你甚至可以爲PHP 5.4配置php.ini中有你的應用程序的工作。

警告:這涉及到改變你的php.ini文件中,以便註冊全局的影響進行了仿真。這意味着所有 PHP腳本將受到註冊全局,只是你想要的人的影響。

如前所述,extract($_REQUEST);將基本上完成註冊表全局變量的用法。現在,使用auto_prepend_file指令,您可以在每個腳本之前運行這一行代碼。

也就是說,將該文件保存在某處(最好在您的PHP包含路徑中),並且將其稱爲register_globals.php

<?php 
extract($_POST); 

現在php.ini,加入這一行(路徑可能是相對於你的PHP包含路徑)。

auto_prepend_file = "register_globals.php" ; emulates register_globals 

此更改的影響是require("register_globals.php");發生在任何腳本運行之前。

+0

警告 不要在不受信任的數據上使用extract(),如用戶輸入(即$ _GET,$ _FILES等)。如果你這樣做,例如,如果你想運行臨時依賴於register_globals的舊代碼,確保你使用了一個非覆蓋extract_type值,例如EXTR_SKIP,並且要知道你應該按照在variables_order中定義的相同順序提取php.ini。 –

+0

我不明白Col. Shrapnel的一些事情。首先,暫時使用register_globals意味着什麼?其次,如果對'extract'的調用是腳本中的第一件事情,那麼使用非覆蓋提取選項的意義是什麼?但是,是的,我同意提取順序(如果存在衝突)可能會發揮作用,但我不同意它必須與'variables_orders'匹配,除非與該指令的一致性至關重要。 – erisco

+0

所以,如果你不懂基本的東西,你最好問問答案。 –

2

我知道你不願意改變很多代碼,但不好的設計應該糾正,不管它意味着什麼麻煩。改變你的全局變量到適當的後期變量,否則你會後悔的。有99%的機會你最終會自己得出這個結論,不妨現在就做。

+0

我想知道爲什麼沒有人抨擊創可貼的方法。 –

1

register_globals是一種以獲取提交的值作爲變量而不是post,get,request變量的舊方法。但是這在新版本中已被棄用。你需要用你的代碼來接受$ _post ['email']而不是$ email。