Просмотр поста

.
ДоХтор
Добавлено: 30.09.2017 / 20:42
# Iron_Man (30.09.2017 / 20:17)
Не выводит картинку, прописал свой путь
Криво прописал.

Добавлено: 30.09.2017 / 22:47
Я решил немного изменить логику скрипта, чтобы он парсил сайт-донор только один раз, при первом его запуске. По сути, набор браузеров мобильных устройств не так уж часто там обновляется, и поэтому нет необходимости в регулярном скачивании массива с удалённого сервера.

Теперь при первом старте скрипт скачает набор юзер-агентов, и запишет их в текстовый файл. А при всех последующих запусках скрипт будет работать уже с текст. файлом. Выгода очевидна - прирост производительности =)
* (+/-)
<?php

// Иконка телефона
$phone = 'https://icon-icons.com/icons2/984/PNG/512/Untitled-1-06_icon-icons.com_75119.png';
// Иконка ПК
$pc = 'http://s1.iconbird.com/ico/2014/1/620/w512h5121390853998notebook512.png';

// Отображение иконки (телефон или пк)
echo show_device($phone, $pc);


function logging_device($base, &$devices) {
    $url = 'http://www.useragentstring.com/pages/'.
        'useragentstring.php?typ=Mobile%20Browser';
    $page = file_get_contents($url);
    preg_match_all('~<li><a[^>]*>([^<]+)</a></li>~', $page, $devices);
    $devices = $devices[1];
    file_put_contents($base, join(PHP_EOL, array_map('md5', $devices)), LOCK_EX);
}

function show_device($phone, $pc) {
    $base = 'devices.txt';
    $devices = file_exists($base) ? file($base, FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES) : [];
    // Если файл пуст, запишем в него массив агентов
    !empty($devices) ?: logging_device($base, $devices);
    $img = in_array(md5($_SERVER['HTTP_USER_AGENT']), $devices) ? $phone : $pc;
    
    return '<img src="'. $img .'" width="35" height="35" alt="" />';
}
Для наглядности добавил пару переменных, в которых прописал по умолчанию адреса иконок.

UPD: Добавил шифрование элементов массива, чтобы текст файл не сильно увеличивался в объёме.