如何强制浏览器刷新imagecreatefromjpeg创建的图像?

时间:2015-07-30 17:09:27

标签: php image

如何强制浏览器刷新使用 imagecreatefromjpeg创建的图像?

我知道这个SO question (PHP force refresh image),如果我有一个真实的图像,但我需要刷新我刚创建的图像,因为关于用户操作(突出显示图像上的不同位置)图像不会刷新我必须手动强制浏览器通过 STRG + F5

重新加载它

例如:

  • 前提条件:浏览器在缓存中没有任何内容
  • 我登录userA帐户并打开包含图片的页面并突出显示其中的一些点 - >图像已正确创建
  • 我退出并登录到用户B并打开包含图片的页面并突出显示其中的一些点 - >我看到来自userA的旧图片
  • 我必须点击 STRG + F5 才能看到我的正确图像
  • Conclusuion:浏览器缓存图像而不是重新创建它

主页(由用户打开)包含以下部分:

<img src="http://<URL>/<dir>/draw.php">

draw.php文件通过以下方式创建图像:

ob_start();

// get $results (= points to highlight) from database - works fine

$img = draw_stars_into_small_starmap($results);

ob_end_clean();

header("Content-type: image/jpeg");
imagejpeg($img, null, 85);
imagedestroy($img);

此功能突出显示图像上的某些点

// $smallimg is the image from 
// Results containing the points to highlight

function draw_stars_into_small_starmap($results) {
  $smallimg = dirname(__FILE__) . "/nameofpicture.jpg";

  // Which color for highlighting
  $colormap = array(
      'a' => array(240, 120, 120),
      'o' => array(255, 128, 0),
      'm' => array(0, 255, 0)
    );

  $width = 450;
  $height = 100;

  while ($row = od_mysql_fetch_array ($results)) {
    $x = $row['xkoord'] / (610 / $width);
    $z = $row['zkoord'] / (610 / $height);
    $y = $row['ykoord'] / 5;

    list($r, $g, $b) = $colormap[$row['type']];
    $color = imagecolorallocate($smallimg, $r, $g, $b);

    $x = floor($x);
    $y = floor($y) + 50;

    imagearc($smallimg, $x, $y, 9, 9, 0, 270, $color);
    imagecolordeallocate($smallimg, $color);
  }

  return $smallimg;
}

有人有想法吗?

P.S。我希望始终强制浏览器刷新此特定图像(或放置图像的draw.php),但网站/服务器上的所有图像!< / p>

1 个答案:

答案 0 :(得分:1)

您要做的是为图像添加随机数生成器,您希望刷新:

<?php
$rand = mt_rand(11111111,99999999);
?>
<img src="http://<URL>/<dir>/draw.php?<?php print $rand;?>">

这会强制HTML文档刷新浏览器地址,因为它调用的图像的字符串由于随机数而发生了变化。

您还应该使用:

  • PHP clearstatcache();位于页面顶部的<img>页面中,以便每次加载页面时都会清除其文件缓存。如果图像draw.php的实际内容没有正确刷新,则会使用此方法。

  • 还有其他各种方式(.htaccess,标题等)也可以设置您的服务器以强制浏览器不要缓存图像文件(尽管这可能会显着增加带宽)