得到偶尔的错误,而不是PHP图像
我有一个脚本,使用GD和PHP在世界地图上绘制所请求的国家的颜色。 PHP请求被复选框调用。它看起来像是你调用PHP脚本太快,然后返回一个“Xed out”错误图像。有没有办法用setTimeout或其他东西排队PHP请求,所以新的检查事件永远不会失败?得到偶尔的错误,而不是PHP图像
下面是JavaScript调用由的onclick事件:
function onBoxClicked(frame, country){
var randomNumber = Math.floor(Math.random()*100000001);
if (document.getElementById(country).checked == true){
window.parent.document.getElementById('world_map').src=(country)+".php?r=" + randomNumber;
}else if (document.getElementById(country).checked == false){
window.parent.document.getElementById('world_map').src=(country)+"_unload.php?r=" + randomNumber;
}
}
下面是一个典型的国家PHP文件(我知道有一些垃圾,可以删除):
<?php
session_cache_limiter('nocache');
$cache_limiter = session_cache_limiter();
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");// Date in the past
$ip=$_SERVER['REMOTE_ADDR'];
$oldImageName = 'world_map2_users_copy.png';
$newImageName = $ip.'.'.'world_map2_users_copy.png';
if (file_exists($newImageName)){
$im = imagecreatefrompng($newImageName);
}else{
copy($oldImageName, $newImageName);
$im = imagecreatefrompng($newImageName);
}
$syria_color = imagecolorallocate($im, 0, 158, 96);
imagefill($im, 780, 205, $syria_color);
ImagePNG($im, $newImageName);
ImagePNG($im);
ImageDestroy($im);
?>
如果您做
ImagePNG($im, $newImageName);
有两个PHP脚本在同一时间写入同一个文件的可能性。
为什么你要写磁盘呢?
只要做到:
$im = imagecreatefrompng($oldImageName);
$syria_color = imagecolorallocate($im, 0, 158, 96);
imagefill($im, 780, 205, $syria_color);
ImagePNG($im);
ImageDestroy($im);
最好的解决办法是预先生成所有图像文件,所以在JavaScript中你可以说:
window.parent.document.getElementById('world_map').src=country+".png";
在这种情况下,你也将失去缓存问题。
谢谢。该网站的目的是指示访问国家,所以会有多种颜色。 预先创建彩色国家的所有组合会产生大量的图像。我试图计算出我需要的数量,但因为头部受伤而放弃了。也许这是最好的解决方案,但我不知道如何以编程方式生成图像。现在每个图像大约是29KB。 因此,双重书写的原因是,实际的png文件可以作为其他国家脚本进一步着色的起点。 – socrtwo 2010-04-28 21:58:31
我明白了。另一种选择是在每个GIF中创建一个透明GIF,一个突出显示的国家。在HTML和一些CSS中,您可以将它们放在彼此顶部,并使用JavaScript将它们打开/关闭。 – edwin 2010-04-28 22:51:26
你能告诉我们包括该行在内的确切错误吗? – Jamescun 2010-04-28 21:58:09