linux 压缩打包tar命令备忘

排除目录下不需要打包的目录

tar cvfz chenxu.tar.gz dir --exclude dir/dir1 --exclude dir/dir2/dir3

 

tar在linux上是常用的打包、压缩、加压缩工具,他的参数很多,折里仅仅列举常用的压 缩与解压缩参数

参数:

-c :create 建立压缩档案的参数;

-x : 解压缩压缩档案的参数;

-z : 是否需要用gzip压缩;

-v: 压缩的过程中显示档案;

-f: 置顶文档名,在f后面立即接文件名,不能再加参数

 

举例: 一,将整个/home/www/images 目录下的文件全部打包为 /home/www/images.tar

[root@xoaocom ~]# tar -cvf /home/www/images.tar /home/www/images ← 仅打包,不压缩

[root@xoaocom ~]# tar -zcvf /home/www/images.tar.gz /home/www/images ← 打包后,以gzip压缩

 

在参数f后面的压缩文件名是自己取的,习惯上用tar来做,如果加z参数,则以tar.gz 或tgz来代表gzip压缩过的tar file文件

 

举例: 二,将 /home/www/images.tar.gz 解压到/home/www下面

[root@xoaocom ~]# cd /home/www

[root@xoaocom ~]# tar -zxvf /home/images.tar.gz

 

解压到指定的目录

[root@xoaocom ~]# tar -zxvf /home/images.tar.gz -C /specific dir

 

解包到指定的目录

tar xvf filename.tar -C /specific dir

兼容ie FF 多浏览器的js获取url参数

<script language="javascript" type="text/javascript">
//js获取url参数的function
function request(paras){
var url = location.href;   //url
var paraString = url.substring(url.indexOf("?")+1,url.length).split("&");  
var paraObj = {}   //参数组
for (i=0; j=paraString[i]; i++){  
paraObj[j.substring(0,j.indexOf("=")).toLowerCase()] = j.substring(j.indexOf
("=")+1,j.length);  
}  
var returnValue = paraObj[paras.toLowerCase()];  
if(typeof(returnValue)=="undefined"){  
return "";  
}else{  
return returnValue;  
}  
}
var theurl
theurl=request("url");
if (theurl!=''){
location=theurl
}
</script>

几种js获取url及参数, 并分析url的任意部分

 

 

1.获取URL
获取url方法,直接用location就可以了,window.location或window.loation.href也可以。

  1. <script language="javascript"> 
  2. var t1=location
  3. var t2=window.location
  4. var t3=window.location.href; 
  5. document.write("location="+t1+"<br />"+"window.location="+t2+"<br />"+"window.location.href="+t3); 
  6. </script> 

2.分析URL
运用location获取的url属性为object,要对其进行字符串" title="字符串">字符串的分析操作,需要先将其转换为字符串" title="字符串">字符串。

  1. <script language="javascript" type="text/javascript"> 
  2. var t1=location
  3. var t2=window.location
  4. var t3=window.location.href; 
  5. document.write("location型为: "+typeof(t1)+"<br />"+"window.location型为: "+typeof(t2)+"<br />"+"window.location.href型为: "+typeof(t3)); 
  6. </script> 

location进行处理,首先将其转换为字符串" title="字符串">字符串,用函数toString(),URL.toString();

  1. <script language="javascript" type="text/javascript"> 
  2. var t1=location
  3. var URL=t1.toString(); 
  4. document.write("location型为: "+typeof(t1)+"<br />"+"URL型为: "+typeof(URL)); 
  5. </script> 

在URL中查找需要的内容,比如我我们需要查找id的值,根据页面的URL可以看出id=后面就是,进行如下查找

  1. <script language="javascript" type="text/javascript"> 
  2. window.location.href="http://http://guokai2009.blog.hexun.com/default.xasp?id=70"; 
  3. var t1=location
  4. var URL=t1.toString(); 
  5. document.write("location型为: "+typeof(t1)+"<br />"+"URL型为: "+typeof(URL)); 
  6. if(URL.indexOf("id")==-1){ 
  7. alert("there is no id!"); 
  8. }else{ 
  9. var id=URL.split("id="); 
  10. alert(id[1]); 
  11. </script> 

获取URL里的文件夹名:

  1. <script language="javascript" type="text/javascript"> 
  2. var folder=window.location.pathname; 
  3. var f=new Array(); 
  4. f=folder.split("/"); 
  5. alert("文件地址为:"+f[1]); 
  6. </script> 

另附一些URL参数

完整的URL由这几个部分构成:
scheme://host:port/path?query#fragment

scheme = 通信协议 (常用的http,ftp,maito等)
host = 主机 (域名或IP)
port = 端口号
path = 路径

query = 查询
可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技术制作的网页)传递参数,可有参数,用”&”符号隔开,每个参数的名和值用”=”符号隔开。

fragment = 信息片断
字符串" title="字符串">字符串,用于指定网络资源中的片断。例如一个网页中有个名词解释,可使用fragment直接定位到某一名词解释。(也称为锚点.)

对于这样一个URL
http://hexun.com.com:80/seo/?ver=1.0&id=6#imhere

我们可以用javascript获得其中的各个部分
1, window.location.href
整个URl字符串" title="字符串">字符串(在浏览器中就是完整地址栏" title="地址栏">地址栏)

2,window.location.protocol
URL 的协议部分
本例返回值" title="返回值">返回值:http:

3,window.location.host
URL 的主机部分
本例返回值" title="返回值">返回值:hexun.com

4,window.location.port
URL 的端口部分
如果采用默认的80端口(update:即使添加了:80),那么返回值" title="返回值">返回值并不是默认的80而是空字符
本例返回值" title="返回值">返回值:”"

5,window.location.pathname
URL 的路径部分(就是文件地址)
本例返回值" title="返回值">返回值:/seo/

6,window.location.search
查询(参数)部分
除了给动态言赋值以外,我们同样可以给静态页面,并使用javascript来获得相信应的参数值
本例返回值" title="返回值">返回值:?ver=1.0&id=6

7,window.location.hash
锚点
本例返回值" title="返回值">返回值:#imhere

最后介绍一个郭恺刚刚使用的 这个能让你获取任何一部分 

  1. <script language=javascript> 
  2. nction" title="function">function lename" title="filename">filename() { 
  3.     var a= document.location.href; 
  4.     var n1=a.lastIndexOf('/')+1    
  5.     var n2=a.lastIndexOf('_d.html') 
  6.     a=a.substring(n1,n2) 
  7.     alert(a);  

  8. lename" title="filename">filename() 
  9. </script> 

将取出当前地址文件名字,不带后缀

//a.lastIndexOf(\'/\') 从右向左取出第一个“/”的位置,也可以写成a.lastIndexOf(\'/\',0)第二个参数0,表示从左端0位置算起。第二个参数不写默认为0

//另外一个函数就是indexOf(\'/\',0),是从左向右查找。 第二个参数0,表示从左端0位置算起

如何在php中判断一个网页请求是ajax请求还是普通请求

 

如何在php中判断一个网页请求是ajax请求还是普通请求?你可以通过传递参数的方法来实现,例如使用如下网址请求:

/path/to/pkphp.com/script.php?ajax

在php脚本中使用如下方法判断:

if(isset($_GET['ajax'])) {

...这是一个ajax请求,然后...

}

else {

...这不是一个ajax请求,然后...

}

通过传递_GET参数的方法简单实现了网页请求的判断。但是如果需要这样的功能,这个方法可能就有弊端,功能需求如下:

1.通过ajax请求的网页与普通请求的网页内容是不相同的

2.通过ajax请求的网页是为了方便用户操作,两种方法请求打开的网页必须的内容是相同的,只是ajax请求到的网页内容比较简化和使用,去除了网页的大框架模板。

3.这么做的目的是:用户在网页操作时通过ajax实现,而搜索引擎访问网页时(相当于普通打开网页),得到的内容是一个完整的网页(包含了网页的大框架模板)。

要完成上面的这个功能,就不能使用前面介绍的通过GET参数传递来判断了,如果使用GET传递来判断的话,用户ajax请求和普通网页请求都会是一样的内 容,因为你不可能为一个链接设置一个带ajax判断参数和不带的URL。那么如何才能实现这个功能呢?必须通过服务器端PHP判断解决这个问题。也就是今 天要说的PHP如何判断ajax请求。这个问题要解决有一个先决条件,那就是你使用的ajax框架必须是jquery。在jquery框架中,对于通过它的$.ajax, $.get, or $.post方法请求网页内容时,它会向服务器传递一个HTTP_X_REQUESTED_WITH的参数,你可以利用如下方法判断某个请求是ajax请求还是普通请求:

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')

 

{

 

..这是一个ajax请求,然后...

 

}

 

else {

 

..这不是一个ajax请求,然后...

 

}

 

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH

{

...这是一个ajax请求,然后...

}

else {

...这不是一个ajax请求,然后...

}

利用这个来进行判断操作,可以使网页端的URL保持一致,但是能够对两种不同的请求却能够得到不同内容的网页。即实现了用户操作优化,又不影响搜索引擎收录,我觉得是一个很棒的解决方案!

这里有一个另外需要注意的问题,就是如果你的jquery请求是通过iframe打开网页的,那么HTTP_X_REQUESTED_WITH参数不会被传递,也就是说你没有办法判断请求的类型。

理解JavaScript中的arguments,callee,caller,apply

arguments

该对象代表正在执行的函数和调用它的函数的参数。

[function.]arguments[n]
参数function :选项。当前正在执行的 Function 对象的名字。 n :选项。要传递给 Function 对象的从0开始的参数值索引。
说明

Arguments是进行函数调用 时,除了指定的参数外,还另外创建的一个隐藏对象。Arguments是一个类似数组但不是数组的对象,说它类似数组是因为其具有数组一样的访问性质及方 式,可以由arguments[n]来访问对应的单个参数的值,并拥有数组长度属性length。还有就是arguments对象存储的是实际传递给函数 的参数,而不局限于函数声明所定义的参数列表,而且不能显式创建 arguments 对象。arguments 对象只有函数开始时才可用。

<html>
<head><title>test-apply&call</title></head>
<body>
<script type="text/javascript">
//<![CDATA[
function ArgTest(a, b){
   var i, s = "The ArgTest function expected ";
   var numargs = arguments.length;
arguments.length即为这个函数调用时所带的参数数量     // 获取被传递参数的数值。  //ArgTest('a','b'):numargs=2, expargs=2
   var expargs = ArgTest.length;
;ArgTest.length为函数规定的参数数量         // 获取期望参数的数值。//ArgTest('a','b','c'):numargs=3, expargs=2
   if (expargs < 2)
      s += expargs + " argument. ";
   else
      s += expargs + " arguments. ";
   if (numargs < 2)
      s += numargs + " was passed.";
   else
      s += numargs + " were passed.";
   s += "/n/n"
   for (i =0 ; i < numargs; i++){      // 获取参数内容。
   s += " Arg " + i + " = " + arguments[i] + "/n";
;arguments类似数组 可通过arguments[ ]进行取得各个参数值
   }
   return(s);                          // 返回参数列表。
}

window.document.write(ArgTest('aaa', 'bbbb','cccc','dddd'));
//]]>
</script>

 

caller    [召唤者]
返回一个对函数的引用,该函数调用了当前函数。
    functionName.caller
    functionName 对象是所执行函数的名称。
说明
对 于函数来说,caller属性只有在函数执行时才有定义。如果函数是由顶层调用的,那么 caller包含的就是 null 。如果在字符串上下文中使用 caller属性,那么结果和 functionName.toString 一样,也就是说,显示的是函数的反编译文本。
下面的例子说明了 caller 属性的用法:// caller demo {
function callerDemo() {
    if (callerDemo.caller) {
        var a= callerDemo.caller.toString();
          alert(a);
      } else {
          alert("this is a top function");
      }
}
function handleCaller() {
      callerDemo();
}

handleCaller()时候,返回function handleCaller() { callerDemo();}【即callerDemo()返回用它的的函数的本身的String形式】,如果直接运行callerDemo(),返回function anonymous(){callerDemo();}

 

callee   

返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。[function.]arguments.callee可选项 function参数是当前正在执行的 Function对象的名称。说明callee属性的初始值就是正被执行的 Function 对象。callee属性是 arguments 对象的一个成员,它表示对函数对象本身的引用,这有利于匿名
函数的递归或者保证函数的封装性,例如下边示例的递归计算1到n的自然数之和。而该属性
仅当相关函数正在执行时才可用。还有需要注意的是callee拥有length属性,这个属性有时候
用于验证还是比较好的。arguments.length是实参长度,arguments.callee.length是
形参长度,由此可以判断调用时形参长度是否和实参长度一致。示例//callee可以打印其本身
function calleeDemo() {
      alert(arguments.callee);
}

//calleeDemo() 就返回calleeDemo() 函数本身的String形式:function calleeDemo() { alert(arguments.callee);}
//用于验证参数
function calleeLengthDemo(arg1, arg2) {
    if (arguments.length==arguments.callee.length) {
          window.alert("验证形参和实参长度正确!");
        return;
      } else {
          alert("实参长度:" +arguments.length);//实际使用calleeLengthDemo(arg1, arg2)函数所带的参数:calleeLengthDemo('a') 则实参为1
          alert("形参长度: " +arguments.callee.length);//calleeLengthDemo(arg1, arg2)函数所定义的参数数:2
      }
}
//递归计算
var sum = function(n){
  if (n <= 0)                       
  return 1;
  else
    return n + arguments.callee(n - 1)// arguments.callee调用当前正在执行的函数,即sum本身!
}比较一般的递归函数:var sum = function(n){
    if (1==n) return 1;
    else return n + sum (n-1);
}调用时:alert(sum(100));
其中函数内部包含了对sum自身的引用,函数名仅仅是一个变量名,在函数内部调用sum即相当于调用
一个全局变量,不能很好的体现出是调用自身,这时使用callee会是一个比较好的方法。
callee可以打印本身

call和apply

  它们的作用都是将函数绑定到另外一个对象上去运行两者仅在定义参数方式有所区别:      apply(thisArg,argArray);      call(thisArg[,arg1,arg2…] ]);
即所有函数内部的this指针都会被赋值为thisArg,这可实现将函数作为另外一个对象的方法运行的目的
apply的说明如果 argArray不是一个有效的数组或者不是 arguments对象,那么将导致一个 TypeError。
如果没有提供 argArray和 thisArg任何一个参数,那么 Global 对象将被用作 thisArg,
并且无法被传递任何参数。
call的说明call方法可将一个函数的对象上下文从初始的上下文改变为由 thisArg指定的新对象。
如果没有提供 thisArg参数,那么 Global 对象被用作 thisArg相关技巧:应用call和apply还有一个技巧在里面,就是用call和apply应用另一个函数(类)以后,当前的
函数(类)就具备了另一个函数(类)的方法或者是属性,这也可以称之为“继承”。看下面示例:// 继承的演示
function base() {
    this.member = " dnnsun_Member";
    this.method = function() {
          window.alert(this.member);
      }
}
function extend() {
      base.call(this);
      window.alert(member);
      window.alert(this.method);
}
//调用 extend()后,window.alert(member)=》dnnsun_Memberwindow.alert(this.method)=》function (){window.alert(this.menber);}

上面的例子可以看出,通过call之后,extend可以继承到base的方法和属性。顺便提一下,在javascript框架prototype里就使用apply来创建一个定义类的模式,其实现代码如下:
var Class = {
    create: function() {
    return function() {
      this.initialize.apply(this, arguments);
      }
    }

}解析:从代码看,该对象仅包含一个方法:Create,其返回一个函数,即类。但这也同时是类的
构造函数,其中调用initialize,而这个方法是在类创建时定义的初始化函数。通过如此途径,
就可以实现prototype中的类创建模式示例:var vehicle=Class.create();
vehicle.prototype={
      initialize:function(type){
        this.type=type;
      }
      showSelf:function(){
          alert("this vehicle is "+ this.type);
      }
} var moto=new vehicle("Moto");
moto.showSelf();

如何使用定时器settimeout、setInterval执行能传递参数的函数

无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,这就需要想方法解决。经网上查询后整理如下:

例如对于函数hello(_name),它用于针对用户名显示欢

迎信息:
var userName="jack";
//根据用户名显示欢迎信息
function hello(_name){
      alert("hello,"+_name);
}
这时,如果企图使用以下语句来使hello函数延迟3秒执行是不可行的:
window.setTimeout(hello(userName),3000);
这将使hello函数立即执行,并将返回值作为调用句柄传递给setTimeout函数,其结果并不是程序需要的。而使用字符串形式可以达到想要的结果:
window.setTimeout("hello(userName)",3000);这是方法(一)

这里的字符串是一段JavaScript代码,其中的userName表示的是变量。但这种写法不够直观,而且有些场合必须使用函数名,于是有人想到了如下

方法(二):

<script language="JavaScript" type="text/javascript">
<!--
var userName="jack";
//根据用户名显示欢迎信息
function hello(_name){
       alert("hello,"+_name);
}
//创建一个函数,用于返回一个无参数函数
function _hello(_name){
       return function(){
             hello(_name);
       }
}
window.setTimeout(_hello(userName),3000);
//-->
</script>
这 里定义了一个函数_hello,用于接收一个参数,并返回一个不带参数的函数,在这个函数内部使用了外部函数的参数,从而对其调用,不需要使用参数。在 window.setTimeout函数中,使用_hello(userName)来返回一个不带参数的函数句柄,从而实现了参数传递的功能。

另外也有人通过修改settimeout、setInterval来实现。即下面的

方法三:

<script language="JavaScript" type="text/javascript">
<!--
var userName="jack";
//根据用户名显示欢迎信息
function hello(_name){
       alert("hello,"+_name);
}//*=============================================================
//*   功能: 修改 window.setInterval ,使之可以传递参数和对象参数   
//*   方法: setInterval (回调函数,时间,参数1,,参数n)  参数可为对象:如数组等
//*============================================================= 

var __sto = setInterval;    
window.setInterval = function(callback,timeout,param){    
    var args = Array.prototype.slice.call(arguments,2);    
    var _cb = function(){    
        callback.apply(null,args);    
    }    
    __sto(_cb,timeout);    
}
window.setInterval(hello,3000,userName);
//-->