【问题标题】:Cache facebook/twitter profile image缓存 facebook/twitter 个人资料图片
【发布时间】:2013-02-13 21:45:25
【问题描述】:

我想让用户上传他们的 facebook/twitter 个人资料图片作为头像。我在数据库中插入带有他们的令牌/秘密的记录。我制作了一个脚本来获取用户 ID 并使用 readfile() 显示配置文件图像,但我想将此图像缓存 30 分钟。使用 codeigniter 可以吗?

【问题讨论】:

  • 为什么要缓存图片?仅保存 Facebook 用户 ID 并使用 url 获取图像,这样如果用户更改个人资料图片,您将显示更新后的 1 graph.facebook.com/userID/picture
  • 我编辑了我的问题。我考虑让用户上传 twitter 个人资料图片,而 twitter API 调用是速率受限的——这就是我想要缓存图片的原因。
  • @N.L.telaviv - 一个公平的观点,但是假设您正在为一个网站创建一个类似 cmets 的 pinterest 系统,您可以在该网站上一次在一个页面上拥有一百张个人资料图像。对慢速的 Facebook API 的请求实在是太多了。
  • 在我看来它的全部投资回报...这将减慢页面的加载速度,其中包含分配图片的页面只需加载之前的所有内容,最后加载图片,这样用户就不会被数据延迟。记住要缓存所有用户图片,每次缓存图片时都需要将所有用户图片保存在系统中(所以你仍然需要分配 api 调用,有时甚至比不缓存还要多)

标签: php facebook codeigniter facebook-graph-api twitter


【解决方案1】:

虽然不是特定于 codeigniter.. 在我创建的网站上 - 当用户使用 facebook 登录时,我们使用类似于 file_get_contents 的内容下载文件.. 然后我们将本地引用与图像数据的 MD5 一起存储.. 这让我们可以在下次请求配置文件时轻松检查是否需要更新本地存储(这确实需要服务器从 facebook 重新下载)

在其他情况下,我们存储 facebook 报告的文件大小,以便我们可以执行 HTTP HEAD 请求以轻松检查它是否已更改(我意识到大小与图像更改没有直接关系......但是 99.9 % 的时间是一个很好的迹象。

【讨论】:

  • 正如您编辑了您的问题。我的回答仍然有效,并且还允许识别用户是否尝试从不同来源多次上传相同的图像(仅限 MD5 哈希版本)
  • 好的,但我仍然需要调用 API 才能检查大小
  • 嗯,是的 - 你怎么能说它已经改变了?此外,任何用于下载图像等的 api 调用都应在客户端 Web 请求之外完成,以避免降低客户体验等。
  • 我不想检查它是否已更改。我想将图像保存到缓存中 30 分钟。
  • 我只是想提供描述缓存机制的建议-当然如果​​您检查它是否已更改-这意味着您不必在最后替换图像+您的最终用户将保留他们的本地浏览器缓存副本,而不必重新请求它,因为您的服务器上的文件修改日期已更改。另外 - 用于请求个人资料图像 URL 的 Facebook api 在大多数情况下都非常慢
猜你喜欢
  • 2011-09-01
  • 2012-06-08
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
相关资源
最近更新 更多