Проверьте на допустимый граватар (PHP)

static участники принадлежат классу вместо определенного экземпляра.

Это означает, что только один экземпляр static поле существует <глоток> [1] , даже если Вы создаете миллион экземпляров класса, или Вы не создаете никого. Это будет совместно использовано всеми экземплярами.

С тех пор static методы также не принадлежат определенному экземпляру, они не могут обратиться к членам экземпляра. В данном примере, main не знает, к какому экземпляру Hello класс (и поэтому который экземпляр Clock класс) он должен относиться. static участники могут только обратиться к static участники. Члены экземпляра могут, конечно, доступ static участники.

примечание Стороны: , Конечно, static участники могут получить доступ к членам экземпляра через Пример ссылки на объект .

:

public class Example {
    private static boolean staticField;
    private boolean instanceField;
    public static void main(String[] args) {
        // a static method can access static fields
        staticField = true;

        // a static method can access instance fields through an object reference
        Example instance = new Example();
        instance.instanceField = true;
    }

[1]: В зависимости от характеристик во время выполнения это может быть один на ClassLoder или AppDomain или поток, но это не относится к делу.

5
задан Jeff 27 July 2009 в 13:12
поделиться

7 ответов

ПРИМЕЧАНИЕ : на момент написания это был единственный вариант. Однако чуть позже был добавлен ? D = 404 , в результате чего Andrew ' s ответ намного чище.


Хотя вы сказали, что знаете о параметре d , знаете ли вы, что он действительно возвращает заголовок перенаправления, когда это применимо? Итак, следующий дает 302 Найдено, потому что аватар не существует:

http://www.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802?d=http%3A%2F%2Fwww.google.com % 2Fimages% 2Flogo.gif

HTTP/1.1 302 Found  
...  
Last-Modified: Wed, 11 Jan 1984 08:00:00 GMT  
Location: http://www.google.com/images/logo.gif  
Content-Length: 0  
...  
Expires: Sun, 26 Jul 2009 23:18:33 GMT  
Cache-Control: max-age=300

Мне кажется, что все, что вам нужно сделать, это добавить параметр d и затем проверить код результата HTTP.

4
ответ дан 13 December 2019 в 05:40
поделиться

Соответствует ли имя файла (Content-Disposition: inline; filename = "5ed352b75af7175464e354f6651c6e9e.jpg") для изображений Gravatar "не найдено / недействительно"? Если да, вы могли бы использовать это для определения недействительных изображений?

0
ответ дан 13 December 2019 в 05:40
поделиться

добавить параметр «по умолчанию» к URL-адресу изображения при проверке граватара, это обеспечит перенаправление 302, если изображение не найдено.

$grav_url = 'http://www.gravatar.com/avatar/'.md5(mb_strtolower($email)).'?default=http://www.mysite.com/null.jpg&size=310';

пустое изображение может вернуть 404 если хотите:)

1
ответ дан 13 December 2019 в 05:40
поделиться

Я предлагаю вам попробовать php класс gravatar Лукаса Араужо .

/**
*  Class Gravatar
*
* From Gravatar Help:
*        "A gravatar is a dynamic image resource that is requested from our server. The request
*        URL is presented here, broken into its segments."
* Source:
*    http://site.gravatar.com/site/implement
*
* Usage:
* <code>
*        $email = "youremail@yourhost.com";
*        $default = "http://www.yourhost.com/default_image.jpg";    // Optional
*        $gravatar = new Gravatar($email, $default);
*        $gravatar->size = 80;
*        $gravatar->rating = "G";
*        $gravatar->border = "FF0000";
*
*        echo $gravatar; // Or echo $gravatar->toHTML();
* </code>
*
*    Class Page: http://www.phpclasses.org/browse/package/4227.html
*
* @author Lucas Araújo <araujo.lucas@gmail.com>
* @version 1.0
* @package Gravatar
*/
class Gravatar
{
    /**
     *    Gravatar's url
     */
    const GRAVATAR_URL = "http://www.gravatar.com/avatar.php";

    /**
     *    Ratings available
     */
    private $GRAVATAR_RATING = array("G", "PG", "R", "X");

    /**
     *    Query string. key/value
     */
    protected $properties = array(
        "gravatar_id"    => NULL,
        "default"        => NULL,
        "size"            => 80,        // The default value
        "rating"        => NULL,
        "border"        => NULL,
    );

    /**
     *    E-mail. This will be converted to md5($email)
     */
    protected $email = "";

    /**
     *    Extra attributes to the IMG tag like ALT, CLASS, STYLE...
     */
    protected $extra = "";

    /**
     *    
     */
    public function __construct($email=NULL, $default=NULL) {
        $this->setEmail($email);
        $this->setDefault($default);
    }

    /**
     *    
     */
    public function setEmail($email) {
        if ($this->isValidEmail($email)) {
            $this->email = $email;
            $this->properties['gravatar_id'] = md5(strtolower($this->email));
            return true;
        }
        return false;
    }

    /**
     *    
     */
    public function setDefault($default) {
        $this->properties['default'] = $default;
    }

    /**
     *    
     */
    public function setRating($rating) {
        if (in_array($rating, $this->GRAVATAR_RATING)) {
            $this->properties['rating'] = $rating;
            return true;
        }
        return false;
    }

    /**
     *    
     */
    public function setSize($size) {
        $size = (int) $size;
        if ($size <= 0)
            $size = NULL;        // Use the default size
        $this->properties['size'] = $size;
    }

    /**
     *    
     */
    public function setExtra($extra) {
        $this->extra = $extra;
    }

    /**
     *    
     */
    public function isValidEmail($email) {
        // Source: http://www.zend.com/zend/spotlight/ev12apr.php
        return eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email);
    }

    /**
     *    Object property overloading
     */
    public function __get($var) { return @$this->properties[$var]; }

    /**
     *    Object property overloading
     */
    public function __set($var, $value) {
        switch($var) {
            case "email":    return $this->setEmail($value);
            case "rating":    return $this->setRating($value);
            case "default":    return $this->setDefault($value);
            case "size":    return $this->setSize($value);
            // Cannot set gravatar_id
            case "gravatar_id": return;
        }
        return @$this->properties[$var] = $value;
    }

    /**
     *    Object property overloading
     */
    public function __isset($var) { return isset($this->properties[$var]); }

    /**
     *    Object property overloading
     */
    public function __unset($var) { return @$this->properties[$var] == NULL; }

    /**
     *    Get source
     */
    public function getSrc() {
        $url = self::GRAVATAR_URL ."?";
        $first = true;
        foreach($this->properties as $key => $value) {
            if (isset($value)) {
                if (!$first)
                    $url .= "&";
                $url .= $key."=".urlencode($value);
                $first = false;
            }
        }
        return $url;    
    }

    /**
     *    toHTML
     */
    public function toHTML() {
        return     '<img src="'. $this->getSrc() .'"'
                .(!isset($this->size) ? "" : ' width="'.$this->size.'" height="'.$this->size.'"')
                .$this->extra
                .' />';    
    }

    /**
     *    toString
     */
    public function __toString() { return $this->toHTML(); }
} 

и вот как его использовать:

include 'gravatar.php';
$eMail = 'name@email.net';
$defImg = 'http://www.example.com/images/myphoto.jpg';
$avatar = new Gravatar($eMail, $defImg);
$avatar->setSize(90);
$avatar->setRating('G');
$avatar->setExtra('alt="my gravatar"');

<p>
<?php echo $avatar->toHTML(); ?>
</p>
2
ответ дан 13 December 2019 в 05:40
поделиться

Не знаю, как именно вы хотите использовать эту информацию, когда получите ее ... но могли бы вы:

Загрузить изображение на веб-страницу с прикрепленным обработчиком onload или onerror .. . если срабатывает onload, у вас есть совпадение, если срабатывает ошибка onerror, его либо не существует (или есть проблемы с загрузкой)

например

<img
  src="http://www.gravatar.com/avatar/282eed17fcb9682bb2816697482b64ec?s=128&d=identicon&r=PG"
  onload="itWorked();"
  onerror="itFailed();"/>
-1
ответ дан 13 December 2019 в 05:40
поделиться

По-настоящему неэффективным решением может быть отправка электронной почты на http://en.gravatar.com/accounts/signup и проверка ] Извините, этот адрес электронной почты уже используется! ...

редактировать

Хорошо, они используют куки, чтобы указать, произошла ошибка или нет ...; -)

function isUsed($email)
{
    $url   = 'http://en.gravatar.com/accounts/signup';
    $email = strtolower($email);

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, 'commit=Signup&email=' . urlencode($email));
    curl_setopt($ch, CURLOPT_HEADER, true);
    $response = curl_exec($ch);
    curl_close($ch);

    return (false !== strpos($response, 'Set-Cookie: gravatar-notices'));
}

var_dump(isUsed('test@example.org'));
-1
ответ дан 13 December 2019 в 05:40
поделиться

Gravatar добавил параметр «D», что означает, что , если вы пройдете d = 404 , вы получаете страницу 404 (вместо некоторых 302 Перенаправляйтесь на картину по умолчанию), если нет изображения, а не использовать эвристику.

6
ответ дан 13 December 2019 в 05:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: