обработка ошибок на get_meta_tags () и лимитах перенаправления? - PullRequest
2 голосов
/ 15 августа 2011

Я использую get_meta_tags () в скрипте и на определенных URL-адресах происходит сбой (в качестве примера) ...

Предупреждение : get_meta_tags (http://www.kodak.com/) [функция.get-meta-tags]: не удалось открыть поток: достигнут предел перенаправления ...

Можно ли просто пропустить любой результат, который выдает ошибку? Или вместо этого я должен просто использовать @get_meta_tags ()?

function getMeta()
{
    $tags = get_meta_tags($this->link); //INSERT INTEGRITY CHECK HERE?
    $keywords = $tags['keywords']; 

    if(count($keywords))
    {
        preg_match_all('/(?<=^|,)\s*((?:[^\s,]+\s*){1,4})(?=\s*(?:,|$))/', $keywords, $m);
        $this->keywords = array_slice($m[1], 0, 15);
    }
}

Ответы [ 3 ]

2 голосов
/ 15 августа 2011

Вы можете использовать оператор подавления ошибок - символ @ - непосредственно перед вызовом get_meta_tags().Это приводит к отключению всех отчетов об ошибках только для этой строки, но обычно это считается плохой практикой, которую следует использовать только тогда, когда все другие варианты исчерпаны.

Ваша первая реакция на это должна бытьпопробуйте передать канонический URL-адрес на get_meta_tags(), где это возможно, то есть вы должны попытаться передать URL-адрес в конце цепочки перенаправления: например, ссылка на http://www.php.net/manual/en/language.types.array.php вместо http://php.net/array.Если $this-link исходит из источника, находящегося вне вашего контроля, тем не менее, лучше всего использовать подавление ошибок:

Вы можете использовать его следующим образом:

$tags = @get_meta_tags($this->link);

Это функциональнотоже самое:

$errorLevel = error_reporting(0);
$tags = get_meta_tags($this->link);
error_reporting($errorLevel);

Вам потребуется изменить остальную часть кода, чтобы иметь дело с переменной $tags, не содержащей массив мета-тегов.

1 голос
/ 15 августа 2011

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

function getMeta()
{
    if ($tags = @get_meta_tags($this->link)) {
        $keywords = $tags['keywords'];

        if (count($keywords)) {
            preg_match_all('/(?<=^|,)\s*((?:[^\s,]+\s*){1,4})(?=\s*(?:,|$))/', $keywords, $m);
            $this->keywords = array_slice($m[1], 0, 15);
        }
    } else {
        // Catch error
    }
}

Имейте в виду, что подавитель ошибок @ будет подавлять все ошибки, а не только превышать предел перенаправления. См. Документы

0 голосов
/ 15 августа 2011

Этот подавляет все ошибки, но делает именно то, что вы ищете

function getMeta()
{
    $tags = @get_meta_tags($this->link); //INSERT INTEGRITY CHECK HERE?
    if (!$tags){
        //handle your error
    }

    $keywords = $tags['keywords']; 

    if(count($keywords))
    {
        preg_match_all('/(?<=^|,)\s*((?:[^\s,]+\s*){1,4})(?=\s*(?:,|$))/', $keywords, $m);
        $this->keywords = array_slice($m[1], 0, 15);
    }
}
...