【问题标题】:Caching PHP script outputs on the client side在客户端缓存 PHP 脚本输出
【发布时间】:2009-07-13 06:03:22
【问题描述】:

我有一个 php 脚本,每次调用时都会输出一个随机图像。因此,当我在网络浏览器中打开脚本时,它会显示一个图像,如果我刷新,则会显示另一个图像。

我正在尝试通过命令行(通过机械化)从访问网站中捕获正确的图像。我使用 urllib2.urlopen(...) 来抓取图像,但每次我这样做时都会得到不同的图像。我希望能够始终如一地抓取相同的图像。我怎样才能做到这一点?

谢谢!

更新: 这是我正在谈论的一个例子。如果您在网络浏览器中重新加载此图像,则每次都会弹出不同的图像。如果您右键单击并保存,您将获得正确的图像。如果你继续这样做,你会一直得到正确的图像......但是,你是如何从命令行获得的?

http://www.biglickmedia.com/art/random/index.php

【问题讨论】:

  • 我不太明白。您是说当您在图片上右键保存时,会保存与可见图片不同的图片?
  • 能否提供链接或代码?
  • 该页面可能使用了一些 javascript 技巧来更改“右键菜单”。尝试使用禁用 javascript 的浏览器。否则,请提供您的机械化代码或网站链接。
  • 很抱歉。如果我右键单击,我会得到正确的图像。但是我无法通过命令行访问该站点来下载相同的图像。每次只能得到不同的图像,这不是我想要的。

标签: php python caching mechanize


【解决方案1】:

您的图片很可能被浏览器缓存设置为:

<?php
      header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
      header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>

并且每次生成图像时都使用另一个名称(可以通过在原始名称上添加毫秒来完成)。

【讨论】:

    【解决方案2】:

    您可以尝试将生成的图像缓存到磁盘并通过其他链接将其提供给用户。

    图像生成后,将其移至临时文件夹,用户可以在其中下载生成的静态图像。下载后删除,腾出空间。

    【讨论】:

      【解决方案3】:

      当您从浏览器保存它时,它不会返回服务器重新请求图像,而是从缓存中提供它正在显示的图像。

      您的命令行客户端需要做同样的事情。每次请求时都需要保存图像。然后,当您找到要保留的图像时,您需要将已保存的图像复制到您想要永久保留的任何位置。

      如果服务器总是提供一个新的随机图像,那么你无能为力。

      【讨论】:

        【解决方案4】:

        抓取一次并缓存在你身边。

        【讨论】:

          猜你喜欢
          • 2011-11-22
          • 1970-01-01
          • 1970-01-01
          • 2018-08-21
          • 2017-03-18
          • 2012-07-26
          • 2019-04-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多