Как обозначить дефолтный title, если не смог получить title через file_get_contents?

104
18 августа 2019, 07:50

С помощью file_get_contents получаю заголовки с сайтов

function page_title($url) {
    $fp = file_get_contents($url);
    if (!$fp) 
        return null;
    $res = preg_match("/<title>(.*)<\/title>/siU", $fp, $title_matches);
    if (!$res) 
        return null; 
    // Clean up title: remove EOL and excessive whitespace.
    $title = preg_replace('/\s+/', ' ', $title_matches[1]);
    $title = trim($title);
    return $title;
}

Нередко попадаются сайты без заголовков, у меня имеются дефолтные заголовки которые я могу сохранить в базу так 'my_title' => $item->my_title,

        $db->add(array_merge($item->only(['title', 'wareUrl', 'description', 'user', 'user_id', 'youtube', 'activatedate']), [
            'id' => (4 * 10000000) + $item->id,
            'item_id' => $item->id,
            'type' => 4,
            'user_id' => $item->user['id'],
            'youtube' => video_youtube(''.$item->wareUrl.''),
            'title' => page_title(''.$item->wareUrl.''),
          //  'my_title' => $item->my_title,
            'activatedate' => $item->activatedate,
            'time' => microtime(true)
        ]));

Помогите создать конструкцию } else {, чтобы в случае отсутствия заголовка получаемого через file_get_contents, в базу заносился дефолтный заголовок 'my_title' => $item->my_title,

Пробовал прописать if внутри $db->add(array_merge($item->only(['title', 'wareUrl', 'description', 'user', 'user_id', 'youtube', 'activatedate']), [ получаю ошибку.

Answer 1
'title' => page_title(''.$item->wareUrl.'') ? : $item->my_title, // $item->my_title дефолтный тайтл

только в page_title() бы делать return false; вместо return null; и в конце этой функции сделать проверку на strlen например:

return strlen($title)>0 ? $title : false;

Ну или можно только в функции page_title(); заменить все return null; на return $item->my_title и в конце проверка return strlen($title)>0 ? $title : $item->my_title; только посмотри на область видимости $item, возможно надо добавить внутри функции global $item;

Answer 2
$title = 'defaultTitle';
if (preg_match("/<title>(.*)<\/title>/siU", $fp, $title_matches)) {
    $title = preg_replace('/\s+/', ' ', $title_matches[1]);
    $title = trim($title);
}
return $title;
READ ALSO
Передать массив из PHP в JavaScript

Передать массив из PHP в JavaScript

У меня есть функция в обработчике, которая должна вернуть массивА в Ajax мне нужно этот массив получить

123
stl copy c++ проблема копирования

stl copy c++ проблема копирования

Проблема при копировании с помощью copy() Объявление:

123
Передача функции ссылку переменной. static_cast&lt;&gt;. C++

Передача функции ссылку переменной. static_cast<>. C++

1) Насколько я знаю, static_cast<> создает копию переменной но уже в другом форматеВот код

121
Что такое *this?

Что такое *this?

Возвращаю *thisА что такое *this

127