Поддержка Проблемы и решения Убрать умолчательный аватар, если нет граватара

  • Найденный и адаптированный в кодексе вариант слишком замедляет вывод страницы, можно ли решить задачу оптимальнее?

    То что есть сейчас, и тормозит:

    function validate_gravatar($email) {
    	// Craft a potential url and test its headers
    	$uri = 'http://www.gravatar.com/avatar/' . md5($email) . '?d=404';
    	$headers = @get_headers($uri);
    	if (!preg_match("|200|", $headers[0])) {
    		$has_valid_avatar = FALSE;
    	} else {
    		$has_valid_avatar = TRUE;
    	}
    	return $has_valid_avatar;
    }

    <?php if(validate_gravatar(get_comment_author_email())==true){echo get_avatar($comment,$size='40');} ?>

Просмотр 10 ответов — с 1 по 10 (всего 10)
  • Граватар по определению внешний сервис, следовательно не тормозить не может тоже по определению. Несколько ускорить процесс можно только долговременным кешированием.

    ksevelyar А если вопрос поставить по другому! Как отображать только локальный аватар если у пользователя нет аватара…ну к примеру если он не загрузил аватар с использованием плагина User Avatar!
    Юрий У меня такая конструкция тоже тормозит если к примеру инет падает или слабый! А те аватары которые пользователи загрузили используя функционал плагина User Avatar…выводятся быстрее…как не странно!

    Заменил код:

    function validate_gravatar($email) {
    	// Craft a potential url and test its headers
    	$url = 'http://www.gravatar.com/avatar/' . md5($email) . '?d=404';
    
    $handle = curl_init($url);
    curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);
    
    /* Get the HTML or whatever is linked in $url. */
    $response = curl_exec($handle);
    
    /* Check for 404 (file not found). */
    $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
    if($httpCode == 404) {
    		$has_valid_avatar = FALSE;
    	} else {
    		$has_valid_avatar = TRUE;
    	}
    	curl_close($handle);
    	return $has_valid_avatar;
    }

    Было 44 секунды на все запросы, стало 37.

    Но это всё равно безумно много по сравнению с 0.082635 секунды без проверок.

    Не понимаю, зачем вообще эта проверка нужна?

    Прочтите тему топика.

    Чтобы не выводить аватар, если его нет.

    А в настройках выбрать «пустышку» — не вариант?

    «Пустышка» занимает место и подключенные к аватару стили не исчезают.

    img.avatar[src$="/wp-includes/images/blank.gif"]{display:none;}

    Граватар урлы не меняет, и редирект идёт со стороны сервиса.

    Поэтому путь ко всем картинкам выглядит примерно так:

    http://www.gravatar.com/avatar/c8e2069c00c57d942f4c239bdcdd7353?s=40&d=/wp-includes/images/blank.gif

    Меняется только хеш. Поэтому ваш стиль просто уберёт все аватары, включая рабочие.

    Ну, значит Вам не повезло.

Просмотр 10 ответов — с 1 по 10 (всего 10)
  • Тема «Убрать умолчательный аватар, если нет граватара» закрыта для новых ответов.