Ошибка php функции get_headers

Я пытаюсь получить мета-заголовки и ключевые слова из URL.

У меня есть список URL-адресов в таблице Excel, используя библиотеку phpExcel, я сначала получаю URL-адреса и запускаю цикл foreach. И напишите мои результаты в новом листе Excel

Мой код выглядит следующим образом

<?php
include 'PHPExcel.php';
$objPHPExcel = new PHPExcel();
require_once 'PHPExcel/IOFactory.php';

$readFileName = "script_test.xlsx";
$target_file_path = "results.xlsx";

$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($readFileName);
$objWorksheet = $objPHPExcel->getActiveSheet();

$objPHPExcel1 = PHPExcel_IOFactory::load($target_file_path);

$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();

$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);

$i = 2;
for ($row = 1; $row <= $highestRow; ++$row) 
{
    $keyword_val = $objWorksheet->getCellByColumnAndRow(0, $row)->getValue();
    $url_headers_details = get_headers($keyword_val, 1);

    if($url_headers_details[0] = "HTTP/1.1 200 OK")
    {
        $html = file_get_contents_curl($keyword_val);

        //parsing begins here:
        $doc = new DOMDocument();
        @$doc->loadHTML($html);
        $nodes = $doc->getElementsByTagName('title');

        //get and display what you need:
        $title = $nodes->item(0)->nodeValue;

        $metas = $doc->getElementsByTagName('meta');

        for ($i = 0; $i < $metas->length; $i++)
        {
            $meta = $metas->item($i);
            if($meta->getAttribute('name') == 'keywords')
                $keywords = $meta->getAttribute('content');
        }

        $objPHPExcel1->getActiveSheet()->setCellValue('A'.$i, $keyword_val);

        if (!isset($title)) {
            $objPHPExcel1->getActiveSheet()->setCellValue('B'.$i, "NA");
        }
        elseif (isset($title)) {
            $objPHPExcel1->getActiveSheet()->setCellValue('B'.$i, $title);
        }

        if (!isset($keywords)) {
            $objPHPExcel1->getActiveSheet()->setCellValue('C'.$i, "NA");
        }
        elseif (isset($keywords)) {
            $objPHPExcel1->getActiveSheet()->setCellValue('C'.$i, $keywords);
        }
        $i++;
    }
}

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel1, 'Excel2007');
    $objWriter->save($target_file_path);

function file_get_contents_curl($url)
        {
            $ch = curl_init();

            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

            $data = curl_exec($ch);
            curl_close($ch);

            return $data;
        }
?>

Этот код прекрасно работает для нескольких доменов, но в случае нескольких доменов он выдает ошибку следующим образом:

Warning: get_headers(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /opt/lampp/htdocs/Qdrive/test/KinjalG/PHPExcel-develop/Classes/meta_titles_keywords.php on line 31

Warning: get_headers(http://www.mrmeticulous.com.au ): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in /opt/lampp/htdocs/Qdrive/test/KinjalG/PHPExcel-develop/Classes/meta_titles_keywords.php on line 31

Notice: Trying to get property of non-object in /opt/lampp/htdocs/Qdrive/test/KinjalG/PHPExcel-develop/Classes/meta_titles_keywords.php on line 45

Warning: get_headers(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /opt/lampp/htdocs/Qdrive/test/KinjalG/PHPExcel-develop/Classes/meta_titles_keywords.php on line 31

Куда я иду не так?

Спасибо

1 ответ

Я мог бы отладить себя:)

Решение простое if condition должен быть добавлен. замещать

$nodes = $doc->getElementsByTagName('title');

        //get and display what you need:
        $title = $nodes->item(0)->nodeValue;

от

$nodes = $doc->getElementsByTagName('title');

($nodes->length>0) {
            //get and display what you need:
            $title = $nodes->item(0)->nodeValue;
        }

Линия $nodes = $doc->getElementsByTagName('title'); вернет длину найденных результатов. В случае нуля это бросило предупреждение.

Другие вопросы по тегам