js 正则使用

var myString="<?php echo $voucher_data['remarks']?>";
var myregex_1 = new RegExp("NETS");
var myregex_2 = new RegExp("Cash");
if (myregex_1.test(myString)){
  $("#payment").val("NETS");
}
if (myregex_2.test(myString)){
  $("#payment").val("Cash");
}

linux下查看磁盘空间

如果要查看磁盘还剩多少空间,当然是用df的命令了。
[root@localhost ~]# df -h 
文件系统              容量 已用 可用 已用% 挂载点 
/dev/sda2              14G   11G 2.6G 82% / 
/dev/sda1              99M   14M   81M 14% /boot 
tmpfs                 442M 275M 168M 63% /dev/shm 
/dev/mapper/vg_test-lv_test 
                       24M 1.3M   21M   6% /mnt/lvm 
[root@localhost ~]#
当然你可能并不关系磁盘还剩余多少空间,你是需要知道当前的文件夹下的磁盘使用情况:
[root@localhost ~]# du –max-depth=1 -h 
24K     ./.gnome   www.2cto.com  
8.0K    ./.eggcups 
8.0K    ./.config 
136K    ./.gnome2 
16K     ./.chewing 
8.0K    ./.gnome2_private 
8.0K    ./.Trash 
224K    ./.gstreamer-0.10 
28K     ./Desktop 
48K     ./.nautilus 
48K     ./.metacity 
240K    ./.scim 
3.4M    ./.mozilla 
1012K   ./.kde 
12K     ./.superkaramba 
40K     ./.local 
8.0K    ./.qt 
272K    ./.gconf 
32K     ./.mcop 
16K     ./.redhat 
1.7M    ./.thumbnails 
8.0K    ./.gconfd 
7.5M    . 
[root@localhost ~]#
看上面使用了du –max-depth=1 -h的命令来查找磁盘的使用情况,因为后面没有跟路径,它就默认是当前的路径。这个命令的-h参数是为了方便你读懂每个文件的大小,如果没有这个参数显示的文件大小就没有k,M,G等。执行命令后,前面n-1行的是该目录下每个文件夹的大小。最后一行显示的是该目录总的大小。
然后你会说不在乎该目录下每个文件的大小,你只想知道其中某一个文件(文件夹)的大小,那么有没有办法呢?当然你应该记得,我一直强调的,方法总比问题多,这儿也不例外。
请看下面的例子:
[root@localhost ~]# du -sh 
7.5M    .   www.2cto.com  
[root@localhost ~]#
聪明的你一定发现了这里显示的大小和上面最后一行的大小是一样的。这就是说这里显示的大小是该目录的总大小。
我知道你心里在冷笑,不是方法比问题多吗?这里说的也只有一个答案。当然,我不会让你失望的。另一个方法比较土,但是还是可以解决问题的。
[root@localhost ~]# du -h –max-depth=0 
7.5M    . 
[root@localhost ~]#
我想告诉你的是man手册里面已经告诉了:–max-depth=0的功能和-s的功能是一样的。
当然你也可以通过sed打印最后du -h –max-depth=1一行来解决问题,但我并不推荐。
这里涉及到一个原则,尽量使用命令提供选项的原始功能。如果命令没有提供该功能,才需要我们自己使用grep,sed,awk来选取我们需要的行。
当然du命令后面可以跟文件路径,来查看指定路径的大小的。
[root@localhost ~]# du -sh /opt/oracle 
5.6G    /opt/oracle 
[root@localhost ~]#
如果磁盘过大,那么查看文件大小就比较忙,请等一会,呵呵。
 
 
作者 tl_oni

session的工作原理

今天在研究ci的session问题 ,顺便复习一下基础的session原理。

一直在使用session存储数据,一直没有好好总结一下session的使用方式以及其工作原理,今天在这里做一下梳理。

这里的介绍主要是基于php语言,其他的语言操作可能会有差别,但基本的原理不变。

 

1.在php中如何操作session:

session_start();   //使用该函数打开session功能

$_SESSION       //使用预定义全局变量操作数据

使用unset($_SESSION['key']) //销毁一个session的值

简单地操作,一切都是由服务器实现;由于处理在后台,一切看起来也很安全。但是session采用什么样机制,又是怎样被实现,并且如何来保持会话的状态的呢?

 

2.session实现与工作原理

浏览器和服务器采用http无状态的通讯,为了保持客户端的状态,使用session来达到这个目的。然而服务端是怎么样标示不同的客户端或用户呢?

这里我们可以使用生活中的一个例子,假如你参加一个晚会,认识了很多人,你会采取什么方式来区分不同的人呢!你可能根据脸型,也有可能根据用户的名字,

或者人的身份证,即采用一个独一无二的标示。在session机制中,也采用了这样的一个唯一的session_id来标示不同的用户,不同的是:浏览器每次请求都会带上

由服务器为它生成的session_id.

简单介绍一下流程:当客户端访问服务器时,服务器根据需求设置session,将会话信息保存在服务器上,同时将标示session的session_id传递给客户端浏览器,

浏览器将这个session_id保存在内存中(还有其他的存储方式,例如写在url中),我们称之为无过期时间的cookie。浏览器关闭后,这个cookie就清掉了,它不会存在用户的cookie临时文件。

以后浏览器每次请求都会额外加上这个参数值,再服务器根据这个session_id,就能取得客户端的数据状态。

如果客户端浏览器意外关闭,服务器保存的session数据不是立即释放,此时数据还会存在,只要我们知道那个session_id,就可以继续通过请求获得此session的信息;但是这个时候后台的session还存在,但是session的保存有一个过期

时间,一旦超过规定时间没有客户端请求时,他就会清除这个session。

下面介绍一下session的存储机制,默认的session是保存在files中,即以文件的方式保存session数据。在php中主要根据php.ini的配置session.save_handler

 来选择保存session的方式。

这里顺便说明一下,如果要做服务器的lvs,即多台server的话,我们一般使用memcached的方式session,否则会导致一些请求找不到session。

一个简单的memcache配置:

session.save_handler = memcache

session.save_path = "tcp://10.28.41.84:10001"

当然如果一定要使用files文件缓存,我们可以将文件作nfs,将所有的保存session文件定位到一个地方。

刚才讲返回给用户的session-id最终保存在内存中,这里我们也可以设置参数将其保存在用户的url中。

 

3.实例问题

现有系统A,B; 假设A系统是可以独立运行的web系统,即可以和浏览器直接处理session, B系统是基于mobile的,需要调用A系统的功能接口,

在保持A不改变的情况下,即登陆验证,session存储都不变的情况下,B系统能处理前端用户的请求。

这里提供的方案是使用PHP实现

在用户登陆成功后,将保存的session的session-id返回给B系统,然后B系统每次请求其他接口都带session_id。

A系统在session_start前加上session_id(session_id);

这样B系统就能安全的调用A

转自:http://www.cnblogs.com/kucongzhi/archive/2010/07/13/1776728.html

CodeIgniter的Session问题[转]

最近有个项目接触到CodeIgniter,让我很是惊叹它的精巧,于是决定用它来做下一个项目。果然,蜜月期过了,毛病就出来了,具体的就是Session的问题。CodeIgniter的Session有两种方式,默认的Session是用Cookie来存储的,也可以切换到数据库存储,但是无论哪种Session都会有些很致命的问题,就是丢失数据。

 

问题解决了,但是也有局限,

第一 $this->session->sess_create() 和$this->session->sess_destroy() 不见了, 这倒无所谓,没太大影响, 可以用 $this->session->destroy(),

第二,这修改了CodeIgniter的system library,并不是特别好的解决方法。。。

然后访问 A, 比如  http://localhost/A, 点提交之后应该刷新,在刷新后的页面上显示出来 1234, 然后神奇的事情发生了。。。 Session没了, 对于redirect, CodeIgniter自动的创建了一个新的session,同样的道理,如果用Ajax访问,也会有个新的Session被创立,结果导致了这个Session根本不能用!

折腾了整整一天也没什么效果,后来在github上面找到了一个大牛自己改写的Session Library, 核心就是弃用cookie,转而使用php native session, 保留了一些基本功能,比如 set_userdata(),这需要用下面的代码 覆盖 system/libraries/Session.php 文件

哎~ 不过不管怎么说,解决了, 浪费了整整1天的时间。。。

这里https://github.com/EllisLab/CodeIgniter/wiki/Native-session

转自:http://www.cnblogs.com/lei1016cn/archive/2012/10/10/2719028.html

 

简单的前段知识汇总

今天开始要记录一些工作中遇到的一些简单的问题,比如说jquery的$.each用法,seelct的选择器等非常基础的东西,因为每次用的时候我都回去baidu而不会记住,总觉得很简单没有必要去尝试记忆。

好吧从今天开始。

jquery $.each 的用法:

var arr2 = [['a', 'aa', 'aaa'], ['b', 'bb', 'bbb'], ['c', 'cc', 'ccc']];
$.each(arr, function(i, item){      
      alert(i);   
      alert(item);      
});  

 

今天遇到了一个select选择器的问题:

var selects = $("select[name='is_jion']");
$.each(selects,
function(i, item) {
 if (item.value == 'Y') {
  alert('Please note that staff participating in the Best Dressed Contests, can only participate either in the Best Dressed Individual category or in the Best Dressed Table category');
  $('#is_table_jion').removeAttr('checked');
  return false;
 }  
});

 

是这样的,我开始使用了$("select[@name='xxxxx']")不能用,后来尝试使用了$("select[name='is_jion']").val();

还是不能用,这个时候我就aler了一下$("select[name='is_jion']")发现他是dom的元素,不是jquery的对象,所以使用了dom的方法。

 

$(this).closest('td').next().find('select').val('0');
$(this).closest('td').next().find('select').html(def);
选择下一个td里的select 这个时候select就是jquery对象了,可以使用jquery方法处理
上次看的文章还是蛮好的 详细解说了dom对象和 jquery对象的区别要然我总是混为一谈
feo rsvp里还是用到很多js的用法的

jquery中的trigger和triggerHandler区别

trigger( event, [data] )

在每一个匹配的元素上触发某类事件。

这个函数也会导致浏览器同名的默认行为的执行。比如,如果用trigger()触发一个’submit’,则同样会导致浏览器提交表单。如果要阻止这种默认行为,应返回false。

你也可以触发由bind()注册的自定义事件

什么是JS事件冒泡?

在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。  

如何来阻止Jquery事件冒泡?

 

通过一个小例子来解释

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default5.aspx.cs" Inherits="Default5"%>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title>Porschev---Jquery 事件冒泡</title>



<script src="jquery-1.3.2-vsdoc.js" type="text/javascript"></script>



</head>

<body>

<form id="form1" runat="server">

<div id="divOne" onclick="alert('我是最外层');">

<div id="divTwo" onclick="alert('我是中间层!')">

<a id="hr_three" href="http://www.baidu.com" mce_href="http://www.baidu.com" onclick="alert('我是最里层!')">点击我</a>

</div>

</div>

</form>

</body>

</html> 

比如上面这个页面,

分为三层:divOne是第外层,divTwo中间层,hr_three是最里层;

他们都有各自的click事件,最里层a标签还有href属性。

 

运行页面,点击“点击我”,会依次弹出:我是最里层—->我是中间层—->我是最外层

—->然后再链接到百度.

 

这就是事件冒泡,本来我只点击ID为hr_three的标签,但是确执行了三个alert操作。

事件冒泡过程(以标签ID表示):hr_three—-> divTwo—-> divOne 。从最里层冒泡到最外层。

 

如何来阻止?

 

1.event.stopPropagation(); 

 <script type="text/javascript">

 

        $(function() {

            $("#hr_three").click(function(event) {

                event.stopPropagation();

            });

        });

       

 

<script>

再点击“点击我”,会弹出:我是最里层,然后链接到百度

 

 

 2.return false;

如果头部加入的是以下代码

<script type="text/javascript">

 

$(function() {

$("#hr_three").click(function(event) {

return false;

});

});

 

<script>

再点击“点击我”,会弹出:我是最里层,但不会执行链接到百度页面

 

由此可以看出:

1.event.stopPropagation(); 

   事件处理过程中,阻止了事件冒泡,但不会阻击默认行为(它就执行了超链接的跳转)

 

 

2.return false;

   事件处理过程中,阻止了事件冒泡,也阻止了默认行为(比如刚才它就没有执行超链接的跳转)

 

 

还有一种有冒泡有关的:

3.event.preventDefault(); 

   如果把它放在头部A标签的click事件中,点击“点击我”。

   会发现它依次弹出:我是最里层—->我是中间层—->我是最外层,但最后却没有跳转到百度

 

    它的作用是:事件处理过程中,不阻击事件冒泡,但阻击默认行为(它只执行所有弹框,却没有执行超链接跳转)

jQuery.extend 函数详解

[转]JQuery的extend扩展方法:
      Jquery的扩展方法extend是我们在写插件的过程中常用的方法,该方法有一些重载原型,在此,我们一起去了解了解。
      一、Jquery的扩展方法原型是:   

 extend(dest,src1,src2,src3...);


      它的含义是将src1,src2,src3…合并到dest中,返回值为合并后的dest,由此可以看出该方法合并后,是修改了dest的结构的。如果想要得到合并的结果却又不想修改dest的结构,可以如下使用:

  var newSrc=$.extend({},src1,src2,src3...)//也就是将"{}"作为dest参数。


      这样就可以将src1,src2,src3…进行合并,然后将合并结果返回给newSrc了。如下例:

var result=$.extend({},{name:"Tom",age:21},{name:"Jerry",sex:"Boy"})

 

      那么合并后的结果

  result={name:"Jerry",age:21,sex:"Boy"}


      也就是说后面的参数如果和前面的参数存在相同的名称,那么后面的会覆盖前面的参数值。

      二、省略dest参数
      上述的extend方法原型中的dest参数是可以省略的,如果省略了,则该方法就只能有一个src参数,而且是将该src合并到调用extend方法的对象中去,如:
   1、$.extend(src)
   该方法就是将src合并到jquery的全局对象中去,如:

 $.extend({
  hello:function(){alert('hello');}
  });


   就是将hello方法合并到jquery的全局对象中。
   2、$.fn.extend(src)
   该方法将src合并到jquery的实例对象中去,如:

 $.fn.extend({
  hello:function(){alert('hello');}
 });

 

   就是将hello方法合并到jquery的实例对象中。

   下面例举几个常用的扩展实例:

$.extend({net:{}});

 

   这是在jquery全局对象中扩展一个net命名空间。

  $.extend($.net,{
   hello:function(){alert('hello');}
  })


    这是将hello方法扩展到之前扩展的Jquery的net命名空间中去。

   三、Jquery的extend方法还有一个重载原型:  

extend(boolean,dest,src1,src2,src3...)


      第一个参数boolean代表是否进行深度拷贝,其余参数和前面介绍的一致,什么叫深层拷贝,我们看一个例子:

var result=$.extend( true,  {},  
    { name: "John", location: {city: "Boston",county:"USA"} },  
    { last: "Resig", location: {state: "MA",county:"China"} } ); 


      我们可以看出src1中嵌套子对象location:{city:"Boston"},src2中也嵌套子对象location:{state:"MA"},第一个深度拷贝参数为true,那么合并后的结果就是: 

result={name:"John",last:"Resig",
        location:{city:"Boston",state:"MA",county:"China"}}

 

       也就是说它会将src中的嵌套子对象也进行合并,而如果第一个参数boolean为false,我们看看合并的结果是什么,如下:

var result=$.extend( false, {},  
{ name: "John", location:{city: "Boston",county:"USA"} },  
{ last: "Resig", location: {state: "MA",county:"China"} }  
                    ); 


     那么合并后的结果就是:

  result={name:"John",last:"Resig",location:{state:"MA",county:"China"}}

 

  以上就是$.extend()在项目中经常会使用到的一些细节。