簡體   English   中英

什么會導致isset()和in_array()都錯誤地評估?

[英]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都在某件事上失敗(僅在一台特定服務器上)?

其他要知道的事實...

  1. $ mailSettings位於函數wuMail($ mailData){}中
  2. $ mailData可從包含wuMail文件的任何頁面傳遞至wuMail()(用於配置/功能)
  3. 在其他服務器上,wuMail($ mailData)不會導致任何錯誤。 在此服務器上,它認為值不存在於數組中(也就是它認為開發人員試圖通過傳遞不正確的密鑰來錯誤地使用wuMail())〜我們這樣做是為了防止開發人員出錯,以便我們可以輕松地錯誤地找到頁面如果是這種情況,請使用wuMail ...好吧,我們認為是這樣-發現沒有,該函數的評估不正確。

有任何想法嗎?

您需要使用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.

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