Jem evoucher submit

#insert voucher_store_submission
INSERT INTO `voucher_store_submission` (`submission_id`, `submission_time`, `store_id`, `user_id`, `requisition_id`, `comment`, `export_cti`, `export_time`, `is_evoucher`) 
VALUES 
(NULL, '2014-06-26 00:00:00', 179292, 0, NULL, '\'E05000075\'', 'Y', NULL, 'Y'),
(NULL, '2014-06-26 00:00:00', 179368, 0, NULL, '\'E10000013\'', 'Y', NULL, 'Y');

#update voucher status
update voucher 
set submission_time = '2014-06-26 00:00:00', status_id = 7, submission_id = 1991
where voucher_id = 78505;

update voucher 
set submission_time = '2014-06-26 00:00:00', status_id = 7, submission_id = 1990
where voucher_id = 88443;

#insert action 
INSERT INTO `voucher_action` (`id`, `voucher_id`, `action_id`, `action_time`, `user_id`, `comment`, `ct_user`) 
VALUES 
(NULL, 78505, 8, '2014-06-26 00:00:00', 0, '', NULL),
(NULL, 88443, 8, '2014-06-26 00:00:00', 0, '', NULL);

notification操作概述

在voucher_action 里添加notification_id

在notification里创建记录 填写trager和cc和role

在model/email_notifications.php 里创建notification对应的function,这个function和数据库里存储的function一致

这个function 的作用就是把调用这个function地方传递进来的$action_info传递到调用的view文件里,然后从这个view取回email_content,然后直接调用——notification_send即可

调用方法如下:

$action_info = array();
$action_info['voucher_number'] = $this->voucher_number_get_for_notification( $voucher_id );
$action_info['transaction_number'] = $this->voucher_lkup->submission_id_to_transaction_number( $submission_id );
$action_info['release_or_reject'] = 'release';
$this->load->model('email_notifications');
$this->email_notifications->action_trigger_notification( $action_id, $action_info );

win7 多用户远程登录

本文转自:http://blog.163.com/yaoyingying681@126/blog/static/1094636752011101891851330/

远程桌面服务使局域网 (LAN) 上的计算机可以连接到服务器(也称为远程计算机)并运行位于服务器上的程序。这可以只需要在1台机器上安装应用程序,其他机器共享使用。远程桌面连接使用远程桌面服务技术,使一台计算机可远程控制另一台计算机。

windows 远程终端服务是单用户的,也就是说通过远程登录到服务器时,服务器本地将黑屏。如何做到不管用本地登录还是远程登录,同一时刻容许多个用户操作服务器计算机。

首先:

要安装工具包,需要从微软下载(远程服务器管理工具 http://www.microsoft.com/downloads/zh-cn/details.aspx?displaylang=zh-cn&FamilyID=7d2f6ad7-656b-4313-a005-4e344e43997d ),安装升级包后,在控制面板–程序和功能–打开或关闭WINDOWS功能—远程服务器管理工具–角色管理工具–远程桌面服务工具,选中前面的选择框。

在开始–命令框输入cmd,在弹出的Dos界面输入netstat -na ,如果出现 3389 端口,就说明远程终端已经启动了。

然后:

1, 下载 补丁UniversalTermsrvPatch,功能就是去除单用户登陆的限制,允许多人多用户同时并行访问登录。

2, 根据你的系统运行对应的程序:

         32位系统请运行 UniversalTermsrvPatch-x86.exe;

       64位系统请运行 UniversalTermsrvPatch-x64.exe。

3, 需要管理员权限。右键点程序,选择以管理员身份运行。

4, 破解后需要重启生效。

5, 备份文件: \windows\system32\termsrv.dll.backup.(如果想还原设置请将备份文件改名为termsrv.dll替换破解的文件即可)

远程桌面的其它可能的设置:

 运行gpedit.msc打开组策略,计算机配置-管理模板-Windows组件-远程桌面服务-远程桌面会话主机-连接-“限制连接数量”,如果将状态设置为“禁用”或“未配置”,则在“组策略”级别上不强制限制连接的数量。

jquery get和find

get:就是在页面中寻找所选的元素在页面中所占的第几个例如:寻找页面中第四个span的,$("span").get(3)

     但是这个所寻求到的元素不是jquery对象,需要转化成jquery对象$();

find:其实本意和get差不多,他是在某个元素中寻找元素,例在<div id="aa"></div>中寻找第四个span元素$("#aa").find("span")[3],同上,他也不是jquery对象,需要转化成jquery对象$()

chm 已取消到该网页的导航 或者 无法显示网页 的问题

方法 1
1. 双击此 .chm 文件。 
2. 在“打开文件安全警告”对话框,单击以清除“打开此文件前始终询问”复选框。 
3. 单击“打开”。

方法 2
1. 右键单击该 CHM 文件,然后单击“属性”。 
2. 单击“取消阻止”或者“解除锁定”。 
3. 双击此 .chm 文件以打开此文件。 

一.如果不能打开,可这样恢复文件关联: 
1、开始运行,输入:regsvr32 C:\windows\system32\hhctrl.ocx ,确定,重新关联文件。 
2、执行一下windows目录里的hh.exe 。 
有时候chm文件放在中文目录就不行。包括中文chm名字。试着把文件考出来.中文名字一改. 

二.1.在微软网站上下载hhupd.exe,安装hh.exe后并运行。 
2.实际上,下载hhupd.exe后,运行后就可以了。这个东西大小为461kb 3.在c:\windows\system32里找到“Hhctrl.ocx”文件,然后运行:“regsvr32“c:\windows\system32\hhctrl.ocx… 
网上的解决方法不可行,下载不了hhupd.exe.我直接执行regsvr32 c:\windows\system32\hhctrl.ocx就ok了。 

解决方法2是: 
1,右键关联chm文件的“打开方式”到\Windows\HH.exe 
2,在命令行运行regsvr32 itss.dll 
3,在命令行运行regsvr32 hhctrl.ocx 

三.也许是 HH.EXE 所必需的某个组件出了问题。但是不知道 HH.EXE 会用到些什么组件,所以上网查了一下,有人建议重新注册 hhctrl.ocx。我在系统目录下找到了 hhctrl.ocx,重新注册一下 hhctrl.ocx 试试:regsvr32 hhctrl.ocx。依然不能正常阅读 CHM。 

既然如此,很有可能是协议出了问题。HH.EXE 用的是 ms-its 等协议,这些协议应该是由某个 DLL 文件提供服务的。问题是,是什么 DLL 呢?于是再用 Google 搜索 ms-its 协议。终于找到了,原来是一个 itss.dll 在做服务。不过网上查到的解决方案是修改注册表。 

要修改 ItssRestrictions 注册表项以启用特定的安全区域,请按照下列步骤操作: 
1. 单击“开始”,单击“运行”,键入 regedit,然后单击“确定”。 
2. 找到并单击下面的子项: 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions 
注意:如果该注册表子项不存在,则使用方法 1 中的步骤 2a 和 2b 创建该子项。 
3. 右键单击“ItssRestrictions”子项,指向“新建”,然后单击“DWORD 值”。 
4. 键入 MaxAllowedZone,然后按 Enter 键。 
5. 右键单击“MaxAllowedZone”值,然后单击“修改”。 
6. 在“数值数据”框中,键入 0 至 4 之间的一个数字,然后单击“确定”。 
7. 退出注册表编辑器。 
注意:默认情况下,“MaxAllowedZone”值设置为 0。下表摘要列出了“MaxAllowedZone”值对各个项的解释。 MaxAllowedZone 本地计算机区域 本地 Intranet 区域 受信任的站点区域 Internet 区域 受限站点区域 
0 允许 阻止 阻止 阻止 阻止 
1 允许 允许 阻止 阻止 阻止 
2 允许 允许 允许 阻止 阻止 
3 允许 允许 允许 允许 阻止 
4 允许 允许 允许 允许 允许 

注册表修改之后还是不能打开! 
试试偷懒的办法吧——重新注册DLL:regsvr32 itss.dll。 

四.操作系统的语言不是中文(经常出现这种情况) 
1.看看你的 OS 是不是中文的 OS ? 如果你的 OS 不是 中文的,那么到 Control Pane 中看看那个“语言和区域” 的option,打开看看“区域选项” 是不是中国,这个选项对一些软件还是有一些影像的。 
2.如果你的CHM文件是中文的,可能存在缺省语言设置问题。可能你用是的英文版的WINDOWS,把RAGIONAL AND LANGUAGE OPTIONS中的LANGUAGE 和ADVANCED 中的语言和国家选项都设置成中文(PRC)。就可以了 

五.可以试试改变此文件的名字.比如去掉多余的符号 

六.如果都不能,最后一招就是,把电子书CHM格式转换为PDF文件: 
CHM Converter是一个专门转换CHM格式的文件,它可以把CHM文件转换成PDF、TXT、DOC等常用的格式。 
http://dl.pconline.com.cn/html/1/6/dlid=11896&dltypeid=1&pn=0&.html 

下载后运行软件,软件默认是英文界面,点击菜单“Tools-Language”,在弹出的对话框中选择“Chinese_Simplified”就可以换成中文了,软件还支持其他很多语言。 

选好语言后点击左上角的“打开”按钮来选择要转换的CHM文件,如果CHM文件是英文版的,那么在旁边的下拉菜单中就选择 “DEFAILT_CHARSET”,如果是中文的,那需要在下拉菜单中选择“GB2312_CHARSET”,否则会产生乱码,然后在右面的“导出”中来选择要转换的文件类型,软件支持很多格式的文件,如这里选择“Word97-2003”,最后点击“另存数据库为”按钮,选择保存的文件夹后就开始进行转换了。 

PS: Window2K中不能打开*.chm文件的解决办法 
这个问题的发生,是由于hhctrl.ocx的版本号出现错误或未正确注册。原因在于安装的其他软件用hhctrl.ocx的旧版本替换了原来的版本。 
IE6SP1中,这个文件的版本号应为5.2.3735.0。可以看看你的系统这个文件的版本号。 
位于winnt/system32这个文件夹。大小504K(英文版本)从其他相同的系统(IE版本也相同)中COPY一份 
粘贴到你的系统相应文件夹中。然后注册一下。 

注意: 
1、先替换winnt/system32/dllcache文件夹的这个文件 
后替换winnt/system32文件夹里的这个文件 
2、如果看不到这个文件, 
先工具–文件夹选项中,设置显示隐藏文件 
并设置显示系统文件 
3、注册的方法是 
开始–运行,输入regsvr32 hhctrl.ocx 
之后出来一个注册成功的对话框,确定然后重启系统。

MongoDB 使用经验【转的留着备用】

最初听说 MongoDB 的时候,我总是觉得它的稳定性堪忧,后来用了差不多一年的时间,其实也没有遇到过什么问题,反而是 MySQL 出现过几次丢失数据的情况。配合 Node.js 使用 MongoDB 是一件非常舒畅的事情,从前端,到后端,再到数据库,统统全是 JSON.

 

本文的定位是一篇对 MongoDB 的一个概览性的介绍,告诉你 MongoDB 的特点和功能,以及如果需要了解某个功能,应当搜索什么关键词,并不直接涉及技术细节。

 

特点

 

无模式

 

MongoDB 中的每一条文档,都是一个 JSON 对象,因此你无需预定义一个集合的结构,集合中的每个文档也可以有不同的结构。

 

异步写入

 

MongoDB 默认所有的写操作都是『不安全』的,即当请求被 MongoDB 收到时,不等写入操作完成,就返回一个『成功』的响应。 这是默认的行为,当然你设置一些选项,让操作等待等待写入完成后再返回响应。不过对于大多数应用,这种『不安全』已经足够安全了。

 

简单查询

 

MongoDB 只支持简单的查询,MongoDB 只储存数据,更多的逻辑应该在应用中解决。因此 MongoDB 有着简单的且在各编程语言下高度一致的 API 接口。

 

无需运维

 

MongoDB 几乎没有什么选项可以设置,集群也是设置一次之后就可以自动地解决故障,极少需要维护。

 

安装和备份

 

MongoDB 的安装很简单,直接在官网下载二进制版本,运行其中的 mongod 即可启动数据库,运行 mongo 即可启动客户端 Shell, 或者你也可以从软件源中安装。

MongoDB 被设计运行于 64bit 的操作系统,在 32bit 的情况下,数据文件最大限制为 2GiB.

 

MongoDB 在运行时并不会实时地将修改写入磁盘,因此在关闭服务器时需要给 MongoDB 时间将所有数据写入磁盘。当出现服务器突然掉电的情况时,MongoDB 的数据库文件会损坏,需要进行修复才能重新运行,这个过程中会丢失掉电时正在进行的写入操作。在对运行中的 MongoDB 进行备份时,需要使用自带的 mongodump 工具,不能直接复制其数据库文件。

 

设计文档结构

 

ObjectID

 

MongoDB 会为每一个文档默认添加一个名为 _id, 类型为 Object 的字段,这个字段用来唯一地标识每一个文档。这个 ID 通过时间,服务器,进程号被生成,甚至可以认为是全世界唯一的。

除了 MongoDB 默认为 _id 添加 ObjectID, 你也可以自己在文档中创建 ObjectID, 来起到唯一地标识某个对象的功能。

 

引用关系

 

例如我们有一个 topic 集合,topic 都是 account 创建的,所以 topics 中要引用来自 accounts 中的 account.

 

// accounts

{

    _id: <ObjectID 1>,

    name: "jysperm"

}

 

// topics

{

    _id: <ObjectID 2>,

    account_id: <ObjectID 1>

}

嵌入关系

 

每个 topic 会有一些 reply, 所以在 topic 中可以嵌入 reply.

 

// topics

{

    _id: <ObjectID 2>,

    account_id: <ObjectID 1>

 

    replies: [

        {

            _id: <ObjectID 3>,

            content: "xxoo"

        }

    ]

}

引用 Vs 嵌入

 

在上面第一个例子中,topic 其实也可以嵌入 account 中;而第二个例子中,reply 也可以使用一个新的集合,然后来引用 topic, 那么应该如何选择这两种关系呢。

 

我们主要从几个出发点来考虑:

 

查询

 

我们可以考虑查询 account 时,是否需要他所有的 topic, 或者查询 topic 时,是否需要它所有的 reply. 从查询的角度来考虑,如果需要一同获得这两种数据,那么就应该嵌入,如果不需要,就应该引用。

 

数据的增长性

 

我们还可以考虑 account 的 topic 数量在今后会有怎样的增长,topic 的 reply 数量会有怎样的增长。 如果增长是没有限度的,那么就应该引用,如果增长是有限的,那么就可以嵌入。

 

对应关系

 

如果是一对一关系,或者一对多关系,那么可以考虑嵌入,如果是多对多关系,那么应该引用。

 

原子性

 

MongoDB 仅在文档层面提供原子性,如果有两个非常敏感的数据需要同时被更新,那么他们有必要存在于同一个文档中。

 

查询和更新

 

所谓『增删查改』在 MongoDB 里对应:

 

find/findOne: 查询

update/save: 修改

insert/save: 新增

remove: 删除

在 MongoDB 中,操作符以 $ 开头,主要分为三类:查询操作符,更新操作符,聚合查询操作符。

 

查询操作符

 

用于 find 和 update 中的查询器,如 $gt(大于), $ne(不等于), $in(匹配几个值之一), 逻辑运算:$and, $not.

 

更新操作符

 

用于 update 中的更新器,如 $inc(对数字进行增量), $set(修改文档的一部分), $unset(删除一个字段).

MongoDB 对嵌入式的文档和数组有非常好的支持:$addToSet(向集合中添加元素), $push(向数组添加元素), $pull(从数组移除元素).

 

聚合查询(Aggregation)

 

类似于 SQL 数据库中的 GROUP, 提供统计和计算的功能,要多强大有多强大,毕竟可以直接在数据库中运行 JavaScript 代码,不过因为性能的关系,不适合在应用中频繁调用。

 

查询命令还有几个选项:

 

limit: 限制返回的结果数

skip: 跳过一些结果

sort: 对结果进行排序

fields: 只返回指定的字段

副本集(Replica Set)和分片(Sharding)

 

MongoDB 的副本集采用一主多从的的集群方式。副本集中只有主节点可以写入,其他节点从主节点同步。当主节点故障时,从节点中会自动推选出一个新的主节点。当故障的节点恢复后,会向其他节点同步到最新的数据,然后成为一个从节点。

 

MongoDB 的分片是指,按照某个字段的值,将数据分为多份,储存在不同的服务器上。客户端会运行一个 mongos 代替 mongod, mongos 相当于一个路由,会根据请求和分片的设置,将请求拆分后发给不同的服务器,得到结果后再将结果组合起来发给客户端。

 

分片可以与副本集同时使用,此时,每个分片都是一个副本级,这样可以提供非常高的可用率和扩展性。

把SESSION放到memcache中[php][转]

 

本人在php5.3.8版试验,很easy,不需要额外代码,直接用下面php.ini的配置就行:

session.save_handler = memcache
#有多个时直接用”,”分隔即可,11211为memcached服务端守护进程端口,根据环境自行修改
session.save_path = ‘tcp://127.0.0.1:11211′


当然也可以直接在程序里面设置:

ini_set(‘session.save_handler’,'memcache’);
ini_set(‘session.save_path’,'tcp://127.0.0.1:11211′);

如果你是apache服务器话也可以在 .htaccess :

php_value session.save_handler “memcache”
php_value session.save_path “tcp://192.168.1.105:11211″

注意:因为 php的memcache扩展有两种,一种是php_memcache,一种是php_memcached,
如果你用的是php_memcached,save_handler的配置得变成如下形式:

php.ini:session.save_handler = memcached

程序中:ini_set(‘session.save_handler’,'memcached’);

使用过程中发现,用memcache存储session以后,nginx下如果memcachd没有启动的话,它会给报502的Error

友情提示:

session 数据都保存在 memory 中,不经过磁盘,数据库等,速度快。
可以多台机器共用一个/组memcached服务器,达到多台机器共享session信息,方便多机集群的session问题处理。至于session在集群时会遇到的问题请到下面的链接详看:
粘滞会话(Sticky Sessions)
http://www.xwuxin.com/?p=1958

memcached不支持持久化(这方面你可以考虑redis),但对于session 数据来说不算大问题。
由于memcached的内存管理机制,当session存储的数据超过1MB的时候有数据丢失问题。

 

转载自:http://www.xwuxin.com

php文件解密

//条件判断很重要,参考了别人的$pos = strpos($b, "'");
$b =gzinflate(base64_decode('加密代码'));
$a='test.php';
$c = 1;
while(strpos($b, "eval")){
$c+=1;
$pos = strpos($b, "'");
$b=substr($b, $pos + 1);
$b=trim(str_replace("' )) );","",$b));
$b=gzinflate(base64_decode($b));
}
echo '解密成功。次数:'.$c;
file_put_contents($a,$b);

 

加密的代码就不贴了 就是 base64+gzinflate加密