Что может привести к неправильной оценке isset () и in_array ()? - PullRequest
0 голосов
/ 30 апреля 2018

EDIT:

Разработчик нарушил маршрутизацию. Это повлияло на мою страницу таким образом, что это привело к сбою в работе, поэтому она действовала иначе, чем другие серверы, использующие почтовую программу.

Итак, у нас есть массив с именем $ 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"; 
        }
    }

Я также пытался, если (isset ($ mailSettings [$ submitOptionUPPER]) {и это тоже не работает. Когда я печатаю $ mailData & $ mailSettings, оба они точно такие же, как указано выше (со значениями по умолчанию, которые правильно извлекаются из наш конфигурационный файл).

Проблема в том, что я могу сделать print_r для обоих массивов ПРАВО НАД eval (isset или in_array), и они выглядят нормально ... но на этом сервере (и ни на одном из наших других серверов) код переходит в эхо "Mail Ошибка конфигурации. " Я не могу (ради своей жизни) понять это ... и вот пришло время StackOverflow.

Есть ли какая-либо причина, по которой isset AND in_array может что-то потерпеть неудачу (только на одном конкретном сервере)?

Другие факты, которые нужно знать ...

  1. $ mailSettings находится внутри функции wuMail ($ mailData) {}
  2. $ mailData передается в wuMail () с любой страницы, содержащей файл wuMail (для конфигурации / функции)
  3. На других серверах wuMail ($ mailData) не приводит к ошибкам. На этом сервере он думает, что значения не существуют в массиве (иначе он думает, что разработчик попытался использовать wuMail () неправильно, передав неверный ключ) ~ Мы делаем это для защиты от ошибок разработчика, чтобы мы могли легко найти страницы неправильно используя wuMail, если это так ... ну, мы подумали, что это так - и обнаружили, что нет, функция оценивает неправильно.

Есть идеи?

1 Ответ

0 голосов
/ 30 апреля 2018

Вам нужно использовать 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);
...