【问题标题】:php check if gravatar exists header errorphp检查gravatar是否存在header错误
【发布时间】:2012-05-03 22:49:49
【问题描述】:

我正在尝试检查是否存在 gravatar。当我尝试前面问题中推荐的方法时,我收到一个错误“警告:get_headers() [function.get-headers]:此函数只能用于 URLs”有人看到这个或看到我的代码中的错误吗? PS 我不想为 gravatar 指定默认图像,因为如果没有 gravatar 存在,则可能存在多个默认可能性。

另外,我发现一个错误的引用可能与我的 ini 文件有关,我认为我的主机不允许我访问该文件。如果是这样,是否有替代 getheaders 的方法?非常感谢。

$email = $_SESSION['email'];
$email= "person@gmail.com"; //for testing
$gravemail = md5( strtolower( trim( $email ) ) );
$gravsrc = "http://www.gravatar.com/avatar/".$gravemail;
$gravcheck = "http://www.gravatar.com/avatar/".$gravemail."?d=404";
$response = get_headers('$gravcheck');
echo $response;
exit;
if ($response != "404 Not Found"..or whatever based on response above){
$img = $gravsrc;
}

【问题讨论】:

  • 松开$gravcheck 周围的撇号,否则它只是一个包含“$gravcheck”的字符串,而不是变量的内容:get_headers($gravcheck);
  • 非常感谢这次捕获..它导致了错误。

标签: php header gravatar


【解决方案1】:

观察

A. get_headers('$gravcheck'); 不起作用,因为使用了单引号 '

B.调用exit; 会提前终止脚本

C. $response 将返回一个数组,您不能使用 echo 打印信息使用 print_r insted

D. $response != "404 Not Found" 不起作用,因为 $response 是数组

这是正确的做法:

$email= "person@gmail.com"; //for testing
$gravemail = md5( strtolower( trim( $email ) ) );
$gravsrc = "http://www.gravatar.com/avatar/".$gravemail;
$gravcheck = "http://www.gravatar.com/avatar/".$gravemail."?d=404";
$response = get_headers($gravcheck);
print_r($response);
if ($response[0] != "HTTP/1.0 404 Not Found"){
    $img = $gravsrc;
}

【讨论】:

  • 第一个响应索引现在包含字符串“HTTP/1.1 404 Not Found”。我个人会使用strpos($response[0], "404 Not Found") === false 来确定标头响应是否有效,但总的来说,这是一种非常好的明确检查 404 的方法。
  • 酷但是;必须是 "....... if ($response[0] ......" ` $email= "test@youremaildomain.com"; //用于测试 $gravemail = md5( strtolower( trim( $电子邮件 ) ) ); $gravsrc = "gravatar.com/avatar/".$gravemail; $gravcheck = "gravatar.com/avatar/".$gravemail."?d=404"; $response = get_headers($gravcheck); if ($response[0] == "HTTP/1.1 200 OK"){ $ grv_check = true; } else { $grv_check = false; }`
【解决方案2】:

在做我的一个项目时,我在php中做了一个简单的Gravatar功能。

你可以看到它。

  <?php

  class GravatarHelper
  {

    /**
    * validate_gravatar
    *
    * Check if the email has any gravatar image or not
    *
    * @param  string $email Email of the User
    * @return boolean true, if there is an image. false otherwise
    */
    public static function validate_gravatar($email) {
      $hash = md5($email);
      $uri = 'http://www.gravatar.com/avatar/' . $hash . '?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;
    }



    /**
    * gravatar_image
    *
    *  Get the Gravatar Image From An Email address
    *
    * @param  string $email User Email
    * @param  integer $size  size of image
    * @param  string $d     type of image if not gravatar image
    * @return string        gravatar image URL
    */
    public static function gravatar_image($email, $size=0, $d="") {
      $hash = md5($email);
      $image_url = 'http://www.gravatar.com/avatar/' . $hash. '?s='.$size.'&d='.$d;
      return $image_url;
    }

  }

这里有两个函数。

  1. validate_gravatar() 将根据电子邮件是否有任何 gravatar 返回 true 或 false。
  2. gravatar_image() 会返回你邮箱的头像图片地址

希望对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多