我创建了一个旋转定义图像的函数。它在firefox中运行得很完美,但在IE和Opera中没有任何反应 - 图像重新加载但没有旋转。有人知道为什么吗?这是代码:
function rotateImage($direction, $id, $angle) {
$dir = opendir($direction);
if ($img = imagecreatefromjpeg($_SESSION['files'][$id]['large'])) {
$width = imagesx ( $img );
$height = imagesy ( $img );
$rotate = imagerotate($img, $angle, 0);
imagejpeg($rotate, $_SESSION['files'][$id]['large'], 100);
}
else {
echo '<p>Error: image cannot be rotated</p>';
}
closedir($dir);
}
答案 0 :(得分:5)
问题绝对不是您正在使用的浏览器,因为轮换是在服务器端完成的。
您可能遇到了缓存问题或用于调用该函数的代码问题。
你是:
使用JavaScript启动重新加载?
您的JavaScript代码可能是此处的问题。
发送正确的无缓存标头?
如果没有,您可能会遇到图像缓存在浏览器上的情况,这就是您没有看到更改的原因。要么发送正确的Cache-control
和Expires
标头,要么将随机标识符添加到图片网址{?_=$x
,其中$x
= time()
将正常工作...标题是首选。)
发送正确的Content-type
标题?
在某些浏览器中,不发送正确的标头可能会导致不稳定的行为。您可能想尝试使用header('Content-type: image/jpeg')
仅发送没有任何额外字符的图像数据?
确保不输出除图像以外的任何内容。您的输出流不得包含任何额外字符,包括空格。
答案 1 :(得分:0)
尝试点击刷新!或清除缓存和重新加载
这是因为图像保存在浏览器缓存中,浏览器知道它有它,但它不知道它已被更改。其中一个技巧是使用随机生成的名称将图像保存在服务器端。
答案 2 :(得分:0)
我怀疑您没有为图片发送适当的Content-Type标头。或者,图像可能会略有损坏(通常由源代码中的php标记之前/之后的空格引起)。将Firefox中的图像保存在硬盘驱动器上,在文本编辑器(如Editplus)中打开它,检查它是否以空格开头或结尾。
答案 3 :(得分:0)
PHP是服务器端,所以如果它在一个浏览器上工作,代码工作正常,问题在于浏览器。我认为IE和Opera正在缓存图像。如果可能,请设置图像的标题,以便它们不会被缓存:
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past