什么会导致isset()和in_array()错误地评估?

时间:2018-04-30 15:37:24

标签: php evaluation isset

编辑:

开发人员打破了路由。它影响了我的页面,导致它在生产时失败,这就是为什么它的行为与使用邮件程序的其他服务器不同。

因此,我们有一个名为$ 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时,两者都与上面完全相同(默认值被正确拉出从我们的配置文件)。

问题是我可以为两个数组执行print_r直接超过eval(isset或in_array)并且它们看起来很好......但是在这个服务器上(并没有我们的其他服务器),代码进入echo&# 34;邮件配置错误。"我不能(对于我的生活),想出来......所以它是StackOverflow的时间。

是否有任何原因并且in_array都会失败(仅在一个特定的服务器上)?

要了解的其他事实......

  1. $ mailSettings位于函数wuMail($ mailData){}
  2. $ mailData从包含wuMail文件的任何页面传递给wuMail()(用于配置/功能)
  3. 在其他服务器上,wuMail($ mailData)不会导致错误。在这个服务器上,它认为数组中不存在这些值(也就是说它认为开发人员试图通过传递错误的密钥错误地使用wuMail())〜我们这样做是为了防止开发人员错误,这样我们就可以轻松地找到错误的页面如果是这样的话,使用wuMail ......好吧,我们认为就是这种情况 - 并且发现没有,该功能正在评估错误。
  4. 有什么想法吗?

1 个答案:

答案 0 :(得分:3)

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