
公司有个 dz 的论坛,用户附件放在了另一台服务器上,包括用户头像,头像访问的时候直接远程 url(如: http://static.abc.com/avatar/000/00/37/98_avatar_middle.jpg)。 如果用户没有上传头像的话默认使用本地头像 http://bbs.abc.com/uc_server/images/noavatar_middle.gif 。 由于 dz 用户头像没有存数据库,访问头像直接用用户 ID 拼接成的固定的 url,原程序中判断图片是否存在使用 file_exists ,但现在头像放在了另一台服务器,无法使用这个函数,使用 curl 判断效率很低,请问下各位有没有什么好的办法? 多谢!!!
1 hahasong Jun 20, 2016 via iPhone 听过 QUERY 请求没有 |
2 linauror Jun 20, 2016 get_headers |
3 pubby Jun 20, 2016 via Android 别折磨服务端了,放前端做吧, img onerror 事件 |
4 Kokororin Jun 20, 2016 img.onerror |
5 lslqtz Jun 20, 2016 file_get_contents get_headers |
6 lslqtz Jun 20, 2016 <?php error_reporting(0); header('content-type:application/json'); $data='vssfafsa=dgastgdagda&xfafafaf=tgfdfdsafa'; $opts=array( 'http'=>array( 'method'=>'POST', 'header'=>"Content-type:application/x-www-form-urlencoded\r\nContent-length:".strlen($data), 'content'=>$data )); file_get_contents('http://www.baidu.com',false,stream_context_create($opts)); if ($http_response_header[0] == 'HTTP/1.1 302 Moved Temporarily') { echo '{"code":200}'; } else { echo '{"code":403}'; } ?> 这样? |
7 takwai Jun 20, 2016 HTTP 有个 HEAD 方法,只会返回头信息。然后我不见得有多低效率…… |
8 lslqtz2 Jun 20, 2016 @takwai 赞同,但是 curl 效率就够低了。 在我的 vps 上性能差距 5 倍(保守),实际 15 倍(和 file_get_contents 对比)。 HEAD 是个好方案,楼主可以根据我上面的改 HEAD ,减去 GET 所需时间。 |
9 lxm Jun 20, 2016 直接把远程服务器上这个域名的 404 请求改为返回默认图片 |
10 tabris17 Jun 20, 2016 跟 php 半毛钱关系都没有, html 就能搞定了 <img src="xxxxx" data-localsrc="yyyyy" Onerror="... ..."> |
11 raysonx Jun 20, 2016 via Android 或者用 Web 服务器反代 avatar 服务器,并替换 404 结果 |
12 eoo Jun 20, 2016 via Android 。。。。。 |
13 imn1 Jun 20, 2016 百毒忘了哪个地方的 onerror 是重载图片,图片不存在,结果就…… |
14 mudone Jun 20, 2016 1 、 Web 上所有的头像都使用远程 URL ; 2 、远程服务器上做个 rewrite :当访问的头像文件不存在的时候,返回默认头像的内容。 onerror 的做法会造成一次 404 ,不建议使用。 |
15 BBOO OP 感谢各位,由于这个头像地址 app 也在调用,考虑到旧版兼容性,客户端无法做处理。 nginx 改 404 的方法,运维说用了什么云, nginx 改不了。 用了 @lslqt2z 、 @takwai 的方法,加了个超时时间,测试了响应速度还不错,感谢!!! 以下是改后的代码: function exit_file($url){ $opts=array( 'http'=>array( 'method'=>'HEAD', 'timeout'=>2 )); file_get_contents($url,false,stream_context_create($opts)); if ($http_response_header[0] == 'HTTP/1.1 200 OK') { return true; } else { return false; } } |
16 xiaojj Jun 20, 2016 全部用户扫描一遍比较省事 |
17 m3 Jun 20, 2016 改表改代码 |
18 loadinger Jun 22, 2016 nginx 不存在返回一个默认图片 。 |