12
2011

Chrome 侧栏书签扩展(预览)

Tags:

Sidebar For Chrome

基本可以使用了,只是切换标签的时候有闪烁。

0
29
2011

行政区划数据在线生成工具

Tags:

行政区划数据在线生成工具

  • 行政区划数据从统计局获取(2010)
  • 可指定省、市
  • 可指定生成数据等级
  • 可选三种输出数据格式
  • 格式一:JSON 数组
  • 格式二:JSON 树
  • 格式二:分隔符分隔的树结构
0
17
2011

CSS 兼容性表格

Tags: ,

目前只有 IE 系列,参考 MS 的兼容性页面制作。
IE9/FF3/FF4/FF6/Chromium 显示正常,
Opera11/IE6 不能正常显示列高亮,
Opera11 在刷新时触发列高亮有可能会引起 crash。

CSS 兼容性表格

0
11
2011

在 Godaddy 空间上安装 awstats (续)

上次在 Godaddy 上安装 awstats 后,没多久就发现保存日志的文件夹不能直接访问。但是还可以用 HTTP 方式访问,于是改用 wget 获取。
现在,wget 也不行了。经过测试,Godaddy 已经屏蔽了在服务器上执行命令获取HTTP内容的方式(cron、SSH)。
要获取日志文件还是有办法的,下面我写的 PHP 脚本用来获取日志并更新统计数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
$dirbase = dirname(__FILE__).'/logs/'; // 日志存放位置
$urlbase = 'http://domain/stats/logs/'; // 日志源
$auth = 'user:pass'; // 账号密码
$config = 'xxx'; // awstats 配置名
$data = get_data('');
preg_match_all('/"([^"]+\.zip)"/',$data,$link);
$link = $link[1];
foreach($link as $v){
	if(head_data($v)){
		$data = get_data($v);
		file_put_contents($dirbase.$v,$data);
	}
}
 
header('Location: cgi-bin/awstats.pl?config='.$config.'&update=1');
 
function get_data($filename){
	global $urlbase,$auth;
	$ch = curl_init();
	curl_setopt($ch,CURLOPT_URL,$urlbase.$filename);
	curl_setopt($ch,CURLOPT_USERPWD,$auth);
	curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
	$data = curl_exec($ch);
	curl_close($ch);
	return $data;
}
 
function head_data($filename){
	global $urlbase,$dirbase,$auth;
	$ch = curl_init();
	curl_setopt($ch,CURLOPT_URL,$urlbase.$filename);
	curl_setopt($ch,CURLOPT_USERPWD,$auth);
	curl_setopt($ch,CURLOPT_FILETIME,true);
	curl_setopt($ch,CURLOPT_NOBODY,true);
	curl_exec($ch);
	$head = curl_getinfo($ch);
	curl_close($ch);
	if($head['filetime'] > @filemtime($dirbase.$filename)){
		return true;
	}else{
		return false;
	}
}
  1. 将上面的脚本在 awstats 的根目录保存为 index.php
  2. 在 awstats 根目录创建 logs 文件夹
  3. 配置文件里改为 LogFile=”unzip -p ../logs/logarchive.%YY_%MM.zip |”
  4. 配置文件里改为 AllowToUpdateStatsFromBrowser=1
  5. stats 目录默认使用空间管理账号访问,建议更改
  6. cron 里相关的内容可以删除

设置好后就可以直接用绑定的域名访问了!
———–
2011/11/8
Linux 服务器的日志文件只能在 Godaddy 网站上的后台管理看了

0
19
2011

ie6 png 图片的半透明支持

Tags: ,

从网上找了个很小的解决方案 Unit PNG Fix,不过它并不能处理处理 :hover 伪类。代码不长,很容易就能看明白,它对需要应用透明的每个元素设置 AlphaImageLoader 滤镜。由于 JS 设置的样式优先级比较高,覆盖了 :hover 设置的样式,导致失效。

既然设置元素的样式不行,那么直接设置样式表对象呢?styleSheets是 document 的样式表对象集合,每个样式表对象下面还有两个重要的集合 imports 和 rules。imports 是导入的样式表的集合,rules 则是样式表规则的集合,修改 rules 就可以使 png 透明并且 :hover 不失效。

第一个函数,用来应用 AlphaImageLoader 滤镜。

1
2
3
4
5
6
7
8
9
function fix_png_style(style,src){
	if(/\.png$/i.test(src)){ // 非 png 图片不处理
		style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' +
			src + '",sizingMethod="crop")';
		style.backgroundImage= '';
		return true;
	}
	return false;
}

对于图片,还需要进行更多的处理。

10
11
12
13
14
15
function fix_png_image(img){
	img.width  += 0; // 宽高都要处理
	img.height += 0; // 否则图片会变成正方形
	fix_png_style(img.style,img.src) &&
		(img.src = "clear.gif"); // 红叉补丁,1个像素的gif图片
}

给样式表对象应用补丁。

16
17
18
19
20
21
22
23
function fix_png_sheets(sheets){
	for(var i=sheets.length;i--;){
		for(var j=sheets[i].rules.length;j--){
			style = sheets[i].rules[j].style;
			fix_png_style(style,style.backgroundImage.replace(/.*\("?(.*?)"?\)/,'$1'));
		}
	}
}

上面的函数还存在一个问题,它没有处理导入的样式表,再改一下。

16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function fix_png_sheets(sheets,path){
	var sheet,src;
	for(var i=sheets.length;i--;){
		sheet = sheets[i];
		path = (/^([\/\\]|http:)/i.test(sheet.href)?'':path)+
			sheet.href.replace(/[^\/\\]+$/,'');
 
		fix_png_sheets(sheet.imports,path);
 
		for(var j=sheet.rules.length;j--;){
			style = sheet.rules[j].style;
			src = style.backgroundImage.replace(/.*\("?(.*?)"?\)/,'$1');
			src = (/^([\/\\]|http:)/i.test(src)?'':path)+src;
			fix_png_style(style,src);
		}
	}
}

最后给页面上的图片和样式表应用上面的函数。

1
2
3
4
5
6
7
8
9
10
11
<!--[if lt IE 7]>
<script type="text/javascript">
window.attachEvent('onload',function(){
	var imgs = document.getElementsByTagName('img');
	for(var i=imgs.length;i--;){
		fix_png_image(imgs[i]);
	}
	fix_png_sheets(document.styleSheets,'/');
});
</script>
<![endif]-->
0