Как проверить домен в массиве? - PullRequest
0 голосов
/ 27 февраля 2020

Я был в этом весь день, и я не могу понять это. Я выдал, возможно, 6 разных решений, но не могу заставить это работать.

Ситуация: Страница загрузки. У нас есть массив, который анализирует и сопоставляет метафайл с локальной переменной, которая содержит желаемое доменное имя. Мы хотим, чтобы оба соответствовали. Таким образом, эта проверка не проходит, и она назначает "external = yes" , думая, что домены не имеют никакого отношения друг к другу, и переходит к остальной части сценария. Мы очень хотим, чтобы external = no, когда домен правильно сопоставлен с локальной переменной, содержащей «одинаковое» доменное имя (с параметрами url) .

Таким образом, он проверяет массив (анализирует) файл) с переменными, заключенными в ! in_array . Скажем, domain.com/somepage.html в нашей локальной переменной не может совпадать из-за /somepage.html

По умолчанию код выглядит следующим образом:

    $match_urls   = explode(",", strtolower($siteconfig["urls_list"]));        
    $FileInfo     = array();
    $FileInfo     = ParseFile("$file_dir/$file_name");
    $urls         = $FileInfo[0];
    $filehash     = $FileInfo[1];
    $creationdate = $FileInfo[2];
    $internalname = $FileInfo[3];

    if (!in_array($urls, $match_urls, 1)) {
        $external = 'yes'; <-- domain fails to match, so we only get this (not good)
    } else {
        $external = 'no'; <-- We need this for matched domain (parsed & local variable)
    }

Я попробовал следующее:

function CheckUrls($domain){
        $domain = "http://website.com/announce";
if (preg_match('{^http://[\w\.]*website.com/}i', $domain)) {
        return true;
} else {
        return false;
    }
}

И попробовал много разных вариантов в этом:

if (!in_array($urls, CheckUrls() === true, 1)) {
        $external = 'yes';
} else {
        $external = 'no';
}

Я также пробовал проходить:

    $domain = "http://website.com/somepage.html";
    $checkit = preg_match('{^http://[\w\.]*website.com/}i', $domain));

To:

if (!in_array($urls, $checkit, 1)) {          
$external = 'yes';
} else {
$external = 'no';
}

За последние 4 часа я прошел var_dumped, и я пробовал и пытался, и проверял и проверял ... Я не могу понять это. Что я делаю не так?

Это отлично работает в матче:

preg_match('{^http://[\w\.]*website.com/}i', $domain)

Но я не могу реализовать это в! In_array () и это сводит меня с ума , Я пытался передать true / false / null безрезультатно.

Еще раз спасибо!

1 Ответ

0 голосов
/ 27 февраля 2020

CheckUrls не имеет смысла, так как он возвращает логическое значение вместо массива. Функция Preg_match вернет 1 или 0 в случае любого совпадения (или нет) или false, если что-то произойдет, вместо самого совпадения. Если вы хотите получить список совпадений, вам нужно будет передать третий параметр (массив) и вернуть его для использования в функции in_array, примерно так:

function checkUrls($domain)
{
     $matches = [];
     preg_match('{^http://[\w\.]*website.com/}i', $domain, $matches);
     return $matches;
}

Затем просто выполните:

$external = 'no';

if (!in_array($urls, checkUrls($domain), true)) {          
   $external = 'yes';
}

См. Это для правильного использования preg_match: https://www.php.net/manual/en/function.preg-match.php

...