淡定在黑暗和黎明时分!!!
编程技巧
编程技巧
Yupoo相册插件 phpwind gbk版本
七 16th
————–安装配置开始—————-
安装说明:
首先访问 http://www.yupoo.com 申请一个站长自己的api key
申请过程见图( yupoo申请api_step_x.jpg )
1.解压插件到hack文件夹下面,使目录保持 hack\pw_yupoo\
2. 编辑 hack\pw_yupoo\config.php
根据申请api最后一步获得的api key 和 secretKey 配置config.php文件
$apiKey=”b40a95b25e0451b8aa0120f5xxxxx”;
$secretKey=”gv8lthgvpjexxxx”;
3.修改( \js\wind_c_editor.js )[注意:下面有两个参数因虚拟主机服务器目录修改IMGDIR和HackDIR]
将如下代码复制这个文件最末尾(横线之间的代码):
———————————————-
function $(id) {
return document.getElementById(id);
}
function _attachEvent(obj, evt, func) {
if(obj.addEventListener) {
obj.addEventListener(evt, func, false);
} else if(obj.attachEvent) {
obj.attachEvent(“on” + evt, func);
}
}
function doane(event) {
e = event ? event : window.event;
if(is_ie) {
e.returnValue = false;
e.cancelBubble = true;
} else if(e) {
e.stopPropagation();
e.preventDefault();
}
}
var hiddenobj = new Array();
var pmwinposition = new Array();
function pmwin(action, param) {
var IMGDIR = “images”;
var HackDIR = “hack/pw_yupoo”;
var objs = document.getElementsByTagName(“OBJECT”);
if(action == ‘open’) {
for(i = 0;i < objs.length; i ++) {
if(objs[i].style.visibility != ‘hidden’) {
objs[i].setAttribute(“oldvisibility”, objs[i].style.visibility);
objs[i].style.visibility = ‘hidden’;
}
}
var clientWidth = document.body.clientWidth;
var clientHeight = document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight;
var scrollTop = document.body.scrollTop ? document.body.scrollTop : document.documentElement.scrollTop;
var pmwidth = 800;
//var pmheight = clientHeight * 0.765;
var pmheight = 482;
if(!$(‘pmlayer’)) {
div = document.createElement(‘div’);div.id = ‘pmlayer’;
div.style.width = pmwidth + ‘px’;
div.style.height = pmheight + ‘px’;
div.style.left = ((clientWidth – pmwidth) / 2) + ‘px’;
div.style.position = ‘absolute’;
div.style.zIndex = ‘9999′;
$(‘append_parent’).appendChild(div);
$(‘pmlayer’).innerHTML = ‘<div style=”width: 800px; background: #666666; margin: 5px auto; text-align: left;”>’ +
‘<div style=”width: 800px; height: ‘ + pmheight + ‘px; padding: 1px; background: #FFFFFF; border: 1px solid #7597B8; position: relative; left: -6px; top: -3px”>’ +
‘<div onmouseover=”pmwindrag(this)” style=”cursor: move; position: relative; left: 0px; top: 0px; width: 800px; height: 30px; margin-bottom: -30px;”></div>’ +
‘<a href=”javascript:void(0);” onclick=”pmwin(\’close\’)”><img style=”position: absolute; right: 20px; top: 15px” src=”‘ + IMGDIR +’/close.gif” title=”关闭” /></a>’ +
‘<div id=”pmwinmask” style=”margin-top: 30px; position: absolute; width: 100%; height: 100%; display: none”></div><iframe id=”pmframe” name=”pmframe” style=”width:’ + pmwidth + ‘px;height:100%” allowTransparency=”true” frameborder=”0″></iframe></div></div>’;
}
$(‘pmlayer’).style.display = ”;
$(‘pmlayer’).style.top = ((clientHeight – pmheight) / 2 + scrollTop) + ‘px’;
if(!param) {
pmframe.location = HackDIR + ‘/insert_img.php’;
} else {
pmframe.location = HackDIR + ‘/insert_img.php?’ + param;
}
} else if(action == ‘close’) {
for(i = 0;i < objs.length; i ++) {
if(objs[i].attributes['oldvisibility']) {
objs[i].style.visibility = objs[i].attributes['oldvisibility'].nodeValue;
objs[i].removeAttribute(‘oldvisibility’);
}
}
hiddenobj = new Array();
$(‘pmlayer’).style.display = ‘none’;
}
}
var pmwindragstart = new Array();
function pmwindrag(obj) {
obj.onmousedown = function(e) {
if(is_ie) {
document.body.onselectstart = function() {
return false;
}
}
pmwindragstart = is_ie ? [event.clientX, event.clientY] : [e.clientX, e.clientY];
pmwindragstart[2] = parseInt($(‘pmlayer’).style.left);
pmwindragstart[3] = parseInt($(‘pmlayer’).style.top);
$(‘pmwinmask’).style.display = ”;
doane(e);
}
_attachEvent(document.body, ‘mousemove’, function(e) {
if(pmwindragstart[0]) {
var pmwindragnow = is_ie ? [event.clientX, event.clientY] : [e.clientX, e.clientY];
with($(‘pmlayer’)) {
style.left = (pmwindragstart[2] + pmwindragnow[0] – pmwindragstart[0]) + ‘px’;
style.top = (pmwindragstart[3] + pmwindragnow[1] – pmwindragstart[1]) + ‘px’;
}
doane(e);
}
});
obj.onmouseup = function(e) {
if(is_ie) {
document.body.onselectstart = function() {
return true;
}
}
pmwindragstart = [];
$(‘pmwinmask’).style.display = ‘none’;
doane(e);
}
obj.onmouseover = null;
}
function insertOpenImage(txt) {
pmwin(‘open’);
}
function insertTextImage(txt) {
editor.focusEditor();
if (txt!=null) {
if (editor._editMode == “textmode”) {
sm=txt;
AddText(sm,”);
} else {
try{editor._doc.execCommand(“insertimage”,false,txt);}
catch(e) {}
}
}
}
4.修改模板文件(template\wind\wysiwyg_editor.html)
将原来insertimage: [ true, insertImage, false ], 修改 为 insertimage: [ true, insertOpenImage, false ]
5.调用yupoo本地缓存设置(下面这个对对象$f是一个YUPOO PHP API接口):(此项为可选项,仅作速度优化用)
编辑(hack\pw_yupoo\insert_img.php)文件,找到下面的代码,两种缓存方式只能选一种。
//使用文件缓存方式,需设置文件cache路径,如果是linux系统,需将目录权限设置成777
$f->enableCache(
“fs”,
‘./cache/files’,//文件cache路径
“300″
);
//数据库的缓存方式,需指定用户名和数据库名(默认的cache表名为yupoo_cache)
$f->enableCache(
“db”,
“mysql://root:zhangsf@localhost/test”
);
6.上传临时文件设置(默认是到cache文件夹下面,可以自行修改)[对于上一步本地缓存采用文件系统的在linux系统中这个目录设置成可写,也就是写权限为777] 详细cache配置查看(hack\pw_yupoo\config.php) 文件
7.编辑(template\wind\heaer.htm)文件,找到<div id=”main”>在这个后面紧跟着加入两个div层
<div id=”append_parent”></div>
<div id=”ajaxwaitid”></div>
附件:pw_yupoo102
————–安装配置结束—————-
tar打包一个目录时,去掉其中的几个子目录
七 9th
tar cvfz chenxu.tar.gz dir –exclude dir/dir1 –exclude dir/dir2/dir3 可以陆续添加, 注意添加排队目录时不要加“/”根符号
YUPOO相册插件-boblog2.0.X
七 9th
安装说明:
1.把yupoo这个文件复制到pulins下,进入blog后台进行相对应绑定设置(也可以直接在yupoo文件下define.php(此文件必须可写0777权限)进行就设置就可以了)
不用后台进行帮绑定的话,就可以直接对这个define.php进行修改,其userid可以这样得到http://www.yupoo.com/api/rest/?m … gsf810429@gmail.com
2.将文件夹lightbox复制到boblog根目录下面,这一步功能是让相册达到一个 幻灯片浏览效果(可选)
3.最后template目录下找到自己相对应模板文件夹,找到这个elements.php,然后将一个脚本代码插入到一个loadSidebar();这个脚本之前或之后)
<script language=”javascript”>
initLightbox();
</script>
4.在根目录下index.php最后插入一些引用js文件和CSS文件:
acceptrequest(‘act,go,page,part’) 修改为 acceptrequest(‘act,go,page,part,id’);
$csslocation.=”<link rel=\”stylesheet\” rev=\”stylesheet\” href=\”lightbox/css/yupoo.css\” type=\”text/css\” media=\”all\” />\n”;
$csslocation.=”<link rel=\”stylesheet\” rev=\”stylesheet\” href=\”lightbox/css/lightbox.css\” type=\”text/css\” media=\”all\” />\n”;
$csslocation.=”<link rel=\”stylesheet\” rev=\”stylesheet\” href=\”lightbox/css/moobox.css\” type=\”text/css\” media=\”all\” />\n”;
$ajax_js=”<script type=\”text/javascript\” src=\”lightbox/js/prototype.js\”></script>\n”;
$ajax_js.=”<script type=\”text/javascript\” src=\”lightbox/js/effects.js\”></script>\n”;
$ajax_js.=”<script type=\”text/javascript\” src=\”lightbox/js/scriptaculous.js?load=effects\”></script>\n”;
$ajax_js.=”<script type=\”text/javascript\” src=\”lightbox/js/lightbox.js\”></script>\n”;
还没有yupo API就是去申请Key,如API很明白话,可以参考yupoo API 文档
修正功能如下:
1.file_get_contents和curl函数不支持时BUG
2.修正了绑定时一些复杂问题,现在可以不需要去申请API Key就可以绑定,因为我给大家一个公用API Key,以减少用户在绑定时出现大量问题,而减少时间,给用户带来方便
3.修正了原来图片不能显示问题
Yupoo相册插件2.0-wordpress
七 9th
安装事项:
安装说明:(http://zhangsf.yupoo.com/profile/)
1.把文件夹复制到wordpress插件包plugins文件夹中,进入wordpress后台启用yupooalbum插件
2.进行yupoo账号绑定和得到Authtoken ID进行相应操作,如没有账号API Key 就从(http://www.yupoo.com/services/api/apply)申请API,注意(选择认证为桌面认证),如果修改过此项用户 绑定接口要修改一下,默认这个绑定时接口桌面认证,所以默认下无需修改此项配置!
3.编码环境调整问题
a.在windows上面请把ypablum.php:$xmlOptions = array(XML_OPTION_CASE_FOLDING => TRUE, XML_OPTION_SKIP_WHITE => FALSE);修改成$xmlOptions = array(XML_OPTION_TARGET_ENCODING => ‘UTF-8′, XML_OPTION_SKIP_WHITE => FALSE);
b.在linux,freebsd系统就不用修改。
认证绑定式:
1.web绑定 2.桌面绑定 3.移动手机绑定
更新功能 :
1。更方便绑定API,无需callback一个页面!!直接绑定就可以了!!(注意绑定认证方式采用一个桌面绑定方式!!这样就无需一个返回一个文件什么,这样就更加方便了,申请好API后就可以去后台进行绑定操作)
2。修改一些用户说有些照片看不见问题
Yupoo相册插件–discuz6.0/5.5
七 9th
安装说明:
1.解压缩插件包下,把yupoo文件夹复制到plugins插件文件夹中,把templates目录下yupoo.htm复制到当成模板目录下
2.将CSS和语言变量添加到原来文件中,具体添加配置如下:
代码:
/**************************************************************/
yp_show{width:10%;border:0px #eee dotted;float:left;margin:0px;padding:0px;}
.yp_set_show{width:10%;border:0px #eee dotted;float:left;margin:0px;padding:0px;}
.yp_img {margin:5px;border:5px #eee solid;}
.Set { width: 130px; text-align: left; margin-bottom: 15px; overflow: hidden;}
.Set h4 { width: 120px; margin-top: 0px; margin-bottom: 0px; font-size: 15px; font-weight: bold; }
.Set p { margin-top: 2px; font-size: 12px; color: #777; }
.Sets { position: relative; width: 115px; height: 180px; text-align: left; float: left; padding-right: 4px; margin-right: 5px; margin-bottom: 20px; overflow: hidden;}
.Sets h4 { width: 110px; margin-top: 0px; margin-bottom: 0px; font-size: 12px; font-weight: bold; }
.Sets p { margin-top: 2px; font-size: 12px; color: #777; }
.SetCase { position: relative; margin-top: 5px; margin-bottom: 3px; width: 91px; height: 95px; padding-top: 7px; padding-bottom: 0px; background: url([img]http://www.yupoo.com/images/set_case.gif[/img]) no-repeat; text-align: center; vertical-align: middle; }
.SetCase img { border: 1px solid #000; margin: 0px; padding: 0px; margin-left:2px; }
.SetCase img.Icon { border: 0; }
.SetCommentsLink { position: absolute; left: 10px; top: 65px; }
.SetCaseStar { position: relative; margin-top: 5px; margin-bottom: 3px; width: 91px; height: 95px; padding-top: 7px; padding-bottom: 0px; background: url([img]http://www.yupoo.com/images/set_case_star.gif[/img]) no-repeat; text-align: center; vertical-align: middle; }
.SetCaseStar img { border: 1px solid #000; margin: 0px; padding: 0px; }
.SetCaseStar img.Icon { border: 0; }
.Seta:link, .Seta:visited { color: #6B9F1F; text-decoration: none; }
.Seta:hover { color: #FFFFFF; text-decoration: none; background: #6B9F1F; }
.Seta:active { color: #FFFFFF; text-decoration: none; background: #6B9F1F; }
.setThumb {margin-left:5px;}
/**************************************************************/
/**************************************************************/
‘yupooname’ => ‘YuPoo相册’,
‘ypmyphoto’ => ‘我的照片’,
‘ypmysetlist’ => ‘我的相册’,
‘ypmysetlistphoto’ => ‘我的相册照片’,
‘ypmykeywords’ => ‘我的关键字’,
‘yphotpic’ => ‘又拍精彩照片’,
‘ypupload’ => ‘上传照片’,
‘ypmyyupoo’ => ‘打开我在又拍上的相册’,
‘ypbind’ => ‘<b>如果您已是YUPOO会员,API Key已申请请绑定即可</b>’,
‘ypregister’ => ‘如果你未注册,请到<a href=”http://www.yupoo.com/register” target=”_blank”><font color=”red”>注册账户</font></a>[无需邮箱激活]。未申请API KEY请到<a href=”http://www.yupoo.com/services/api/apply” target=”_blank”><font color=”red”>申请API KEY</font></a>’,
‘ypemail’ => ‘<b>Api Key:</b>’,
‘yppassword’ => ‘<b>Share SecretKey:</b>’,
‘ypusername’ => ‘昵称’,
‘ypvalidate’ => ‘验证码’,
‘ypemailinfo’ => ‘提示:此邮件地址是你在又拍上的登录名。’,
‘yppasswordinfo’ => ‘提示:此密码是你在又拍上的密码。’,
‘ypregisteremailinfo’ => ‘提示:注册后,此邮件地址将作为你在又拍上的登录名使用。’,
‘ypregisterpasswordinfo’ => ‘提示:密码的长度为6-32位。’,
‘ypregisterusernameinfo’ => ‘提示:注册成功之后,你可以随意修改昵称’,
‘ypbindsubmit’ => ‘绑定API’,
‘ypbindfrob’ => ‘绑定认证’,
‘ypbindtoken’ => ‘获取Token认证’,
‘ypregistersubmit’ => ‘注 册’,
‘yperror’ => ‘又拍相册错误提示信息’,
‘ypsetback’ => ‘返回相册列表’,
‘yprebind’ => ‘重新绑定账号’,
‘ypupload_url’=>’http://www.yupoo.com/photos/upload’,
‘yp_photocount’=>’张照片’,
‘yp_photoedit’=>’编辑’,
‘yp_photoedit_message’=>’编辑相册’,
/**************************************************************/
3.导入插件,具体如下(你也可以直接复制当成解压缩包中discuz_plugin_yupoo.txt)–/UTF-8/:
代码:
# Discuz! Plugin Dump
# Version: Discuz! 6.0.0
# Time: 2007-12-25 13:43
# From: Discuz! Board (http://localhost/xt/discuz6_utf8/)
#
# Discuz! Community: [url]http://www.Discuz.net[/url]
# Please visit our website for latest news about Discuz!
# --------------------------------------------------------
YTozOntzOjY6InBsdWdpbiI7YTo5OntzOjk6ImF2YWlsYWJsZSI7czoxOiIx
IjtzOjc6ImFkbWluaWQiO3M6MToiMSI7czo0OiJuYW1lIjtzOjExOiJZVVBP
T+ebuOWGjCI7czoxMDoiaWRlbnRpZmllciI7czo1OiJ5dXBvbyI7czoxMToi
ZGVzY3JpcHRpb24iO3M6MTc6IllVUE9P55u45YaM5o+S5Lu2IjtzOjEwOiJk
YXRhdGFibGVzIjtzOjEwOiJ5dXBvb191c2VyIjtzOjk6ImRpcmVjdG9yeSI7
czo2OiJ5dXBvby8iO3M6OToiY29weXJpZ2h0IjtzOjExOiJvc2NhciB6aGFu
ZyI7czo3OiJtb2R1bGVzIjtzOjEzNDoiYToxOntpOjA7YTo1OntzOjQ6Im5h
bWUiO3M6NToieXVwb28iO3M6NDoibWVudSI7czoxMToiWVVQT0/nm7jlhowi
O3M6NDoidHlwZSI7czoxOiIyIjtzOjc6ImFkbWluaWQiO3M6MToiMCI7czox
MjoiZGlzcGxheW9yZGVyIjtpOjA7fX0iO31zOjc6InZlcnNpb24iO3M6NToi
Ni4wLjAiO3M6NDoidmFycyI7YTo4OntpOjA7YTo3OntzOjEyOiJkaXNwbGF5
b3JkZXIiO3M6MToiMCI7czo1OiJ0aXRsZSI7czoxMjoi5o+S5Lu25byA5YWz
IjtzOjExOiJkZXNjcmlwdGlvbiI7czowOiIiO3M6ODoidmFyaWFibGUiO3M6
OToieXBfb25fb2ZmIjtzOjQ6InR5cGUiO3M6NToicmFkaW8iO3M6NToidmFs
dWUiO3M6MToiMSI7czo1OiJleHRyYSI7czowOiIiO31pOjE7YTo3OntzOjEy
OiJkaXNwbGF5b3JkZXIiO3M6MToiMCI7czo1OiJ0aXRsZSI7czoyNDoi5q+P
6aG154Wn54mH5pi+56S65pWw6YePIjtzOjExOiJkZXNjcmlwdGlvbiI7czow
OiIiO3M6ODoidmFyaWFibGUiO3M6MTE6InlwX3Blcl9wYWdlIjtzOjQ6InR5
cGUiO3M6NjoibnVtYmVyIjtzOjU6InZhbHVlIjtzOjI6IjkwIjtzOjU6ImV4
dHJhIjtzOjA6IiI7fWk6MjthOjc6e3M6MTI6ImRpc3BsYXlvcmRlciI7czox
OiIwIjtzOjU6InRpdGxlIjtzOjI0OiLmr4/ooYznhafniYfmmL7npLrmlbDp
h48iO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjA6IiI7czo4OiJ2YXJpYWJsZSI7
czoxMDoieXBfcGVyX3JvdyI7czo0OiJ0eXBlIjtzOjY6Im51bWJlciI7czo1
OiJ2YWx1ZSI7czoxOiI5IjtzOjU6ImV4dHJhIjtzOjA6IiI7fWk6MzthOjc6
e3M6MTI6ImRpc3BsYXlvcmRlciI7czoxOiIwIjtzOjU6InRpdGxlIjtzOjE4
OiLnhafniYfmmL7npLrlsLrlr7giO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjA6
IiI7czo4OiJ2YXJpYWJsZSI7czoxMzoieXBfc2hvd2ltYWdlcyI7czo0OiJ0
eXBlIjtzOjY6InNlbGVjdCI7czo1OiJ2YWx1ZSI7czoyOiI3NSI7czo1OiJl
eHRyYSI7czozNDoiNzU9NzVYNzUNCjEwMD0xMDBYMTAwDQoyNDA9MjQwWDI0
MCI7fWk6NDthOjc6e3M6MTI6ImRpc3BsYXlvcmRlciI7czoxOiIwIjtzOjU6
InRpdGxlIjtzOjc6IkFwaSBLZXkiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjA6
IiI7czo4OiJ2YXJpYWJsZSI7czoxMDoieXBfYXBpX2tleSI7czo0OiJ0eXBl
IjtzOjQ6InRleHQiO3M6NToidmFsdWUiO3M6MzI6IjI1ZmZiOWE0ODQ0YTA0
NzkxZjk0YmY2YjljNmZiMDcyIjtzOjU6ImV4dHJhIjtzOjA6IiI7fWk6NTth
Ojc6e3M6MTI6ImRpc3BsYXlvcmRlciI7czoxOiIwIjtzOjU6InRpdGxlIjtz
OjEyOiJTaGFyZSBTZWNyZXQiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjA6IiI7
czo4OiJ2YXJpYWJsZSI7czoxMzoieXBfc2VjcmV0X2tleSI7czo0OiJ0eXBl
IjtzOjQ6InRleHQiO3M6NToidmFsdWUiO3M6MTY6ImhrYWt1Z3lvczVvZmhi
Z3IiO3M6NToiZXh0cmEiO3M6MDoiIjt9aTo2O2E6Nzp7czoxMjoiZGlzcGxh
eW9yZGVyIjtzOjE6IjAiO3M6NToidGl0bGUiO3M6MjQ6Iuavj+mhteebuOWG
jOaYvuekuuaVsOmHjyI7czoxMToiZGVzY3JpcHRpb24iO3M6MDoiIjtzOjg6
InZhcmlhYmxlIjtzOjE1OiJ5cGxpc3RfcGVyX3BhZ2UiO3M6NDoidHlwZSI7
czo2OiJudW1iZXIiO3M6NToidmFsdWUiO3M6MjoiNDUiO3M6NToiZXh0cmEi
O3M6MDoiIjt9aTo3O2E6Nzp7czoxMjoiZGlzcGxheW9yZGVyIjtzOjE6IjAi
O3M6NToidGl0bGUiO3M6MjQ6Iuavj+ihjOebuOWGjOaYvuekuuaVsOmHjyI7
czoxMToiZGVzY3JpcHRpb24iO3M6MDoiIjtzOjg6InZhcmlhYmxlIjtzOjE0
OiJ5cGxpc3RfcGVyX3JvdyI7czo0OiJ0eXBlIjtzOjY6Im51bWJlciI7czo1
OiJ2YWx1ZSI7czoxOiI2IjtzOjU6ImV4dHJhIjtzOjA6IiI7fX19
3.导入插件,具体如下(你也可以直接复制当成解压缩包中discuz_plugin_yupoo.txt)–/GBK/:
代码:
# Discuz! Plugin Dump
# Version: Discuz! 6.0.0
# Time: 2007-12-25 13:42
# From: Discuz! Board (http://localhost/xt/discuz6_gbk/)
#
# Discuz! Community: [url]http://www.Discuz.net[/url]
# Please visit our website for latest news about Discuz!
# --------------------------------------------------------
YTozOntzOjY6InBsdWdpbiI7YTo5OntzOjk6ImF2YWlsYWJsZSI7czoxOiIx
IjtzOjc6ImFkbWluaWQiO3M6MToiMSI7czo0OiJuYW1lIjtzOjk6IllVUE9P
z+Cy4SI7czoxMDoiaWRlbnRpZmllciI7czo1OiJ5dXBvbyI7czoxMToiZGVz
Y3JpcHRpb24iO3M6MTM6IllVUE9Pz+Cy4bLlvP4iO3M6MTA6ImRhdGF0YWJs
ZXMiO3M6MTA6Inl1cG9vX3VzZXIiO3M6OToiZGlyZWN0b3J5IjtzOjY6Inl1
cG9vLyI7czo5OiJjb3B5cmlnaHQiO3M6MTE6Im9zY2FyIHpoYW5nIjtzOjc6
Im1vZHVsZXMiO3M6MTMxOiJhOjE6e2k6MDthOjU6e3M6NDoibmFtZSI7czo1
OiJ5dXBvbyI7czo0OiJtZW51IjtzOjk6IllVUE9Pz+Cy4SI7czo0OiJ0eXBl
IjtzOjE6IjIiO3M6NzoiYWRtaW5pZCI7czoxOiIwIjtzOjEyOiJkaXNwbGF5
b3JkZXIiO2k6MDt9fSI7fXM6NzoidmVyc2lvbiI7czo1OiI2LjAuMCI7czo0
OiJ2YXJzIjthOjg6e2k6MDthOjc6e3M6MTI6ImRpc3BsYXlvcmRlciI7czox
OiIwIjtzOjU6InRpdGxlIjtzOjg6IrLlvP6/qrnYIjtzOjExOiJkZXNjcmlw
dGlvbiI7czowOiIiO3M6ODoidmFyaWFibGUiO3M6OToieXBfb25fb2ZmIjtz
OjQ6InR5cGUiO3M6NToicmFkaW8iO3M6NToidmFsdWUiO3M6MToiMSI7czo1
OiJleHRyYSI7czowOiIiO31pOjE7YTo3OntzOjEyOiJkaXNwbGF5b3JkZXIi
O3M6MToiMCI7czo1OiJ0aXRsZSI7czoxNjoiw7/Ss9XVxqzP1Mq+yv3BvyI7
czoxMToiZGVzY3JpcHRpb24iO3M6MDoiIjtzOjg6InZhcmlhYmxlIjtzOjEx
OiJ5cF9wZXJfcGFnZSI7czo0OiJ0eXBlIjtzOjY6Im51bWJlciI7czo1OiJ2
YWx1ZSI7czoyOiI5MCI7czo1OiJleHRyYSI7czowOiIiO31pOjI7YTo3Ontz
OjEyOiJkaXNwbGF5b3JkZXIiO3M6MToiMCI7czo1OiJ0aXRsZSI7czoxNjoi
w7/Q0NXVxqzP1Mq+yv3BvyI7czoxMToiZGVzY3JpcHRpb24iO3M6MDoiIjtz
Ojg6InZhcmlhYmxlIjtzOjEwOiJ5cF9wZXJfcm93IjtzOjQ6InR5cGUiO3M6
NjoibnVtYmVyIjtzOjU6InZhbHVlIjtzOjE6IjkiO3M6NToiZXh0cmEiO3M6
MDoiIjt9aTozO2E6Nzp7czoxMjoiZGlzcGxheW9yZGVyIjtzOjE6IjAiO3M6
NToidGl0bGUiO3M6MTI6ItXVxqzP1Mq+s9+05yI7czoxMToiZGVzY3JpcHRp
b24iO3M6MDoiIjtzOjg6InZhcmlhYmxlIjtzOjEzOiJ5cF9zaG93aW1hZ2Vz
IjtzOjQ6InR5cGUiO3M6Njoic2VsZWN0IjtzOjU6InZhbHVlIjtzOjI6Ijc1
IjtzOjU6ImV4dHJhIjtzOjM0OiI3NT03NVg3NQ0KMTAwPTEwMFgxMDANCjI0
MD0yNDBYMjQwIjt9aTo0O2E6Nzp7czoxMjoiZGlzcGxheW9yZGVyIjtzOjE6
IjAiO3M6NToidGl0bGUiO3M6NzoiQXBpIEtleSI7czoxMToiZGVzY3JpcHRp
b24iO3M6MDoiIjtzOjg6InZhcmlhYmxlIjtzOjEwOiJ5cF9hcGlfa2V5Ijtz
OjQ6InR5cGUiO3M6NDoidGV4dCI7czo1OiJ2YWx1ZSI7czozMjoiMjVmZmI5
YTQ4NDRhMDQ3OTFmOTRiZjZiOWM2ZmIwNzIiO3M6NToiZXh0cmEiO3M6MDoi
Ijt9aTo1O2E6Nzp7czoxMjoiZGlzcGxheW9yZGVyIjtzOjE6IjAiO3M6NToi
dGl0bGUiO3M6MTI6IlNoYXJlIFNlY3JldCI7czoxMToiZGVzY3JpcHRpb24i
O3M6MDoiIjtzOjg6InZhcmlhYmxlIjtzOjEzOiJ5cF9zZWNyZXRfa2V5Ijtz
OjQ6InR5cGUiO3M6NDoidGV4dCI7czo1OiJ2YWx1ZSI7czoxNjoiaGtha3Vn
eW9zNW9maGJnciI7czo1OiJleHRyYSI7czowOiIiO31pOjY7YTo3OntzOjEy
OiJkaXNwbGF5b3JkZXIiO3M6MToiMCI7czo1OiJ0aXRsZSI7czoxNjoiw7/S
s8/gsuHP1Mq+yv3BvyI7czoxMToiZGVzY3JpcHRpb24iO3M6MDoiIjtzOjg6
InZhcmlhYmxlIjtzOjE1OiJ5cGxpc3RfcGVyX3BhZ2UiO3M6NDoidHlwZSI7
czo2OiJudW1iZXIiO3M6NToidmFsdWUiO3M6MjoiNDUiO3M6NToiZXh0cmEi
O3M6MDoiIjt9aTo3O2E6Nzp7czoxMjoiZGlzcGxheW9yZGVyIjtzOjE6IjAi
O3M6NToidGl0bGUiO3M6MTY6IsO/0NDP4LLhz9TKvsr9wb8iO3M6MTE6ImRl
c2NyaXB0aW9uIjtzOjA6IiI7czo4OiJ2YXJpYWJsZSI7czoxNDoieXBsaXN0
X3Blcl9yb3ciO3M6NDoidHlwZSI7czo2OiJudW1iZXIiO3M6NToidmFsdWUi
O3M6MToiNiI7czo1OiJleHRyYSI7czowOiIiO319fQ==
联系MSN:oscar810429@hotmail.com
YUPOO个人主页:http://zhangsf.yupoo.com
awstats安装和配置
七 2nd
1.下载&&安装
http://awstats.sourceforge.net/
tar .. && cd …. && perl awstats_configure.pl
#然后根据提示操作,可以不要这步,直接根据自带的模版定义
#cp ../cgi-bin/awstats.model.conf /etc/awstats/common.conf
2.按照一下样例设置配置文件:
#cd /etc/awstats
#vi awstats.www.zhangjianfeng.com.conf
Include “common.conf”
LogFile=”/home/apache/logs/access_log.%YYYY-24%MM-24%DD-24″ %YYYY-24%MM-24%DD-24>>>
是指用24小时前的年月日日志文件名,如access_log.20061206
SiteDomain=”www.zhangjianfeng.com”
HostAliases=”zhangjianfeng.com”
DefaultFile=”index.html”
DirData=”/home/cgi-bin/awstats/data/”
3.更新数据
perl awstats.pl -config=mysite -update
4.配置apache
# Directives to allow use of AWStats as a CGI
Alias /awstatsclasses “/app/awstats-6.5/wwwroot/classes/”
Alias /awstatscss “/app/awstats-6.5/wwwroot/css/”
Alias /awstatsicons “/app/awstats-6.5/wwwroot/icon/”
ScriptAlias /awstats/ “/app/awstats-6.5/wwwroot/cgi-bin/”
<Directory “/app/awstats-6.5/wwwroot”>
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
5.对要分析的虚拟主机, 将CustomLog logs/access_xxx_log >>>
<<<common中的common改成combined
6. 重启apache,如果虚拟主机或目录配置好了,
就http://server/awstats/awstats.pl?config=mysite
7.添加定时分析指令
crontab -e
* */1 * * * (cd /path/to/apache/cgi-bin/; ./awstats.pl >>>
<<<-update -config=blog.zhangjianfeng.com)
8.直接分析gunzip压过的log
查了一下,如果是gz格式的压缩包,可以在配置文件中参考如下格式修改:
LogFile=”gzip -d </日志的绝对路径/wwwlog%YYYY-24%MM-24%DD-24.log.gz |”
附: 其它说明
#就是不统计指定IP的访问量
SkipHosts=”x.x.x.x.”
#数据源日志格式和按天的截断规则
对于Apache:日志格式好设置:设置成combined格式即可,
日志截断麻烦一点:需要安装cronolog工具,
将日志设置成按天截断:
CustomLog “|/usr/local/sbin/cronolog >>>
<<</path/to/apache/logs/access_log.%Y%m%d” combined 比如:logs/access_log.20061126
日志是压缩格式,
可以使用gzip -d < /home/apache/logs/access_log.%YYYY-24%MM-24%DD-24.gz |
动态解压缩统计。
#多站点日志统计
AWStats自带了一个批处理工具:tools/awstats_updateall.pl,
可以批量地遍历一个目录下
所有地配置文件并运行统 计。针对多个站点,很多配置选项是重复的,
如果每个配置文件都
修改维护起来会很麻烦,所以我们可 以配置一个通用配置,比如:common.conf
然后其他站点的配置设置可以通过后面的选项覆盖和缺省不一致的配置。
awstats.www.zhangjianfeng.com.conf
Include “common.conf”
LogFile “/path/to/access_log”
SiteName “www.zhangjianfeng.com”
HostAliases=”zhangjianfeng.com”
#统计指标说明
参观者:按来访者不重复的IP统计,一个IP代表一个参观者;
参观次数:一个参观者可能1天之内参观多次(比如:上午一次,下午一次),
所以按一定时间内(比如:1个小时),不重复的IP数统计,参观者 的访问次数;
网页数:不包括图片,CSS, JavaScript文件等的纯页面访问总数,
但如果一个页面使用了多个帧,
每个帧都算一个页面请求;
文件数:来自浏览器客户端的文件请求总数,包括图片,CSS,JavaScript等,
用户请求一个页面是,
如果页面中包含图片等,所以对服 务器会发出多次文件请求,文件数一般远远大于文件数;
字节:传给客户端的数据总流量;
来自REFERER中的数据:日志中的参考(REFERER)字段,
记录了访问相应网页之前地址,
因此如果用户是通过搜索引擎的搜索结果点击 进入网站的,
日志中就会有用户在相应搜索
引擎的查询地址,这个地址中就可以通过解析将用户查询使用的关键词提取出来:
##plugin
安装GeoIP
需要
GeoIP C Library
Geo::IP Perl Module (faster, but requires C library)
Geo::IP::PurePerl Module (slower, but does not require C library)
C Library和Perl Module是一组,必须先编译安装C的,再编译安装perl,
或者直接装PurePerl Module,我就是这种方式
安装GeoIP C Library
# wget http://www.maxmind.com/download>>>
<<</geoip/api/c/GeoIP-1.3.8.tar.gz
# tar zxvf GeoIP-1.3.8.tar.gz
# cd GeoIP-1.3.8
# ./configure; make; make install
安装 Geo::IP Perl Module
# wget http://www.maxmind.com/>>>
<<<download/geoip/api/perl/Geo-IP-1.25.tar.gz
# tar zxvf Geo-IP-1.25.tar.gz
# cd Geo-IP-1.25
# perl Makefile.PL
# make
# make test (在AS4下通不过,放弃,改装PurePerl Module)
# make install
以上两步也可以这样安装
# perl -MCPAN -e shell
cpan> install Geo::IP
安装Geo::IP::PurePerl Module
# wget http://www.maxmind.com/download/>>
<<geoip/api/pureperl/Geo-IP-PurePerl-1.14.tar.gz
# tar zxvf Geo-IP-PurePerl-1.14.tar.gz
# cd Geo-IP-PurePerl-1.14
# perl Makefile.PL
# make
# make test
# make install
也可以这样安装
# perl -MCPAN -e shell
cpan> install Geo::IP::PurePerl
修改/usr/local/etc/awstats/awstats.www.test.com.conf,
取消下面这行的注释,启用此插件
LoadPlugin=”geoip GEOIP_STANDARD”
更新GeoIP库
# cd /usr/local/share/GeoIP/
# wget http://www.maxmind.com/download/geoip/database/GeoIP.dat.gz
# gunzip GeoIP.dat.gz
定时更新GeoIP库
0 0 * * * root /usr/local/bin/geoipupdate -v
安装XWhois
# perl -MCPAN -e shell
cpan> install Net::XWhois
修改/usr/local/etc/awstats/awstats.www.test.com.conf,
取消下面这行的注释,启用此插件
LoadPlugin=”hostinfo”
安装decodeutfkeys
# perl -MCPAN -e shell
cpan> install URI::Escape
修改/usr/local/etc/awstats/awstats.www.test.com.conf,
取消下面这行的注释,启用此插件
LoadPlugin=”decodeutfkeys”
更新日志
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl
-config=www.zhangjianfeng.com-update -lang=c
如何编写兼容各主流邮箱的HTML邮件
六 13th
1、全局规则之一,不要写<style>标签、不要写class,所有CSS都用style属性,什么元素需要什么样式就用style写内联的CSS。
2、全局规则之二,少用图片,邮箱不会过滤你的img标签,但是系统往往会默认不载入陌生来信的图片,如果用了很多图片的邮件,在片没有载入的情况下,丑陋无比甚至看不清内容,没耐心的用户直接就删除了。图片上务必加上alt。
3、不要在style里面写float、position这些style,因为会被过滤。那么如何实现左右布局或者更复杂的布局呢?用table。
4、 style内容里面background可以设置color,但是img会被过滤,就是说不能通过CSS来设置背景图片了。但是有一个很有意思的元素属 性,也叫background,里面可以定义一个图片路径,这是个不错的替代方案,虽然这样功能有限,比如无法定位背景图片了,有总比没有好。例如要给一 个单元格加一个背景,必须这样写:
5、div模式的邮箱不支持flash,iframe模式的有待验证。
Imagemagick安装和配置
四 1st
首先到http://www.Imagemagick.org去下载有关软件包来安装和配置
1.安装Imagemagick(6.3.9-10):
./configure –prefix=/usr/local/ImageMagick –enable-shared –enable-lzw LDFLAGS=”-L/usr/lib” CPPFLAGS=”-I/usr/include”
2.安装Imagemagick2.1.0-rc(PHP客户端工具为例):
./configure –with-php-config=/usr/local/php/bin/php-config –with-imagick=/usr/local/ImageMagick
3.安装附加软件magickwand1.7.0(PHP为例):
./configure –with-php-config=/usr/local/php/bin/php-config –with-magickwand=/usr/local/ImageMagick
以上安装测试在linux AS4上调试成功.WEB环境是:Apache2.0.55+Php5
大家要以在PHP4版上可以进行调试一下.PHP4这个环境我没有试过.请大家也要以尝试一下.
关于其他Imagemagick客户端软件有java、perl、python、C++等等有兴趣可以调试一下。
MySQL4.1以上版本字符集
三 23rd
MySQL 4.1开始,对多语言的支持有了很大变化 (这导致了问题的出现)。尽管大部分的地方 (包括个人使用和主机提供商),MySQL 3、4.0 仍然占主导地位;但 MySQL 4.1 乃至5.0是 MySQL 官方推荐的数据库,已经有主机提供商开始提供并将会越来越多;因为 latin1 在许多地方 (下边会详细描述具体是哪些地方) 作为默认的字符集,成功的蒙蔽了许多 PHP 程序的开发者和用户,掩盖了在中文等语言环境下会出现的问题。
MySQL 4.1开始把多国语言字符集分的更加详细,所以导致数据库迁移,或则dz论坛升级到4.0后(dz4.0开始使用gbk或utf-8编码)出现乱码问题。
MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。
查看系统的字符集和排序方式的设定可以通过下面的两条命令:
QUOTE:
mysql> SHOW VARIABLES LIKE ‘character_set_%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
7 rows in set (0.00 sec)
mysql> SHOW VARIABLES LIKE ‘collation_%’;
+———————-+——————-+
| Variable_name | Value |
+———————-+——————-+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+———————-+——————-+
3 rows in set (0.00 sec)
MySQL 4.1 对于字符集的指定可以细化到一台机器上安装的 MySQL,其中的一个数据库,其中的一张表,其中的一栏,应该用什么字符集。但是,传统的 Web 程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢?
编译 MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
安装 MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;
启动 mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的;
此时 character_set_server 被设定为这个默认的字符集;
当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为 character_set_server;
当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;
在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;
当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;
这个字符集就是数据库中实际存储数据采用的字符集,mysqldump 出来的内容就是这个字符集下的;
当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。
想要进行“正确”的存储和得到“正确”的结果,最方便的是在所有query开始之前执行一下:
SET NAMES ‘gbk’;
其中gbk是数据库字符集。
它相当于下面的三句指令:
SET character_set_client = gbk;
SET character_set_results = gbk;
SET character_set_connection = gbk;
4.1和5.0默认使用的是latin1字符集(木头:妈的,老外真霸道,妄想让全世界都是使用瑞典字符集吗)
如果我们只想使用gbk字符集存储和获取数据,
我们在编译mysql 4.1和 5.0的时候,需要注意在my.ini或者my.cnf中添加两处参数
[mysqld]
default-character-set=utf8
#settings for clients (connection, results, clients)
[mysql]
default-character-set=utf8
下面我们来说主题,如何转换数据库字符集
两种方法,
第一种—-更改存储字符集
主要的思想就是把数据库的字符集有latin1改为gbk,big5,或者utf8; 以下操作必须拥有主机权限。假设当前操作的数据库名为:database 导出
首先需要把数据导为mysql4.0的格式,具体的命令如下:
mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt databse > d4.sql
–default-characte-set 以前数据库的字符集,这个一般情况下都是latin1的,
–set-charset 导出的数据的字符集,这个可以设置为gbk,utf8,或者big5
导入
首先使用下面语句新建一个GBK字符集的数据库(test)
CREATE DATABASE `d4` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
然后把刚才导出的数据导入到当前的数据库中就ok了。
mysql -uroot -p --default-character-set=gbk -f d4 < d4 .sql
通过以上的导出和导入就把数据库的字符集改为正确的存储方式了。
其中d4为新建库的名称,d4.sql为导出文件的名字
但是这种方法,发现数据库数据存储量无端变大30%,真是郁闷
QUOTE:
另外一种其实原理相同,但是需要手动操作,一般用于第一种方法失败后的选择
不过这种方法如果数据库很大,估计很难做,因为光打开文件就能让你死机
首先还是用phpmyadmin或者用mysql本身的dump导出 .sql文件
然后用UltraEdit打开你备份的所有xxxx.sql文件,查找
DEFAULT CHARSET=latin1
latin1这里也许是别的,反正是你不想要的,要转成gbk或者big5的字符集
把这个替换为“空”
在查找9
CREATE TABLE cdb_sessions (
sid char(6) character set latin1 collate latin1_bin NOT NULL default ”,
ip1 tinyint(3) unsigned NOT NULL default ‘0′,
ip2 tinyint(3) unsigned NOT NULL default ‘0′,
ip3 tinyint(3) unsigned NOT NULL default ‘0′,
ip4 tinyint(3) unsigned NOT NULL default ‘0′,
uid mediumint(8) unsigned NOT NULL default ‘0′,
username char(15) NOT NULL default ”,
groupid smallint(6) unsigned NOT NULL default ‘0′,
styleid smallint(6) unsigned NOT NULL default ‘0′,
invisible tinyint(1) NOT NULL default ‘0′,
`action` tinyint(1) unsigned NOT NULL default ‘0′,
lastactivity int(10) unsigned NOT NULL default ‘0′,
fid smallint(6) unsigned NOT NULL default ‘0′,
tid mediumint(8) unsigned NOT NULL default ‘0′,
nickname char(15) NOT NULL default ”,
UNIQUE KEY sid (sid)
) ENGINE=HEAP MAX_ROWS=1000;
替换为
CREATE TABLE `cdb_sessions` (
`sid` char(6) binary NOT NULL default ”,
`ip1` tinyint(3) unsigned NOT NULL default ‘0′,
`ip2` tinyint(3) unsigned NOT NULL default ‘0′,
`ip3` tinyint(3) unsigned NOT NULL default ‘0′,
`ip4` tinyint(3) unsigned NOT NULL default ‘0′,
`uid` mediumint(8) unsigned NOT NULL default ‘0′,
`username` char(15) NOT NULL default ”,
`groupid` smallint(6) unsigned NOT NULL default ‘0′,
`styleid` smallint(6) unsigned NOT NULL default ‘0′,
`invisible` tinyint(1) NOT NULL default ‘0′,
`action` tinyint(1) unsigned NOT NULL default ‘0′,
`lastactivity` int(10) unsigned NOT NULL default ‘0′,
`fid` smallint(6) unsigned NOT NULL default ‘0′,
`tid` mediumint(8) unsigned NOT NULL default ‘0′,
`nickname` char(15) NOT NULL default ”,
UNIQUE KEY `sid` (`sid`)
) TYPE=HEAP MAX_ROWS=2000;
这一步更为简单的办法就是删除掉关于cdb_sessions表的这一段,将来全新装一个d4,将这个表导出
将其内容复制,粘贴到 sql文件的最后面
保存后,再把这个sql文件导入到你的库中
就OK了
用这两种方法就可以很方便的把4.1和5.0的mysql数据库降级到4.0
简单的过程就是
A导出4.1/5.0的库
B进行处理,转换成gbk字符集
C彻底卸载4.1或者5.0
D安装4.0.26
E然后导入处理完的库
降级的时候导出库可以用这个方法
mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt databse –compatible=mysql40 > d4.sql
这样导出的就是4.0的库勒
至于mysql版本的升级,
如果数据文件中有中文信息,那么将MySQL 4.0的数据文件,直接拷贝到MySQL 4.1中就是不可以的,即便在my.ini中设置了default-character-set为正确的字符集。虽然貌似没有问题,但MySQL 4.1的字符集有一处非常恼人的地方,以gbk为例,原本MySQL 4.0数据中varchar,char等长度都会变为原来的一半,这样存储中文容量不变,而英文的存储容量就少了一半。这是直接拷贝数据文件带来的最大问题。
所以,升级的根本,如果想使用“正确”的字符集,还是先用mysqldump导出成文件,然后导入
