|
撰/看場人
問題來源最近有很多人提出和下面差不多的疑難—— test.html的內容:
<html>
<head><title>簡單表單</title></head>
<form action="result.php" method="GET">
<p>First Name:
<input type="text" name="firstname">
<p>
<input type="submit" name="submit" value="Submit">
<input type="Reset">
</form>
</body>
</html>
result.php的內容:
<html>
<body>
<?php
print($firstname);
?>
</body>
</html>
之後在browser執行http://localhost/result.php?firstname=testing&submit=Submit,卻竟出現以下情況: Notice: Undefined variable: firstname in c:\localhost\result.php on line 4 問題解答其實程式完全沒有問題,問題是出在php 的version。 之前php一直default將Post、Get、Cookie、Environment及Built-in (以下簡寫為GPC)中的變數直接register成global variable,所以大家一直可以正接喚出GPC的變數使用。即是說上面的疑問程式理應是可以執行成功的。 但是,由PHP的4.2版本開始情況卻剛好相反,GPC變數不再default被register在global中,所以很明顯地上面疑問程式的問題是和php的version有關的。 解決方法(一)在php程式(即上面的result.php)最前面加上以下程式碼: if (function_exists ("import_request_variables")){
@import_request_variables("CGP", "");
$HTTP_GET_VARS = $_GET;
$HTTP_POST_VARS = $_POST;
$HTTP_COOKIE_VARS = $_COOKIE;
$PHP_SELF = $_SERVER["PHP_SELF"];
$SERVER_NAME = $_SERVER["SERVER_NAME"];
$REMOTE_ADDR = $_SERVER["REMOTE_ADDR"];
}
解決方法(二)打開你server中php的php.ini 檔,找出下面句子: register_globals = Off
將Off改成On,即:
register_globals = On
儲存檔案並重新啟動你的網頁伺服器(如apache/ IIS) 總結以上兩個方法均可解決問題,但第二個方法卻不是普通用戶可以做到的(要Server Admin才做到)。大家遇到這麼多的煩惱,都是因為大家過去一直習慣了register global 吧﹗
發表日期:2004-06-20
|
|
|