如何在PHP中当Imgur无用户图片时设置默认图片
实现Imgur图片不存在时显示默认图的PHP方案
你当前的实现存在两个核心问题:
- 错误使用了Imgur的链接格式:
imgur.com/xxx.png是图片的网页地址,而非直接的图片资源地址,正确的图片URL应该是i.imgur.com/xxx.png。 md5_file函数需要成功读取文件才能计算哈希,当目标图片返回404时,函数会直接抛出无法打开流的错误,无法完成对比。
以下是两种可靠的实现方案:
方案一:用get_headers检查HTTP状态码
// 注意使用i.imgur.com域名的图片直链 $userImageUrl = "https://i.imgur.com/{$profile->image}.png"; $defaultImageUrl = "https://i.imgur.com/你的默认图ID.png"; // 获取HTTP响应头,@符号抑制请求失败时的警告 $headers = @get_headers($userImageUrl); // 判断图片是否存在(返回200状态码) if ($headers && strpos($headers[0], '200 OK') !== false) { $displayImage = $userImageUrl; } else { $displayImage = $defaultImageUrl; } // 输出最终要显示的图片 echo "<img src='{$displayImage}' alt='用户头像'>";
方案二:用CURL检查(兼容更多服务器环境)
如果服务器禁用了allow_url_fopen,get_headers会失效,这时用CURL更稳定:
$userImageUrl = "https://i.imgur.com/{$profile->image}.png"; $defaultImageUrl = "https://i.imgur.com/你的默认图ID.png"; $ch = curl_init($userImageUrl); // 设置只获取响应头,不下载图片内容,提升效率 curl_setopt($ch, CURLOPT_NOBODY, true); curl_exec($ch); $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); // 根据状态码判断是否使用默认图 $displayImage = ($statusCode == 200) ? $userImageUrl : $defaultImageUrl; echo "<img src='{$displayImage}' alt='用户头像'>";
若你坚持要用哈希对比(不推荐,效率较低),需先确保图片能成功获取再计算哈希:
$userImageUrl = "https://i.imgur.com/{$profile->image}.png"; // 建议将默认图存在本地,避免重复HTTP请求 $defaultImageLocalPath = "/服务器本地路径/默认图.png"; // 尝试获取用户图片内容 $userImageContent = @file_get_contents($userImageUrl); if ($userImageContent !== false) { $displayImage = (md5($userImageContent) !== md5_file($defaultImageLocalPath)) ? $userImageUrl : $defaultImageUrl; } else { $displayImage = $defaultImageUrl; } echo "<img src='{$displayImage}' alt='用户头像'>";
内容的提问来源于stack exchange,提问作者LegoDev
相关产品推荐
相关产品推荐

