Archive for the ‘原创技术文章’ Category

apache目录密码保护错误

一月 12th, 2010

apache的.htaccess有个可以保护目录的功能。当用户访问这个目录里资源的时候,会弹出对话框,让输入用户名和口令。在设置的时候有一些关必要条件。比如启用.htaccess文件等。
这2天在freebsd里面想这么做一次,但是遇到了问题,一直报错
configuration error: couldn’t check user. No user file?
后来经过调整,还有
configuration error: couldn’t check access. No groups file?

Invalid command ‘AuthUserFile’, perhaps misspelled or defined by a module not included in the server configuration
等错误信息。

后来经过n多个小时。。n>3,最后准备投降的时候,看到httpd.conf里面有一些注释掉名字里面有auth字样的module。一狠心,全去掉注释,好了!
又经过一番测试。
需要启用下面的三个module

  1. LoadModule authn_file_module libexec/apache22/mod_authn_file.so
  2. LoadModule authz_user_module libexec/apache22/mod_authz_user.so
  3. LoadModule auth_basic_module libexec/apache22/mod_auth_basic.so

当然我用的是
AuthType Basic
.htaccess的内容如下

  1. AuthType Basic
  2. AuthName "admin"
  3. AuthUserFile /usr/local/etc/apache22/.htpasswd
  4. Require user admin

Popularity: 3%

awstats SiteDomain parameter not defined

一月 11th, 2010

再次安装了一下awstats,不知道是不是用freebsd ports没有安装在awstats默认目录的原因用自动配置的工具awstats_configure.pl 老是配置不行。就自己用awstats.model.conf改写了一个config文件。
运行
/usr/local/www/awstats/tools/awstats_updateall.pl now
报错
Error: SiteDomain parameter not defined in your config/domain file. You must edit it for using this version of AWStats.
Setup (‘/etc/awstats/awstats.conf’ file, web server or permissions) may be wrong.
Check config file, permissions and AWStats documentation (in ‘docs’ directory).

找了半天,有说是命令参数的问题。后来发现,是因为SiteDomain没有填写值的原因,简单的只要有
SiteDomain和LogFile就行。

Popularity: 2%

find grep perl配合查找替换内容

一月 5th, 2010

有时候需要对一个目录或者一批文件进行内容的替换。
可以用find配合sed或者perl来完成
查找当前目录下,把

  1. </title>

替换成

  1. </title><meta http-equiv="Content-Type" content="text\/html; charset=utf-8" />
  1. find ./ -type f -exec sed -i "s/<\/title>/<\/title><meta http-equiv=\"Content-Type\" content=\"text\/html; charset=utf-8\" \/>/g" {} \;

上边是在linux,好像centos也可以,但是FreeBSD上不行,懒得查语法了。搞了个find+perl的版本
把abc换成def

  1. find ./ -type f | xargs perl -pi -e "s/abc/def/g"

FreeBSD不行,可能是shell不对。切换到bash,没报错了

Popularity: 4%

用oracle的merge实现mysql的replace into

九月 2nd, 2009

mysql有一个replace into的dml语句,类似insert,但是会在insert之前检查表的唯一索引或主键。如果存在,就改为update操作。
这在很多应用中是一个很常用的操作。有了这个replace into ,就可以将一个 select后判断后做update or insert改为一句话,甚是方便。

oracle9以后(好像)有了merge into,也可以实现类似功能,sql demo如下

  1. merge into qq a
  2. using (select '2022' company_no, 'cname' company_name from qq where rownum<2) b
  3. on (a.company_no = b.company_no)
  4. WHEN MATCHED THEN
  5.   UPDATE SET a.company_name = a.company_name|| 'a'
  6. WHEN NOT MATCHED THEN
  7.   INSERT
  8.     (a.company_no, a.company_name)
  9.   VALUES
  10.     (b.company_no, b.company_name);

Popularity: 26%

mysql里面的oracle decode

八月 26th, 2009

oracle里面有一个decode的函数,顾名思义,可以将1,2,3按照需求转成a,b,c,最后还有一个缺省值。

mysql里面好像没有这个函数。但是可以用另外的函数来实现类似的效果。

IF(expr1,expr2,expr3)
如果expr1是TRUE(expr1<>;0且expr1<>;NULL),那么IF()返回expr2,否则它返回expr3。IF()返回一个数字或字符串值

oracle的写法

SELECT decode(ttype,1,’a',2,’b',3,’c',’d') FROM taba

可以在mysql里写成

SELECT if( ttype =1, ‘a’, if( ttype =2, ‘b’, if( ttype =3, ‘c’, ‘d’ ) ) )
FROM taba

Popularity: 28%

如何跳出jquery的each?

八月 1st, 2009

jquery再遍历选定的对象时候用each比较方便。有种应用是找到里面符合条件的对象后,要跳出这个循环。
javascript的跳出循环一般用break.
同事遇到这个问题,下意识 的用了break,想跳出这个循环。结果报错

SyntaxError: unlabeled break must be inside loop or switch

经查,应该用一个

return false;

continue是跳出当前循环,继续下一个循环。

Popularity: 44%

jquery实现ajax投票一例

七月 30th, 2009

其实是很简单的,一个或多个页面有一堆摄影作品,用户点击投票,相应的作品数量增加1.

前台jsp部分的代码如下:

  1. ...
  2. 票数:<span id="i<%=id%>"><%=vote_number%></span><br/>
  3.     <a onclick=myvote(<%=id%>); href='javascript:;'">投票</a>
  4. ...

js部分的代码如下

  1. function myvote(id){
  2.     $.post("vote.jsp", { id: id },
  3.   function(data){
  4.         eval("var data="+data);
  5.     if (data.issucc=="0"){
  6.         alert(data.mess)
  7.     }else{
  8.         //alert("更新页面");
  9.         $("#i"+data.myid).html(data.votenum);
  10.         }
  11.   });
  12. }

后台返回的json数据如下

{issucc:<%=issucc%>,mess:”<%=mess%>“,votenum:<%=votenum%>,myid:<%=myid%>}

issucc:是否成功
mess:信息,主要是错误信息,比如没登录,超过限制等
votenum:投票后的得票总数
myid:投票的id,用于更新页面的投票数。

Popularity: 32%

备份一段js代码

六月 26th, 2009

<script language=”JavaScript” src=”/include/jquery-latest.pack.js”></script>
<script language=JavaScript>
var tmp=”";
function formatn(n){
 if (n<10)
  return “0″+n;
 else
  return “”+n;
}
$(document).ready(function() {
 var f=document.form1.elements;
 var n_i=1;
 var s_i=”";
 var n_v=1;
 for(var i=0;i<f.length;i++){
  //tmp+=f[i].value+”\n”;
  if (f[i].type==”hidden”||f[i].name==”reg_no” ){
   continue;
  }
  if (f[i].type==”text”||f[i].type==”textarea”){
   f[i].name=f[i].id=”text_”+formatn(n_i);
   n_i++; continue;
  }
  if (f[i].type==”radio”||f[i].type==”checkbox”){
   var oname=f[i].name;
   f[i].name=f[i].id=”check_”+formatn(n_i);
   f[i].value=formatn(n_v);
   if (i<f.length){
    if (oname!=f[i+1].name||f[i].type!=f[i+1].type){
     n_i++;
     n_v=1;
    }
    else
     n_v++;
   }
    continue;
  }
 }
});
</script>

Popularity: 21%

ecshop 2.6.2 sitemaps.php的一个bug

五月 16th, 2009

生成的sitemap文件,商品分类文件,如果是

http://www.abc.com/category-1-b0.html

在sitemap文件里面少了一个”/”
结果变成了

http://www.abc.comcategory-1-b0.html

分类是
修改代码
sitemaps.php大约第66行

  1. 'loc'        =>  "$site_url" . build_uri('category', array('cid' => $row['cat_id'])),

改成

  1. 'loc'        =>  "$site_url/" . build_uri('category', array('cid' => $row['cat_id'])),

即可

Popularity: 25%

FCKEditor XML Request Error:Internal Server Error(500)

五月 1st, 2009

原来一直能用的ecshop后台信息发布里面的fckeditor上传功能,换了个机器后不能用了。以为是文件损坏,上传一边不行。
什么xml错误,还弹出一个大的JavaScript alert警告框,内容就是服务器端错误的500内容
网上搜,又说是配置问题,主题问题,想想都不应该,直接请求
filemanager/connectors/php/connector.php
出了服务器的500错误,html文件能访问,txt也行。
后来从根目录开始查,发现到fckeditor目录里面的php文件开始不能访问。
改了fckeditor目录的属性为755,问题解决。

Popularity: 34%