[英]What would cause isset() and in_array() to both incorrectly evaluate?
編輯:
一個開發人員中斷了路由。 它以導致生產失敗的方式影響了我的頁面,這就是為什么它的行為與使用郵件程序的其他服務器不同的原因。
因此,我們有一個名為$ mailSettings的數組。 如果未將新值提供給郵件程序,則此數組處理默認值。 在這里設置:
$mailSettings = array(
"TOADDRESS" => $wuMail_Config->DefaultToAddress,
"TONAME" => $wuMail_Config->DefaultToName,
"CC" => $wuMail_Config->DefaultCC,
"BCC" => $wuMail_Config->DefaultBCC,
"SUBJECT" => $wuMail_Config->DefaultSubject,
"MESSAGE" => $wuMail_Config->DefaultMessage,
"HTML" => $wuMail_Config->DefaultHTML,
"FROMADDRESS" => $wuMail_Config->DefaultFromAddress,
"FROMNAME" => $wuMail_Config->DefaultFromName,
"REPLYADDRESS" => $wuMail_Config->DefaultReplyAddress,
"REPLYNAME" => $wuMail_Config->DefaultReplyName
);
現在,在下一部分中-我們分析提交的數據...在這種特定情況下,我們僅提交了一些自定義字段,其余部分則依靠默認值。
$mailData = array(
"TOADDRESS" => $email,
"TONAME" => $username,
"SUBJECT" => "Welcome to SiteName! Please verify your email address.",
"MESSAGE" => $message,
"HTML" => $message
);
因此,我們要做的是:我們采用$ mailData,然后將每個鍵名轉換為大寫版本。 因此,如果他們提交“ toAddReSs”,則在所有大寫字母中將其評估為“ TOADDRESS”,以匹配$ mailSettings數組。 我們在這里做...
foreach($mailData as $submittedOption => $submittedValue){
$submittedOptionUPPER = strtoupper($submittedOption);
$submittedOpts[] = $submittedOptionUPPER;
if(in_array($submittedOptionUPPER, $mailSettings)){
$mailSettings[$submittedOptionUPPER] = $data[$submittedOption];
} else {
echo "Mail Configuration Error";
}
}
我也嘗試過if(isset($ mailSettings [$ submittedOptionUPPER]){並且也不起作用。當我print_r $ mailData和$ mailSettings時,兩者與上面的完全相同(默認值是從我們的配置文件中正確提取的) )。
問題是我可以在eval(isset或in_array)的上方對兩個數組都執行print_r,並且它們看起來還不錯...但是在此服務器上(以及其他所有服務器),代碼進入echo“ Mail Configuration Error”。 “ 我(為了我的一生)無法解決這個問題,所以這是StackOverflow的時間。
是否有任何原因會使isset和in_array都在某件事上失敗(僅在一台特定服務器上)?
其他要知道的事實...
有任何想法嗎?
您需要使用array_key_exists($submittedOptionUPPER, $mailSettings)
或isset($mailSettings[$submittedOptionUPPER])
來檢查密鑰,但是我認為您的工作可以歸結為:
// covert keys to uppercase
$mailData = array_change_key_case($mailData, CASE_UPPER);
// check if there are keys in $mailData that aren't in $mailSettings
if(array_key_diff($mailData, $mailSettings) {
echo "Mail Configuration Error"; // do something else?
}
// merge $mailData into $mailSettings
$mailSettings = array_merge($mailSettings, $mailData);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.