这可能很容易,但我似乎无法得到它......所有的代码都是:
function logRequest($currIP){
include("include/opendb.php");
$gets = $_SERVER['QUERY_STRING'];
$posts = http_build_query($_POST);
$ref = $_SERVER['HTTP_REFERER'];
$agent = $_SERVER['HTTP_USER_AGENT'];
$date = date('Y-m-d H:i:s');
$rlookup = $_SERVER['REMOTE_HOST'];
$requestType = $_SERVER['REQUEST_METHOD'];
$languageset = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$key = "GSICHECKPOINT1";
$combinedVars = array("combinded" ,$date, $currIP, $ref, $agent, $rlookup, $requestType, $languageset, $gets, $posts);
$array[0] = $encryptID = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $combinedVars, MCRYPT_MODE_CBC, md5(md5($key))));
$array[1] = $decryptID = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encryptID), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
$query = "INSERT INTO loadAttempts (date, IP, ref, useragent, dnslookup, requestType, language, gets, posts) VALUES ('$date', '$currIP', '$ref', '$agent', '$rlookup','$requestType', '$languageset', '$gets', '$posts')";
$result = mysql_query($query);
return $array;
}
我想从函数中返回$ encryptID和$ decryptID,所以我将它们放入一个数组中。 (这是错的?)
然后我尝试使用以下代码将这些返回的值提交到另一个函数中:
if(in_array($_SERVER['REMOTE_ADDR'], $blockIP)){
// Log attempt to get here.
list($encryptID, $decryptID) = logRequest($currIP);
// Send user to blockpage.
blockPage($encryptID, $decryptID);
}else{
blah blah blah
我的问题是,当我提取这些返回值时,blockPage为$ decryptID显示“Array”,我不知道我把这些值拉出函数的地方。当$ decrpytID数组已经超出创建者函数时,如何显示每个项目?
谢谢!
答案 0 :(得分:0)
问题是,当manual调用字符串传递时,您已将数组$combinedVars
传递给$data
的第三个(mcrypt_encrypt()
)参数。这将导致数组转换为字符串Array
,这就是您看到解密的原因。
数组总是转换为字符串“Array”
您需要以更智能的方式将字符串转换为数组,以显示值 - 因此您可能需要serialize()
它,或json_encode()
它,或者可能只是{{3}它,将TRUE
传递给第二个参数以返回字符串。您想要做的事情取决于您想要对数据做什么。
唯一明显错误的是combinded
应该说combined
。
我必须说我不太明白这个函数的用途 - 为什么你会有一个以加密和解密格式返回相同数据的函数,即使这有用,有什么意义呢解密您刚刚加密的数据并返回结果的额外工作,当您只能返回加密的数据时......