1.交换两个字符位置
xp
其实就是删除光标当前字符(x),然后再将缓存的字符贴出(p)
2.上下两行调换
ddp
实际就是(dd)删除当前行,(p)后即将缓存的行贴出
3.上下两行合并
J
实用性:高,shift+j
4.删除所有行
dG
错!(d)为删除,(shift+g)到文件尾,因此这命令效用为从光标处删除至文件尾
类似的还有:
dw -- 删到词尾
db -- 删到词头
daw -- 删除光标所在词(较有用)
d^删除至行头
5.从当前位置复制到行尾
y$
6.替换特定字符串
:%s/old_word/new_word/g
这个指令是于在整个文件中替换特定字符串
7.移动:
h 或 向左方向键(←) → 光标向左移动一个字元
j 或 向下方向鍵(↓) → 光标向下移动一个字元
k 或 向上方向鍵(↑) → 光标向上移动一个字元
l 或 向右方向鍵(→) → 光标向右移动一个字元
0 → 数字『 0 』:移动到这一行的最前面字元处
$ → 移动到这一行的最后面字元处
nG → n 为数字。移动到这个文件的第 n 行
gg → 移动到这个文件的第一行,相当于 1G
8.删除:
dd → 刪除光标所在的那一整行
ndd → n 为数字。刪除光标所在的向下 n 列
yy → 复制光标所在的那一行
yw → 复制光标所在的一个单词
9.前进后退:
u → 还原前一个动作
o [Ctrl]+r → 重做上一个动作
10.显示行号:
set nu → 显示行号
set nonu → 取消显示行号
跳到第几行:
:21 到21行
11.删除所有的内容:
:g/^/d
Mark:
倒序文件行(即unix下的tac命令)
:g/^/m 0
global命令是Vim最强大的命令之一(个人认为是No.1),将其摸透用熟可以事半功倍:
删除偶数行
:g/^/+1 d
删除奇数行
:g/^/d|m.
:g/^/d
12.v键的用法,这个是vi加强才能用的
command模式下,按v键,再按j,k,l,等方向键,可以选取一部分内容。再按P,可以复制,或者:d,删除选中的内容。
13.更改:
更改
「cw」:更改光标所在处的字到字尾处
「c#w」:例如,「c3w」表示更改3个字
14.跳到指定行:
「#G」:例如,「15G」,表示移动光标至文章的第15行行首。
15. 恢复文件
:recover
也可以在启动 vi 时利用 -r 选项。
xp
其实就是删除光标当前字符(x),然后再将缓存的字符贴出(p)
2.上下两行调换
ddp
实际就是(dd)删除当前行,(p)后即将缓存的行贴出
3.上下两行合并
J
实用性:高,shift+j
4.删除所有行
dG
错!(d)为删除,(shift+g)到文件尾,因此这命令效用为从光标处删除至文件尾
类似的还有:
dw -- 删到词尾
db -- 删到词头
daw -- 删除光标所在词(较有用)
d^删除至行头
5.从当前位置复制到行尾
y$
6.替换特定字符串
:%s/old_word/new_word/g
这个指令是于在整个文件中替换特定字符串
7.移动:
h 或 向左方向键(←) → 光标向左移动一个字元
j 或 向下方向鍵(↓) → 光标向下移动一个字元
k 或 向上方向鍵(↑) → 光标向上移动一个字元
l 或 向右方向鍵(→) → 光标向右移动一个字元
0 → 数字『 0 』:移动到这一行的最前面字元处
$ → 移动到这一行的最后面字元处
nG → n 为数字。移动到这个文件的第 n 行
gg → 移动到这个文件的第一行,相当于 1G
8.删除:
dd → 刪除光标所在的那一整行
ndd → n 为数字。刪除光标所在的向下 n 列
yy → 复制光标所在的那一行
yw → 复制光标所在的一个单词
9.前进后退:
u → 还原前一个动作
o [Ctrl]+r → 重做上一个动作
10.显示行号:
set nu → 显示行号
set nonu → 取消显示行号
跳到第几行:
:21 到21行
11.删除所有的内容:
:g/^/d
Mark:
倒序文件行(即unix下的tac命令)
:g/^/m 0
global命令是Vim最强大的命令之一(个人认为是No.1),将其摸透用熟可以事半功倍:
删除偶数行
:g/^/+1 d
删除奇数行
:g/^/d|m.
:g/^/d
12.v键的用法,这个是vi加强才能用的
command模式下,按v键,再按j,k,l,等方向键,可以选取一部分内容。再按P,可以复制,或者:d,删除选中的内容。
13.更改:
更改
「cw」:更改光标所在处的字到字尾处
「c#w」:例如,「c3w」表示更改3个字
14.跳到指定行:
「#G」:例如,「15G」,表示移动光标至文章的第15行行首。
15. 恢复文件
:recover
也可以在启动 vi 时利用 -r 选项。
MYSQL的引擎不是一般的多,这次说到的是MERGE,这个引擎有很多特殊的地方:
MERGE引擎类型允许你把许多结构相同的表合并为一个表。然后,你可以执行查询,从多个表返回的结果就像从一个表返回的结果一样。每一个合并的表必须有同样的表定义。
MERGE存储引擎在下面这种使用场合会最为有用,如果需要把日志纪录不停的录入MySQL数据库,并且每天、每周或者每个月都创建一个单一的表,而且要制作来自多个表的合计查询,MERGE表这时会非常有效。然而,这项功能有局限性。你只能合并MyISAM表而且必须严格遵守相同的表定义的限制。虽然这看起来好像是一个大问题,但是,如果你使用另外一种表类型(例如InnoDB),这种合并可能就不需要了。
其创建方法如下:
他将多个表在逻辑上当作一个表来查询。他建立后有两个文件,
.frm 表结构定义
.mrg union表的名字清单
两个基本表:
MERGE表的建立:
1. 此表类似于SQL中的union机制。
2. 此表结构必须与基本表完全一致,包括列名、顺序。UNION表必须同属一个DATABASE。
3. 基本表类型必须是MyISAM。
4. 可以通过修改.mrg文件来修改MERGE表,每个基本表的名字占一行。注意:修改后要通过FLUSH TABLES刷新表缓存。
5. 对基本表的更改可以直接反映在此表上。
6. INSERT_METHOD的取值可以是: 0 不允许插入 FIRST 插入到UNION中的第一个表 LAST 插入到UNION中的最后一个表。(4.0之后可用)
7. 定义在它上面的约束没有任何作用,约束是由基本表控制的,例如两个基本表中存在着同样的一个Key值,那么在MERGE表中会有两个一样的Key值。
http://wangyuanzju.blog.163.com/blog/static/130292007714102859807/#
MERGE引擎类型允许你把许多结构相同的表合并为一个表。然后,你可以执行查询,从多个表返回的结果就像从一个表返回的结果一样。每一个合并的表必须有同样的表定义。
MERGE存储引擎在下面这种使用场合会最为有用,如果需要把日志纪录不停的录入MySQL数据库,并且每天、每周或者每个月都创建一个单一的表,而且要制作来自多个表的合计查询,MERGE表这时会非常有效。然而,这项功能有局限性。你只能合并MyISAM表而且必须严格遵守相同的表定义的限制。虽然这看起来好像是一个大问题,但是,如果你使用另外一种表类型(例如InnoDB),这种合并可能就不需要了。
其创建方法如下:
他将多个表在逻辑上当作一个表来查询。他建立后有两个文件,
.frm 表结构定义
.mrg union表的名字清单
两个基本表:
CREATE TABLE TEST_MERGE_1(
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
CREATE TABLE TEST_MERGE_2(
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
MERGE表的建立:
CREATE TABLE TEST_MERGE(
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=LAST UNION=(TEST_MERGE_1,TEST_MERGE_2) ;
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=LAST UNION=(TEST_MERGE_1,TEST_MERGE_2) ;
1. 此表类似于SQL中的union机制。
2. 此表结构必须与基本表完全一致,包括列名、顺序。UNION表必须同属一个DATABASE。
3. 基本表类型必须是MyISAM。
4. 可以通过修改.mrg文件来修改MERGE表,每个基本表的名字占一行。注意:修改后要通过FLUSH TABLES刷新表缓存。
5. 对基本表的更改可以直接反映在此表上。
6. INSERT_METHOD的取值可以是: 0 不允许插入 FIRST 插入到UNION中的第一个表 LAST 插入到UNION中的最后一个表。(4.0之后可用)
7. 定义在它上面的约束没有任何作用,约束是由基本表控制的,例如两个基本表中存在着同样的一个Key值,那么在MERGE表中会有两个一样的Key值。
http://wangyuanzju.blog.163.com/blog/static/130292007714102859807/#
# 命令模式
* 移动光标
o h 或 向左方向键(←) → 光标向左移动一个字元
o j 或 向下方向鍵(↓) → 光标向下移动一个字元
o k 或 向上方向鍵(↑) → 光标向上移动一个字元
o l 或 向右方向鍵(→) → 光标向右移动一个字元
o [Ctrl] + [f] → 屏幕『向下』移动一页,相当于 [Page Down]按键
o [Ctrl] + [b] → 屏幕『向上』移动一页,相当于 [Page Up] 按键
o n → n 表示『数字』。按下数字后再按空白鍵,光标会向右移动这一行的 n 个字元
o 0 → 数字『 0 』:移动到这一行的最前面字元处
o $ → 移动到这一行的最后面字元处
o G → 移动到这个文件的最后一行
o nG → n 为数字。移动到这个文件的第 n 行(可配合 :set nu)
o gg → 移动到这个文件的第一行,相当于 1G
o
n → n 为数字。光标向下移动 n 行
* 查找与替换
o /word → 向光标之下查找一个名称为 word 的字符串。如想查找 eric4ever 字符串,输入 /eric4ever 即可
o ?word → 向光标之上查找一个名称为 word 的字符串
o n → 『重复前一个查找的动作』
o N → 与 n 刚好相反,为『反向』进行前一个查找动作
o :n1,n2s/word1/word2/g → n1 与 n2 均为数字。在第 n1 与 n2 行之间查找 word1 字符串,并将该字符串替换为 word2。如:在 1 到 9 行之间查找 eric4ever 并替换为 ERIC4EVER 则:『:1,9s/eric4ever/ERIC4EVER/g』
o :1,$s/word1/word2/g → 从第一行到最后一行查找 word1 字符串,并将该字符串替换为 word2
o :1,$s/word1/word2/gc → 从第一行到最后一行查找 word1 字符串,并将该字符窗替换为 word2,替换前显示提示对话框是否确认替换
* 删除、复制与粘贴
o x, X → 在一行字当中,x 为向后刪除一个字元 (相当于 [del] 按键), X 为向前刪除一个字元(相当于 [backspace] 按键)
o dd → 刪除光标所在的那一整行
o ndd → n 为数字。刪除光标所在的向下 n 列
o yy → 复制光标所在的那一行
o nyy → n 为数字。复制光标所在的向下 n 列
o p, P → p 为将已复制的内容粘贴在光标下一行上,P 则为粘贴在光标的上一行
o u → 还原前一个动作
o [Ctrl]+r → 重做上一个动作
o . → 小数点,意思是重复前一个动作
# ★编辑模式
* i, I → 插入:在目前的光标所在处插入输入的文字,已存在的文字会向后退; 其中, i 为『从目前光标所在处插入』, I 为『在目前所在行的第一個非空白字元处开始插入』
* a, A → a 为『从目前光标所在的下一个字元处开始插入』, A 为『从光标所在行的最后一个字元处开始插入』
* o, O → o 为『在目前光标所在的下一行处插入新的一行』, O 为『在目前光标所在处的上一行插入新的一行』
* r, R → r 为『取代光标所在的那一个字元』, R 为『一直取代光标所在的文字,直到按下 ESC 为止』
* Esc → 退出编辑模式,回到一般模式中
# ★末行指令模式
* :w → 将编辑的文件写入到硬盘上
* :q → 退出 vi
* :wq → 保存后退出,若为 :wq! 则为强制保存为退出
* :set nu → 显示行号
* :set nonu → 取消显示行号
* 移动光标
o h 或 向左方向键(←) → 光标向左移动一个字元
o j 或 向下方向鍵(↓) → 光标向下移动一个字元
o k 或 向上方向鍵(↑) → 光标向上移动一个字元
o l 或 向右方向鍵(→) → 光标向右移动一个字元
o [Ctrl] + [f] → 屏幕『向下』移动一页,相当于 [Page Down]按键
o [Ctrl] + [b] → 屏幕『向上』移动一页,相当于 [Page Up] 按键
o n
o 0 → 数字『 0 』:移动到这一行的最前面字元处
o $ → 移动到这一行的最后面字元处
o G → 移动到这个文件的最后一行
o nG → n 为数字。移动到这个文件的第 n 行(可配合 :set nu)
o gg → 移动到这个文件的第一行,相当于 1G
o
n
* 查找与替换
o /word → 向光标之下查找一个名称为 word 的字符串。如想查找 eric4ever 字符串,输入 /eric4ever 即可
o ?word → 向光标之上查找一个名称为 word 的字符串
o n → 『重复前一个查找的动作』
o N → 与 n 刚好相反,为『反向』进行前一个查找动作
o :n1,n2s/word1/word2/g → n1 与 n2 均为数字。在第 n1 与 n2 行之间查找 word1 字符串,并将该字符串替换为 word2。如:在 1 到 9 行之间查找 eric4ever 并替换为 ERIC4EVER 则:『:1,9s/eric4ever/ERIC4EVER/g』
o :1,$s/word1/word2/g → 从第一行到最后一行查找 word1 字符串,并将该字符串替换为 word2
o :1,$s/word1/word2/gc → 从第一行到最后一行查找 word1 字符串,并将该字符窗替换为 word2,替换前显示提示对话框是否确认替换
* 删除、复制与粘贴
o x, X → 在一行字当中,x 为向后刪除一个字元 (相当于 [del] 按键), X 为向前刪除一个字元(相当于 [backspace] 按键)
o dd → 刪除光标所在的那一整行
o ndd → n 为数字。刪除光标所在的向下 n 列
o yy → 复制光标所在的那一行
o nyy → n 为数字。复制光标所在的向下 n 列
o p, P → p 为将已复制的内容粘贴在光标下一行上,P 则为粘贴在光标的上一行
o u → 还原前一个动作
o [Ctrl]+r → 重做上一个动作
o . → 小数点,意思是重复前一个动作
# ★编辑模式
* i, I → 插入:在目前的光标所在处插入输入的文字,已存在的文字会向后退; 其中, i 为『从目前光标所在处插入』, I 为『在目前所在行的第一個非空白字元处开始插入』
* a, A → a 为『从目前光标所在的下一个字元处开始插入』, A 为『从光标所在行的最后一个字元处开始插入』
* o, O → o 为『在目前光标所在的下一行处插入新的一行』, O 为『在目前光标所在处的上一行插入新的一行』
* r, R → r 为『取代光标所在的那一个字元』, R 为『一直取代光标所在的文字,直到按下 ESC 为止』
* Esc → 退出编辑模式,回到一般模式中
# ★末行指令模式
* :w → 将编辑的文件写入到硬盘上
* :q → 退出 vi
* :wq → 保存后退出,若为 :wq! 则为强制保存为退出
* :set nu → 显示行号
* :set nonu → 取消显示行号
<?php
class BolingGame
{
public function return_array()
{ $return_array = array("a"=>"a","b"=>"b");
return $return_array;
}
}
?>
生成的Unit片断,修改为:
public function testReturn_array()
{
// TODO Auto-generated BolingGameTest->testReturn_array()
//$this->markTestIncomplete ( "return_array test not implemented" );
$return_array = array("a"=>"a","b"=>"b");
$this->assertEquals($return_array,$this->BolingGame->return_array());
$return_array = array("a"=>"a","b"=>"c");
$this->assertEquals($return_array,$this->BolingGame->return_array());
}
将返回一个成功,一个失败。
需求:显示大家的记录只显示前200条,第一页20条,共十页
数据库表结构:
数据库表结构:
mysql> desc record_cache;
+----------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| mc_key | varchar(2) | NO | MUL | | |
| mc_value | mediumtext | NO | | | |
+----------+------------+------+-----+---------+----------------+
+----------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| mc_key | varchar(2) | NO | MUL | | |
| mc_value | mediumtext | NO | | | |
+----------+------------+------+-----+---------+----------------+
<?php
class VMc
{
private $db;
public function __construct()
{
$this->db = new MysqlPdo ( );
}
public function vMcSet($mcKey, $mcValue)
{
$mcValue ['ctime'] = time ();
$data ['mc_value'] = serialize ( $mcValue );
$data ['mc_key'] = $mcKey;
if ($this->db->Insert ( 'record_cache', $data ))
{
return true;
}
else
{
return false;
}
return false;
}
public function vMcGet($mcKey)
{
$sql = "SELECT mc_value FROM record_cache WHERE mc_key = '$mcKey '";
$bRet = $this->db->Select ( $sql );
if ($bRet)
{
$res = $this->db->Fetch ();
if ($res)
{
$res = unserialize ( $res ['mc_value'] );
}
return $res;
}
return false;
}
public function flushCache()
{
$db = $this->db->ConnectM ();
$sql = 'TRUNCATE TABLE record_cache';
if ($db->query ( $sql ))
{
return true;
}
else
{
return false;
}
}
}
?>
class VMc
{
private $db;
public function __construct()
{
$this->db = new MysqlPdo ( );
}
public function vMcSet($mcKey, $mcValue)
{
$mcValue ['ctime'] = time ();
$data ['mc_value'] = serialize ( $mcValue );
$data ['mc_key'] = $mcKey;
if ($this->db->Insert ( 'record_cache', $data ))
{
return true;
}
else
{
return false;
}
return false;
}
public function vMcGet($mcKey)
{
$sql = "SELECT mc_value FROM record_cache WHERE mc_key = '$mcKey '";
$bRet = $this->db->Select ( $sql );
if ($bRet)
{
$res = $this->db->Fetch ();
if ($res)
{
$res = unserialize ( $res ['mc_value'] );
}
return $res;
}
return false;
}
public function flushCache()
{
$db = $this->db->ConnectM ();
$sql = 'TRUNCATE TABLE record_cache';
if ($db->query ( $sql ))
{
return true;
}
else
{
return false;
}
}
}
?>
public function GetRandomRecord(&$current, $page = 1, $offset = 20)
{
$total = 200;
*/
//////////////////////临时缓存//////////////////////////////
$vMc = new VMc ( );
$mcValues = $vMc->vMcGet ( $page );
if (! empty ( $mcValues ))
{
if (time () - $mcValues ['ctime'] <= 1800)
{
$current ['count'] = $mcValues ['count'];
unset ( $mcValues ['count'], $mcValues ['ctime'] );
foreach ( $mcValues as $k => $v )
{
if (! empty ( $v ))
{
$current ['record'] [$k] = $v;
}
}
return true;
}
}
/////////////////////////////////////////////////////////////
$current ['count'] = $total;
$start = $offset * ($page - 1);
$sql = "select * from record where status = 0 order by ctime desc limit " . $total;
$bRet = $this->db->Select ( $sql );
if ($bRet)
{
//fetch the result
$res = $this->db->FetchAll ();
}
//if mc is open put them into memcache
if (count ( $res ) < 200)
{
$current ['count'] = count ( $res );
}
$tp = ceil ( count ( $res ) / $offset );
$tmp = 0;
for($i = 0; $i < $tp; $i ++)
{
$cp = $i + 1;
$kstart = $i * $offset;
$pagerec = array_slice ( $res, $kstart, $offset );
$pagerec ['count'] = $current ['count'];
//////////////////////临时缓存//////////////////////////////
if ($cp == 1)
{
if ($vMc->flushCache ())
{
$tmp = 1;
}
}
if ($tmp == 1)
{
$vMc->vMcSet ( $cp, $pagerec );
}
//////////////////////////////////////////////////////////
/* if($this->mcobj){
$this->mcobj->set('RANDOM_RECORD_' . $cp , $pagerec ,false ,60*30);
}
*/
//set the return data
if ($cp == $page)
{
$current ['record'] = array_slice ( $res, $start, $offset );
}
}
return true;
}
{
$total = 200;
*/
//////////////////////临时缓存//////////////////////////////
$vMc = new VMc ( );
$mcValues = $vMc->vMcGet ( $page );
if (! empty ( $mcValues ))
{
if (time () - $mcValues ['ctime'] <= 1800)
{
$current ['count'] = $mcValues ['count'];
unset ( $mcValues ['count'], $mcValues ['ctime'] );
foreach ( $mcValues as $k => $v )
{
if (! empty ( $v ))
{
$current ['record'] [$k] = $v;
}
}
return true;
}
}
/////////////////////////////////////////////////////////////
$current ['count'] = $total;
$start = $offset * ($page - 1);
$sql = "select * from record where status = 0 order by ctime desc limit " . $total;
$bRet = $this->db->Select ( $sql );
if ($bRet)
{
//fetch the result
$res = $this->db->FetchAll ();
}
//if mc is open put them into memcache
if (count ( $res ) < 200)
{
$current ['count'] = count ( $res );
}
$tp = ceil ( count ( $res ) / $offset );
$tmp = 0;
for($i = 0; $i < $tp; $i ++)
{
$cp = $i + 1;
$kstart = $i * $offset;
$pagerec = array_slice ( $res, $kstart, $offset );
$pagerec ['count'] = $current ['count'];
//////////////////////临时缓存//////////////////////////////
if ($cp == 1)
{
if ($vMc->flushCache ())
{
$tmp = 1;
}
}
if ($tmp == 1)
{
$vMc->vMcSet ( $cp, $pagerec );
}
//////////////////////////////////////////////////////////
/* if($this->mcobj){
$this->mcobj->set('RANDOM_RECORD_' . $cp , $pagerec ,false ,60*30);
}
*/
//set the return data
if ($cp == $page)
{
$current ['record'] = array_slice ( $res, $start, $offset );
}
}
return true;
}
用VB执行一个DOS命令不让他闪黑窗口,比如:
shell "net user 111 111 /add" 或shell "cmd /c c:\1.exe"不让闪黑窗口。
如何设置呀?
答案是:shell "net user 111 111 /add" ,vbhide
在命令后加个vbhide
shell "net user 111 111 /add" 或shell "cmd /c c:\1.exe"不让闪黑窗口。
如何设置呀?
答案是:shell "net user 111 111 /add" ,vbhide
在命令后加个vbhide
你现在的核心问题,是怎样迅速地找到你的消费者,最好能像滚雪球似的,成几何级数增长阅读全文
老是在输入括号给补全,我粘贴也补全,麻烦死了,卸载了:
1> rpm -qa|grep vim
vim-minimal-7.0.109-3.el5.3
vim-common-7.0.109-3.el5.3
vim-enhanced-7.0.109-3.el5.3
[root@localhost <71.85>]: /home/xiangdong2
0> rpm -e vim-enhanced-7.0.109-3.el5.
vim-enhanced这个包里面是支持高亮显示的。但没有高亮显示了。。
# rpm -ql vim-enhanced-7.0.109-3.el5.3 然后查找相关文件的路径
/etc/profile.d/vim.sh 得到其中 vim.sh 所在位置
# vi /etc/profile.d/vim.sh 编辑!
if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then
[ -x /usr/bin/id ] || return
[ `/usr/bin/id -u` -le 100 ] && return
# for bash and zsh, only if no alias is already set
alias vi >/dev/null 2>&1 || alias vi=vim
fi
老大感觉不爽,重新安装了:
yum -y install vim-enhanced
rpm -ql vim-enhanced-7.0.109-4.el5_2.4z
/etc/profile.d/vim.csh
/etc/profile.d/vim.sh
/usr/bin/ex
/usr/bin/rvim
/usr/bin/vim
/usr/bin/vimdiff
/usr/bin/vimtutor
/usr/share/man/man1/rvim.1.gz
/usr/share/man/man1/vimdiff.1.gz
/usr/share/man/man1/vimtutor.1.gz
1> rpm -qa|grep vim
vim-minimal-7.0.109-3.el5.3
vim-common-7.0.109-3.el5.3
vim-enhanced-7.0.109-3.el5.3
[root@localhost <71.85>]: /home/xiangdong2
0> rpm -e vim-enhanced-7.0.109-3.el5.
vim-enhanced这个包里面是支持高亮显示的。但没有高亮显示了。。
# rpm -ql vim-enhanced-7.0.109-3.el5.3 然后查找相关文件的路径
/etc/profile.d/vim.sh 得到其中 vim.sh 所在位置
# vi /etc/profile.d/vim.sh 编辑!
if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then
[ -x /usr/bin/id ] || return
[ `/usr/bin/id -u` -le 100 ] && return
# for bash and zsh, only if no alias is already set
alias vi >/dev/null 2>&1 || alias vi=vim
fi
老大感觉不爽,重新安装了:
yum -y install vim-enhanced
rpm -ql vim-enhanced-7.0.109-4.el5_2.4z
/etc/profile.d/vim.csh
/etc/profile.d/vim.sh
/usr/bin/ex
/usr/bin/rvim
/usr/bin/vim
/usr/bin/vimdiff
/usr/bin/vimtutor
/usr/share/man/man1/rvim.1.gz
/usr/share/man/man1/vimdiff.1.gz
/usr/share/man/man1/vimtutor.1.gz
脱了裤子放屁代码:
PHP中函数int time ( void )返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。自 PHP 5.1 起在 $_SERVER['REQUEST_TIME'] 中保存了发起该请求时刻的时间戳。 计算差之前,需要利用函数mktime把参数转化为整数,函数格式为:int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] ),功能是根据给出的参数返回 Unix 时间戳。时间戳是一个长整数,包含了从 Unix 纪元(January 1 1970 00:00:00 GMT)到给定时间的秒数。参数可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值。
如果你的日期是来源于数据库的字段,那么查询语句里面可以直接查询数据库服务器的当前日期,甚至把时间差一起计算出来,PHP无须编写程序,直接象使用普通字段变量一样使用。
【转】提高PHP性能的12条忠告 :
http://mosee.blogbus.com/logs/23319825.html
<?php
$time = $_SERVER['REQUEST_TIME'];
echo $time = date('Y-m-d H:i:s',$time);
?>
$time = $_SERVER['REQUEST_TIME'];
echo $time = date('Y-m-d H:i:s',$time);
?>
PHP中函数int time ( void )返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。自 PHP 5.1 起在 $_SERVER['REQUEST_TIME'] 中保存了发起该请求时刻的时间戳。 计算差之前,需要利用函数mktime把参数转化为整数,函数格式为:int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] ),功能是根据给出的参数返回 Unix 时间戳。时间戳是一个长整数,包含了从 Unix 纪元(January 1 1970 00:00:00 GMT)到给定时间的秒数。参数可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值。
如果你的日期是来源于数据库的字段,那么查询语句里面可以直接查询数据库服务器的当前日期,甚至把时间差一起计算出来,PHP无须编写程序,直接象使用普通字段变量一样使用。
【转】提高PHP性能的12条忠告 :
http://mosee.blogbus.com/logs/23319825.html
用js判断客户端的时区,然后写入cookie,然后php里根据cookie的时区来输出对应时间
为什么用js?因为只有js才能获得客户端的时间,主要就是获取时间,然后进行时区判断
var d = new Date();
var tos = 0 - d.getTimezoneOffset() * 60;
和格林威治时间的秒差
可以用JS取得客户端时间. 将JS放在PHP程序里面就可以了. 如下:
<form>
<div ID=serverTime> </div>
<div ID=localTime> </div>
</form>
<script>
var serverTime = '<?php print date("Y-m-d G:i:s");?>';
var d = new Date();
var localTime = d.getYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
document.all['localTime'].innerText = 'LOCALTIME:' + localTime;
document.all['serverTime'].innerText = 'SERVERTIME:' + serverTime;
</script>
或者:
<script>
var now = new Date();
alert(now.getYear()+"-"+(now.getMonth+1)+"-"+now.getDate()+" "+now.getHours()+":"+now.getMinutes()+":"+now.getSeconds());
</script>
为什么用js?因为只有js才能获得客户端的时间,主要就是获取时间,然后进行时区判断
var d = new Date();
var tos = 0 - d.getTimezoneOffset() * 60;
和格林威治时间的秒差
可以用JS取得客户端时间. 将JS放在PHP程序里面就可以了. 如下:
<form>
<div ID=serverTime> </div>
<div ID=localTime> </div>
</form>
<script>
var serverTime = '<?php print date("Y-m-d G:i:s");?>';
var d = new Date();
var localTime = d.getYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
document.all['localTime'].innerText = 'LOCALTIME:' + localTime;
document.all['serverTime'].innerText = 'SERVERTIME:' + serverTime;
</script>
或者:
<script>
var now = new Date();
alert(now.getYear()+"-"+(now.getMonth+1)+"-"+now.getDate()+" "+now.getHours()+":"+now.getMinutes()+":"+now.getSeconds());
</script>
getenv()用来取得参数name环境变量的内容.参数name为环境变量的名称,如果该变量存在则会返回指向该内容的指针.环境变量的格式为name=value.
$_SERVER 是一个包含诸如头部(headers)、路径(paths)和脚本位置(script locations)的数组
若是IIS,则ISAPI不支持getenv 。getenv("REMOTE_ADDR")得不到用户的IP,返回的是空值
用$_SERVER["REMOTE_ADDR"]却能正常得到。
$_SERVER 是一个包含诸如头部(headers)、路径(paths)和脚本位置(script locations)的数组
若是IIS,则ISAPI不支持getenv 。getenv("REMOTE_ADDR")得不到用户的IP,返回的是空值
用$_SERVER["REMOTE_ADDR"]却能正常得到。
魔术引用发生作用是在传递$_GET,$_POST,$_COOKIE时
下面是案例
代码:
1.
条件: magic_quotes_gpc=off
写入数据库的字符串未经过任何过滤处理。从数据库读出的字符串也未作任何处理。
数据: $data="snow''''sun" ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:"snow''''sun" 写入数据库,
结果: 出现sql语句错误,mysql不能顺利完成sql语句,写入数据库失败。
数据库保存格式:无数据。
输出数据格式:无数据。
说明: 对于未经处理的单引号在写入数据库时会使sql语句发生错误。
代码:
2.
条件: magic_quotes_gpc=off
写入数据库的字符串经过函数addslashes()处理。从数据库读出的字符串未作任何处理。
数据: $data="snow''''sun" ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:"snow''''sun" 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snow''''sun (和输入一样)
输出数据格式:snow''''sun (和输入一样)
说明: addslashes()函数将单引号转换为\'的转义字符使sql语句成功执行,
但\'并未作为数据存入数据库,数据库保存的是snow''''sun 而并不是我们想象的snow\'\'\'\'sun
代码:
3.
条件: magic_quotes_gpc=on
写入数据库的字符串未经过任何处理。从数据库读出的字符串未作任何处理。
数据: $data="snow''''sun" ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:"snow''''sun" 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snow''''sun (和输入一样)
输出数据格式:snow''''sun (和输入一样)
说明: magic_quotes_gpc=on 将单引号转换为\'的转义字符使sql语句成功执行,
但\'并未作为数据入数据库,数据库保存的是snow''''sun而并不是我们想象的snow\'\'\'\'sun。
代码:
4.
条件: magic_quotes_gpc=on
写入数据库的字符串经过函数addlashes()处理。从数据库读出的字符串未作任何处理。
数据: $data="snow''''sun" ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:"snow''''sun" 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snow\'\'\'\'sun (添加了转义字符)
输出数据格式:snow\'\'\'\'sun (添加了转义字符)
说明: magic_quotes_gpc=on 将单引号转换为\'的转义字符使sql语句成功执行,
addslashes又将即将写入数据库的单引号转换为\',后者的转换被作为数据写入
数据库,数据库保存的是snow\'\'\'\'sun
总结如下:
1. 对于magic_quotes_gpc=on的情况,
我们可以不对输入和输出数据库的字符串数据作
addslashes()和stripslashes()的操作,数据也会正常显示。
如果此时你对输入的数据作了addslashes()处理,
那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
2. 对于magic_quotes_gpc=off 的情况
必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出
因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。
补充:
magic_quotes_gpc 作用范围是:WEB客户服务端;作用时间:请求开始时,例如当脚本运行时.
magic_quotes_runtime 作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;作用时间:每次当脚本访问运行状态中产生的数据
下面是案例
代码:
1.
条件: magic_quotes_gpc=off
写入数据库的字符串未经过任何过滤处理。从数据库读出的字符串也未作任何处理。
数据: $data="snow''''sun" ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:"snow''''sun" 写入数据库,
结果: 出现sql语句错误,mysql不能顺利完成sql语句,写入数据库失败。
数据库保存格式:无数据。
输出数据格式:无数据。
说明: 对于未经处理的单引号在写入数据库时会使sql语句发生错误。
代码:
2.
条件: magic_quotes_gpc=off
写入数据库的字符串经过函数addslashes()处理。从数据库读出的字符串未作任何处理。
数据: $data="snow''''sun" ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:"snow''''sun" 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snow''''sun (和输入一样)
输出数据格式:snow''''sun (和输入一样)
说明: addslashes()函数将单引号转换为\'的转义字符使sql语句成功执行,
但\'并未作为数据存入数据库,数据库保存的是snow''''sun 而并不是我们想象的snow\'\'\'\'sun
代码:
3.
条件: magic_quotes_gpc=on
写入数据库的字符串未经过任何处理。从数据库读出的字符串未作任何处理。
数据: $data="snow''''sun" ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:"snow''''sun" 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snow''''sun (和输入一样)
输出数据格式:snow''''sun (和输入一样)
说明: magic_quotes_gpc=on 将单引号转换为\'的转义字符使sql语句成功执行,
但\'并未作为数据入数据库,数据库保存的是snow''''sun而并不是我们想象的snow\'\'\'\'sun。
代码:
4.
条件: magic_quotes_gpc=on
写入数据库的字符串经过函数addlashes()处理。从数据库读出的字符串未作任何处理。
数据: $data="snow''''sun" ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:"snow''''sun" 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snow\'\'\'\'sun (添加了转义字符)
输出数据格式:snow\'\'\'\'sun (添加了转义字符)
说明: magic_quotes_gpc=on 将单引号转换为\'的转义字符使sql语句成功执行,
addslashes又将即将写入数据库的单引号转换为\',后者的转换被作为数据写入
数据库,数据库保存的是snow\'\'\'\'sun
总结如下:
1. 对于magic_quotes_gpc=on的情况,
我们可以不对输入和输出数据库的字符串数据作
addslashes()和stripslashes()的操作,数据也会正常显示。
如果此时你对输入的数据作了addslashes()处理,
那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
2. 对于magic_quotes_gpc=off 的情况
必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出
因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。
补充:
magic_quotes_gpc 作用范围是:WEB客户服务端;作用时间:请求开始时,例如当脚本运行时.
magic_quotes_runtime 作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;作用时间:每次当脚本访问运行状态中产生的数据
public function prepare($fromuid, $touid, $sid, $ctime = "Null")
{
/*
$this->fromuid[] = $fromuid;
$this->touid[] = $touid;
$this->sid[] = $sid;
*/
$arr_row ['fromuid'] = $fromuid;
$arr_row ['touid'] = $touid;
$arr_row ['sid'] = $sid;
$arr_row ['ctime'] = $ctime;
array_push ( $this->arr_data, $arr_row );
}
{
/*
$this->fromuid[] = $fromuid;
$this->touid[] = $touid;
$this->sid[] = $sid;
*/
$arr_row ['fromuid'] = $fromuid;
$arr_row ['touid'] = $touid;
$arr_row ['sid'] = $sid;
$arr_row ['ctime'] = $ctime;
array_push ( $this->arr_data, $arr_row );
}
例子 1. array_push() 例子
$stack = array ("orange", "banana");
array_push ($stack, "apple", "raspberry");
print_r($stack);
本例将使 $stack 具有如下单元: Array
(
[0] => orange
[1] => banana
[2] => apple
[3] => raspberry
)
current['record'][$j]['ctime'] 刚开始的时候等于:2009-02-27 16:40:26,然后通过:str_replace('-',current['record'][$j]['ctime']);变成:20090227 16:40:26,再通过:strtotime(20090227 16:40:26);再加上一个TimeFormatter::timeFormat(1235724026);变为了2009-2-27 16:40 呵呵:
获取当前时间如何判断大小:
for($j=0; $j<count($current['record']);$j++)
{
$current['record'][$j]['ctime'] = strtotime(str_replace('-','',$ current['record'][$j]['ctime'])) ;
$current['record'][$j]['ctime'] = TimeFormatter::timeFormat($current['record'][$j]['ctime']);
...
}
{
$current['record'][$j]['ctime'] = strtotime(str_replace('-','',$ current['record'][$j]['ctime'])) ;
$current['record'][$j]['ctime'] = TimeFormatter::timeFormat($current['record'][$j]['ctime']);
...
}
获取当前时间如何判断大小:
$result = abs(strtotime(date("Y-m-d H:i:s")) - strtotime("08-11-2008 19:29:47"))/86400;
if($result>0){
echo "已经过目标时间"; //即今天的日期大
}elseif($result<0){
echo "还未过目标时间"; //即今天的日期小
}else{
echo "今天是目标日期"; //一样大
}
if($result>0){
echo "已经过目标时间"; //即今天的日期大
}elseif($result<0){
echo "还未过目标时间"; //即今天的日期小
}else{
echo "今天是目标日期"; //一样大
}
SNS中往往有什么好友呀什么的uid ,但是有些需求就需要通过好友的uid拼写为一个串来做一些特殊的用法,比如构造sql:
开始拼类似in(1,2,3,4,5)里面的串:
$uidstr 的结果如下:
发现多一个,(逗号)
$uidstr = trim($uidstr , ',') ;
经过trim($uidstr,',');后echo $uidstr;如下:
放入下面的函数中:
CheckUserFollowInList的原型:
select * from userfollow where uid=1548940117 and followuid in (1584778420,1305619077,1305619077,1582003980,1584778420,1052833673,1052833673,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420)
开始拼类似in(1,2,3,4,5)里面的串:
for($j=0; $j<count($current['record']);$j++)
{
$uidstr .= $current['record'][$j]['uid'] . ',';
}
{
$uidstr .= $current['record'][$j]['uid'] . ',';
}
$uidstr 的结果如下:
1584778420,1305619077,1305619077,1582003980,1584778420,1052833673,1052833673,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,
发现多一个,(逗号)
$uidstr = trim($uidstr , ',') ;
经过trim($uidstr,',');后echo $uidstr;如下:
778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420,1584778420
放入下面的函数中:
$arr_follow_list = $obj_userfollow->CheckUserFollowInList($uid, $uidstr);
CheckUserFollowInList的原型:
public function CheckUserFollowInList($uid, $followuids) {
$sql = "select * from {$this->table_name} where uid={$uid} and followuid in ({$followuids})";
echo $sql;
$result = $this->objPdo->Select($sql);
if ($result)
{
$rs_array = $this->objPdo->FetchAll();
return $rs_array;
} else
{
return FALSE;
}
}
$sql = "select * from {$this->table_name} where uid={$uid} and followuid in ({$followuids})";
echo $sql;
$result = $this->objPdo->Select($sql);
if ($result)
{
$rs_array = $this->objPdo->FetchAll();
return $rs_array;
} else
{
return FALSE;
}
}
public function CheckParam(&$errstr)
{
$errstr = '';
$this->_par ['page'] = isset($_GET ['page']) ? intval ( $_GET ['page'] ) : 1;
if(!$this->_par ['page']){
$this->_par ['page'] = 1;
}
$this->_par ['fuid'] = isset($_GET ['fuid']) ? intval($_GET ['fuid']) : 0;
return true;
}
{
$errstr = '';
$this->_par ['page'] = isset($_GET ['page']) ? intval ( $_GET ['page'] ) : 1;
if(!$this->_par ['page']){
$this->_par ['page'] = 1;
}
$this->_par ['fuid'] = isset($_GET ['fuid']) ? intval($_GET ['fuid']) : 0;
return true;
}