get headers — ошибка php функции get_headers php

Я пытаюсь получить мета-заголовки и ключевые слова из 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

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

Спасибо

0

Решение

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

Решение простое 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'); вернет длину найденных результатов. В случае нуля это бросило предупреждение.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]