【发布时间】:2018-04-30 15:37:24
【问题描述】:
编辑:
开发人员破坏了路由。它以某种方式影响了我的页面,导致它在生产中失败,这就是它与使用邮件程序的其他服务器的行为不同的原因。
所以,我们有一个名为 $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配置错误。”我不能(为了我的一生)弄清楚这一点......所以现在是 StackOverflow 时间。
是否有任何原因 isset 和 in_array 都会在某些事情上失败(仅在一个特定的服务器上)?
其他需要了解的事实...
- $mailSettings 位于函数 wuMail($mailData){ }
- $mailData 从包含 wuMail 文件的任何页面(用于配置/功能)传递给 wuMail()
- 在其他服务器上,wuMail($mailData) 不会导致错误。在这个服务器上,它认为数组中不存在这些值(也就是它认为开发人员试图通过传递一个不正确的密钥来错误地使用 wuMail())~ 我们这样做是为了防止开发人员错误,以便我们可以轻松地找到错误的页面如果是这种情况,请使用 wuMail ......好吧,我们认为是这种情况 - 并发现不,该函数的评估不正确。
有什么想法吗?
【问题讨论】:
-
使用
array_key_exitsphp.net/manual/en/function.array-key-exists.php -
array_key_exists() 有效,但我不明白为什么它不适用于 isset()。 Isset 检查它是否存在并且不为空......没有一个为空,所以 isset() 应该可以工作(就像它在我们拥有 wuMail 的每台其他服务器上一样)......为什么需要 array_key_exists() ?
-
我 print_r'd 和 var_dump'd 一切 - 没有什么是空的。 array_key_exists 有效,并且 isset() 现在有效。似乎另一个开发人员正在处理我们的一些路由(我们用于文件包含/需要的东西),这使得我们的 wuMail() 配置错误地提取了一个文件。我奖励了 array_key_exists() 的答案,因为它是一个有效的解决方案,尽管我现在已经使用 isset(),因为它再次起作用了......令人沮丧!
标签: php evaluation isset