По какой-то причине я получаю следующую ошибку, когда нет изображения на url, вызываемом в функциях.PHP CURL Неустранимая ошибка: вызов функции-члена getAttribute() по нуле
Fatal error: Call to a member function getAttribute() on null in .... on line 29
Этого не происходит, если их нет названия, это не произойдет, если нет мета-теги, и это не произойдет, если их нет, тэг абзаца. Это происходит только тогда, когда нет img-тега. Как я могу сделать эту работу так, чтобы при отсутствии изображения она перестала выплевывать ошибку.
<?
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);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
function getit($site) {
$parsing = file_get_contents_curl($site);
//parsing begins here:
$doc = new DOMDocument();
@$doc->loadHTML($parsing);
$nodes = $doc->getElementsByTagName('title');
$node = $doc->getElementsByTagName('img');
$para = $doc->getElementsByTagName('p');
//get and display what you need:
$title = $nodes->item(0)->nodeValue;
$firstimage = $node->item(0)->getAttribute('src');
$firstparagraph = $para->item(0)->nodeValue;
$metas = $doc->getElementsByTagName('meta');
for ($i = 0; $i < $metas->length; $i++)
{
$meta = $metas->item($i);
if($meta->getAttribute('property') == 'og:description') {
$description = $meta->getAttribute('content'); }
elseif ($meta->getAttribute('name') == 'description') {
$description = $meta->getAttribute('content'); }
else { $descrition = "<p>".implode(' ', array_slice(explode(' ', $firstparagraph), 0, 25))."</p>"; }
if($meta->getAttribute('property') == 'og:image') {
$image = $meta->getAttribute('content');
}
}
if ($image != '') { $image = $image; } else { $image = $firstimage; }
$str .= 'Title: '.$title.' <br/><br/>';
$str .= 'Description: '.$description.' <br/><br/>';
$str .= 'Image: <img src="'.$image.'"><br/><br/>';
echo $str;
}
?>
ради портативности, безопасности, и бог знает что еще, прекратить использование коротких тегов! – hanshenrik
Я не понимаю, что вы имеете в виду @hanshenrik. Ни один из приведенных выше кодов не использует короткие теги. Вы конкретно ссылаетесь на использование ?> или вы видите что-то еще? – Bruce
да, я имею в виду те ?>. они плохи по целому ряду причин. например, они не будут работать на серверах, где короткие теги отключены. если вы перейдете на новый сервер, где они отключены, и у вас есть жестко закодированные пароли, другие могут видеть ваш исходный код и ваши жестко закодированные пароли. и они делают его более склонным к ошибкам запускать XML-файлы через парсер – hanshenrik