查询当前数据库有哪些存储过程:

mysql>show procedure status where Db='test'

创建一个简单的存储过程


mysql>create procedure hi() select 'hello';


  5 存储过程创建完毕,看怎么调用它


mysql>call hi();

  显示结果 
 mysql> call hi();
+-------+
| hello |
+-------+
| hello |
+-------+
1 row in set (0.00 sec)
  Query OK, 0 rows affected (0.01 sec)



删除存储过程:

DROP PROCEDURE hi;


存储过程实例:

DELIMITER ||
CREATE PROCEDURE showdb( v_offset int, v_pagesize int )  
BEGIN
  SET @stmt = concat("SELECT * FROM  `comment` ORDER BY id DESC LIMIT ",v_offset,",",v_pagesize);
  PREPARE s1 FROM @stmt;
  EXECUTE s1;
  DEALLOCATE PREPARE s1;
END||
DELIMITER ;


PHP调用存储过程:
返回单个数据:
1.1:创建MySQL存储过程:


DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`proc_test` $$
CREATE PROCEDURE `test`.`proc_test` (out a int)
BEGIN
    select count(*) into a from tblname;
END $$

DELIMITER ;


1.2:PHP调用:


$db->query("CALL test.proc_test(@a)");
$res = $db->query("select @a");
$row = $res->fetch_array();
echo $row['@a'];


返回多个数据:
2.1:创建MySQL存储过程:


DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`proc_test` $$
CREATE PROCEDURE `test`.`proc_test` ()
BEGIN
    select * from tbl_name;
END $$

DELIMITER ;


2.2:PHP调用:


$res=$db->query("CALL test.proc_test()");
while ($arr=$res->fetch_array())
{
    echo $arr["Field"] ."<br/>";
}


P.S.:以上代码执行通过环境 PHP 5.X.X + MySQL 5.X.X



1 define('CLIENT_MULTI_RESULTS', 131072);
2
3 $link = mysql_connect("127.0.0.1", "root", "",1,CLIENT_MULTI_RESULTS) or die("Could not connect: ".mysql_error());

下面就可以正常使用了,以下是例子程序:


1 <?php
2     define('CLIENT_MULTI_RESULTS', 131072);
3
4     $link = mysql_connect("127.0.0.1", "root", "",1,CLIENT_MULTI_RESULTS) or die("Could not connect: ".mysql_error());
5     mysql_select_db("vs") or die("Could not select database");
6 ?>
7
8 <?php
9         $result = mysql_query("call get_news_from_class_id(2)") or die("Query failed:" .mysql_error());
10         while($row = mysql_fetch_array($result, MYSQL_ASSOC))
11         {
12                 $line = '<tr><td><a target = _blank href=\''.$row["url"].'\'>'.$row["title"].'('.$row["page_time"].')'.'</a></td></tr>';
14                 echo $line;
15                 printf("\n");
16
17         }
18         mysql_free_result($result);
19 ?>
20
21 <?php
22     mysql_close($link);
23 ?>
最近在做一个小东西的时候,发现mysql有last_insert_id()这个函数

它的用法如下:记录下来备忘

它必需紧跟在insert 语句执行之后。

//执行insert语句先

$sql="insert into table (name1,name2,...) values('value1','values'...)";

dbx_query($db_link,$sql);

//找出最后一次插入记录的id

$select="select last_insert_id() ";

$result=dbx_query($db_link,$select);

$last_id=$result->data[0][0];


ps: $last_id=mysql_insert_id();

mysql_insert_id() 将 MySQL 内部的 C API 函数 mysql_insert_id() 的返回值转换成 long(PHP 中命名为 int)。如果 AUTO_INCREMENT 的列的类型是 BIGINT,则 mysql_insert_id() 返回的值将不正确。可以在 SQL 查询中用 MySQL 内部的 SQL 函数 LAST_INSERT_ID() 来替代。

具体的请看php手册: mysql_insert_id

来自:http://blog.csdn.net/kemy88/article/details/1108524








_____________________________________________________________________________
show table status\G
show create table message;
LAST_INSERT_ID

自动返回最后一个 INSERT 或 UPDATE 操作为 AUTO_INCREMENT 列设置的第一个发生的值. 参考这里

The ID that was generated is maintained in the server on a per-connection basis.

LAST_INSERT_ID是基于单个connection的, 不可能被其它的客户端连接改变。

可以用 SELECT LAST_INSERT_ID(); 查询LAST_INSERT_ID的值.

Important: If you insert multiple rows using a single INSERT statement, LAST_INSERT_ID() returns the value generated for the first inserted row only.

使用单INSERT语句插入多条记录,  LAST_INSERT_ID只返回插入的第一条记录产生的值. 比如


   1. mysql> INSERT INTO t VALUES (NULL, 'aaaa'), (NULL, 'bbbb'), (NULL, 'cccc');  
   2. mysql> SELECT * FROM t;  
   3. +----+------+  
   4. | id | name |  
   5. +----+------+  
   6. |  1 | Bob  |  
   7. |  2 | aaaa |  
   8. |  3 | bbbb |  
   9. |  4 | cccc |  
  10. +----+------+  
  11. mysql> SELECT LAST_INSERT_ID();  
  12. +------------------+  
  13. | LAST_INSERT_ID() |  
  14. +------------------+  
  15. |                2 |  
  16. +------------------+  


ID 2 是在插入第一条记录aaaa 时产生的.

LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。

一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。

但在多线程情况下,就不行了。在多用户交替插入数据的情况下max(id)显然不能用。

这就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update操作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。

mysql的last_insert_id()不可靠 Mysql的API有个很有意义的函数last_insert_id()。这个函数的作用是,针对auto_increment字段,返回给定的 数据库链接,上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号。如果没有指定数据库链接,则使用上一个打开的连接。   很多人质疑last_insert_id()是否是可靠的,以前我也犹豫过。   事实上的结果是mysql_insert_id决不会取错。首先做个测试,在mysql_query("insert.....);之后立刻sleep(1100),其间再做些其他的insert. 然后发现在mysql_insert_id取的值都不会和其他的冲突。   看了半天mysql的代码。mysql_insert_id是这么定义的

my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql) {   return mysql->;last_used_con->;insert_id; }


参考:http://zhaohe162.blog.163.com/blog/static/38216797201122411193745/
语法如下:

alter table table_name add index index_name (column_list) ;
alter table table_name add unique (column_list) ;
alter table table_name add primary key (column_list) ;

alter table table_name drop index index_name ;
alter table table_name drop primary key ;
drop index shili on tpsc ;
来源URL:http://www.isstudy.com/mysql/440.html
实际实践如下:

alter table `relation` drop index gots;   alter table `relation` drop index gots;  
alter table `relation` add index gots(`group`,`owneruid`, `type`,`status`);



create table index_analyse_xiangdong select * from relation limit 21000;
show index from  p2p_main;  //p2p_main 是表名称


mysql> show index from  p2p_main;      
+----------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table    | Non_unique | Key_name    | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+----------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| p2p_main |          0 | PRIMARY     |            1 | id          | A         |     3052412 |     NULL | NULL   |      | BTREE      |         |
| p2p_main |          1 | oweneruid   |            1 | oweneruid   | A         |      610482 |     NULL | NULL   |      | BTREE      |         |
| p2p_main |          1 | oweneruid_2 |            1 | oweneruid   | A         |      610482 |     NULL | NULL   |      | BTREE      |         |
| p2p_main |          1 | oweneruid_2 |            2 | otheruid    | A         |     1017470 |     NULL | NULL   |      | BTREE      |         |
+----------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+




alter table `p2p_main` add index oweneruid_2(oweneruid ,otheruid );//建立索引,括号里面不能有逗号和单引号
alter table `p2p_main` drop index oweneruid_2; //删除索引:是建立在oweneruid 和otheruid 的联合索引



explain SELECT SQL_NO_CACHE * FROM `mytest` force index(rstatus,uid) WHERE  rstatus =1 AND uid IN ( 3,2,7) \G;





测试用数据表结构如下:
--

-- 表的结构 `p2p_info`
--

CREATE TABLE IF NOT EXISTS `p2p_info` (
  `infoid` int(10) unsigned NOT NULL auto_increment,
  `group` enum('1','2') collate utf8_bin NOT NULL,
  `productid` char(32) collate utf8_bin NOT NULL,
  `connection` enum('11','22') collate utf8_bin NOT NULL,
  `invitetype` enum('111','222') collate utf8_bin NOT NULL,
  `content` text collate utf8_bin NOT NULL,
  `addition` text collate utf8_bin NOT NULL,
  PRIMARY KEY  (`infoid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- 表的结构 `p2p_main`
--

CREATE TABLE IF NOT EXISTS `p2p_main` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `oweneruid` int(11) NOT NULL,
  `otheruid` int(11) NOT NULL,
  `type` enum('1','2') NOT NULL default '1',
  `status` enum('11','22') NOT NULL default '11',
  `infoid` int(11) NOT NULL,
  `ctime` datetime NOT NULL,
  `uniq_key` varchar(64) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;




1.PRIMARY  KEY(主键索引)
mysql>ALTER  TABLE  `table_name`  ADD  PRIMARY  KEY (  `column`  )
2.UNIQUE(唯一索引)
        mysql>ALTER  TABLE  `table_name`  ADD  UNIQUE (
`column` )   //这个不靠谱


alter table `index_analyse_xiangdong` ADD UNIQUE key id4(id);
alter table index_analyse_xiangdong drop index id4;


3.INDEX(普通索引)
mysql>ALTER  TABLE  `table_name`  ADD  INDEX index_name (  `column`  )
4.FULLTEXT(全文索引)
mysql>ALTER  TABLE  `table_name`  ADD  FULLTEXT ( `column` )
5.多列索引
mysql>ALTER  TABLE  `table_name`  ADD  INDEX index_name (  `column1`,  `column2`,  `column3`  )



可以用sql强制使用或不使用索引
IGNORE INDEX (invitetype)
USE INDEX (invitetype)

select count  from p2p_info1 IGNORE INDEX (invitetype) where invitetype="111";
建表:

CREATE TABLE customer (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
ALTER TABLE et ENGINE = INNODB;.
查看引擎状态:
show engines;

查看表类型(存储引擎): SHOW TABLE STATUS FROM test;
SHOW variables like "have_%"

用innodb引擎。使用方法是create table xxx()engine=innodb;如果想所有建立的表格都用innodb引擎,可以把“default-storage- engine=INNODB”加到/etc/mysql/my.cnf(位置可能不同)。设完之后就可以用“show engines;”检查是否设置好。不过据说该设置在5.0.22下可能无效。


http://www.geekso.com/post/124/

事务处理:

ySQL 总是启动自动提交你运行的每个 SQL 语句的自动提交(autocommit)模式创建每的新连接。为了使用事务,可以使用 SQL 命令 SET AUTOCOMMIT = 0 关闭自动提交(autocommit)开关,使用 COMMIT 和 ROLLBACK 来提交事务和回滚事务。如果你想保留 autocommit 开关打开,你可以将事务放入 BEGIN 和 COMMIT 或 ROLLBACK之间。

heikki@hundin:~/mysql/client> mysql test

Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 5 to server version: 3.23.50-log

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql> CREATE TABLE CUSTOMER (A INT, B CHAR (20), INDEX (A)) TYPE = InnoDB;
Query OK, 0 rows affected (0.00 sec)

mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO CUSTOMER VALUES (10, 'Heikki');
Query OK, 1 row affected (0.00 sec)

mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)

mysql> SET AUTOCOMMIT=0;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO CUSTOMER VALUES (15, 'John');
Query OK, 1 row affected (0.00 sec)

mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM CUSTOMER;
+------+--------+
| A      | B        |
+------+--------+
| 10     | Heikki |
+------+--------+
1 row in set (0.00 sec)



net use \\ip\ipc$ " " /user:" " 建立IPC空链接
net use \\ip\ipc$ "密码" /user:"用户名" 建立IPC非空链接
net use h: \\ip\c$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H:
net use h: \\ip\c$ 登陆后映射对方C:到本地为H:
net use \\ip\ipc$ /del 删除IPC链接
net use h: /del 删除映射对方到本地的为H:的映射
net user 用户名 密码 /add 建立用户
net user guest /active:yes 激活guest用户
net user 查看有哪些用户
net user 帐户名 查看帐户的属性
net localgroup ***istrators 用户名 /add 把“用户”添加到管理员中使其具有管理员权限,注意:***istrator后加s用复数
net start 查看开启了哪些服务
net start 服务名 开启服务;(如:net start telnet, net start schedule)
net stop 服务名 停止某服务
net time \\目标ip 查看对方时间
net time \\目标ip /set 设置本地计算机时间与“目标IP”主机的时间同步,加上参数/yes可取消确认信息
net view 查看本地局域网内开启了哪些共享
net view \\ip 查看对方局域网内开启了哪些共享
net config 显示系统网络设置
net logoff 断开连接的共享
net pause 服务名 暂停某服务
net send ip "文本信息" 向对方发信息
net ver 局域网内正在使用的网络连接类型和信息
net share 查看本地开启的共享
net share ipc$ 开启ipc$共享
net share ipc$ /del 删除ipc$共享
net share c$ /del 删除C:共享
net user guest 12345 用guest用户登陆后用将密码改为12345
net password 密码 更改系统登陆密码
netstat -a 查看开启了哪些端口,常用netstat -an
netstat -n 查看端口的网络连接情况,常用netstat -an
netstat -v 查看正在进行的工作
netstat -p 协议名 例:netstat -p tcq/ip 查看某协议使用情况(查看tcp/ip协议使用情况)
netstat -s 查看正在使用的所有协议使用情况
nbtstat -A ip 对方136到139其中一个端口开了的话,就可查看对方最近登陆的用户名(03前的为用户名)-注意:参数-A要大写

TELNET就很简单了
开始 运行 TELNET 然后
再HELP回车 就看到了
有三道PHP的面试题,除了第三题需要一些经验和对HTTP协议理解外,前面两题其实很简单,但是很少遇到有人答正确的,大部分人我想都不是技术问题,而是思考是否严谨的问题。


1. 下面语句输出什么?为什么?
if ($a=$b)  printf("a==b");
else  printf("a!=b");
2. $array['anykey']和$array[anykey]有什么区别?
3. 写出使用telnet命令通过GET的方式访问http://www.toplee.com/index.php 得到页面返回的方法(不是用PHP实现,用dos或者unix命令行实现)。


MyResult:
1.程序把$b赋值给$a,然后判断$a值~~~因为$a=null 所以$a自然为false!
2.这样写的话在警告没有打开的条件 不会出现提示错误的 anykey 只要没有定义成常量 效果一样 (节约了两个单引号) :)
3.貌似这样没有什么好处吧 :) curl更强大



贴上51.com几道题:
1. 禁用COOKIE 后 SEESION 还能用吗?

2. 抓取远程图片到本地,你会用什么函数?

3. 已知姓名A,姓名B,给一个求他们缘份的算法

4. 你觉得在PV10W的时候, 同等配置下,LUNIX 比WIN快多少?

5. 简述POST 和GET传输的最大容量分别是多少?

6. 用最少的代码写一个求3值最大值的函数.

大家可以试一下哦.



我来做个标准:

1. 禁用COOKIE 后 SEESION 还能用吗?
能用,页面get mode提交session.
2. 抓取远程图片到本地,你会用什么函数?
我会用curl
3. 已知姓名A,姓名B,给一个求他们缘份的算法
ascii (最好简单为好)
4. 你觉得在PV10W的时候, 同等配置下,LUNIX 比WIN快多少?
百分之二十以上
5. 简述POST 和GET传输的最大容量分别是多少?
无限 和 1024
6. 用最少的代码写一个求3值最大值的函数.
max()

阅读全文
[转载]去年在巴黎举行的PHP开发者大会中,PHP6开发的消息开始流传开来,
于PHP大会讨论的PHP6,将有很大幅度的变化,但这只是草案阶段,
并不代表所有会议的机率都会随着PHP6的发布而包含记录中所有的变更
也就是说,在发布PHP6之前,还是会有异动的情形,但是可以确定的是
下面所列的数项变化,将会随着PHP6一同面世(当然不是百分百乐,)
赶快来看看这些新特性吧

1.支持Unicode
支持Unicode是有其必然,虽然Unicode占用较多的空间,但Unicode带来
的便利性,远超过占用空间的缺点,尤其在国际化的今天,硬件设备越来
越强大,网速也大幅度的提升,这么一点小小的缺点是可以忽略的。另外
一点,PHP也可以在.ini文件中设定是否开启支持Unicode,决定权在你自己,
这是一个不错的点子,关掉Unicode的支持,PHP的性能并不会有大幅度的
提升,主要的影响在于需要引用字符串的函数。

2.Register Globals 将被移除
这是一个重要的决定,说多新进的PHP开发者会觉得Register Globals满
方便的,但是却忽略了Register Globals会带来程序上安全性的隐患,大
多数的主机上此项功能是关闭的,印象中从PHP4.3.x版开始时,此项默认
设置值即是关闭状态,PHP6正式移除Register Globals也代表着如果程序
是由PHP3时代的产物,将完全无法使用,除了改写一途外,别无他法。相
信现在的PHP世界里,仍使用PHP3时代所产生的程序应该是少之又少。

3.Magic Quotes 将消失
Magic Quotes主要是自动转义需要转义的字符,此项功能移除叶符合大多
数PHP开发者的心声。

4.Safe Mode 取消
老实说,这个模式不知道哪里不好,取消就取消吧,反正也用不到

5.’var’ 别名为 ‘public’
在类中的var声明变成public的别名,相信是为了兼容PHP5而作的决定,
PHP6现在也可以称作为OO语言了。

6.通过引用返回将出错
现在透过引用返回编译器将会报错 例如$a =& new b()、function &c(),
OO语言默认就是引用,所以不需要再使用&了。

7.zend.ze1 compatbility mode 将被移去
Zend.ze1相容模式将被移去,PHP5是为兼容旧有PHP4,所以在.ini中可选择是否
开启相容模式,原因在于PHP5使用的是第二代解析引擎,但是相容模式并不是百
分之百能解析PHP4语法,所以旧时代的产物,移除。

8.Freetype 1 and GD 1 support 将不见
这两个是很久的Libs,所以不再支持,GD1早已被现在的GD2取代了。

9.dl() 被移到 SAPI 中
dl()主要是让设计师加载extension Libs,现在被移到 SAPI 中

10.Register Long Array 去除
从PHP5起默认是关闭,再PHP6中正式移除。

11.一些Extension的变更
例如 XMLReader 和 XMLWriter 将不再是以Extension的方式出现,他们将被移入
到PHP的核心之中,并且默认是开启,ereg extension将被放入PECL,代表着它将
被移出PHP核心,这也是为了让路给新的正则表达式extension,
此外,Fileinfo extension 也将被导入PHP的核心之中。

12.APC将被导入核心
这是一个提高PHP性能的功能,现在它将被放入PHP核心中,并且可以选择是否启用APC

13.告别ASP风格的起始标签
原来是为了取悦ASP开发者转向使用PHP,现今已经不再需要这种做法了,

最后,别期望PHP6的性能可以全面超过PHP5,有可能的是PHP6的执行效率会比
PHP5还要来的慢的,但是可以预期的是,PHP开发小组将会努力的完善PHP5,超
越PHP5。
那么,对PHP6有兴趣的朋友现在可以到PHP官方网站上下载,试试这些功能是否真的已经
在PHP6中体现出来了,下载地址http://snaps.php.net/
Crontab跑昨天的DB时间:

$date = date('Y-m-d',strtotime("-1 day"));//昨天
$date = date('Ymd',strtotime("-1 day"));

结果:
2011-03-15
20110315


$fromDate1=mktime(9,21,0,10,23,2009);//开始时间 --->  时,分,秒 月,日,年
         echo date("M-d-Y H:i:s",$fromDate1);


Oct-23-2009 09:21:00

$date_d=date("d")-1;//天数减一天,数字想减少罢了。
$starttime = date("Y-m-d 00:00:00", strtotime("-3 day"));//天数减少3天,蕴含日期相见月份相减少。  date("Y-m-d H:i:s")

$lastread = time()-3*24*60*60;//减少是秒数,看下文sql构造:)
echo date("Y-m-d H:i:s",$lastread);


计算秒数(60 秒):

$date_time = time();
$date_time2 = time();
$date_time2-$date_time >= 60  //60秒


反过来,由Y-m-d H:i:s变为unix时间秒:
1)Mysql:
UNIX_TIMESTAMP(etime) > UNIX_TIMESTAMP())
http://www.cnblogs.com/showker/archive/2010/03/18/1689054.html
2)PHP:
用strtotime(格式)可以获取指定时间的时间戳

<?php
require_once ("/data0/vshare/app/rank/config.php");
define("USER_SEARCH_IASK_LOG_PATH", "/data0/vshare/logs/user_search/iasks/");//删除的用户及视频日志目录(爱问)
echo "程序于 " . date("Y-m-d H:i:s") . " 开始执行:\n";
$date_d=date("d")-1;
if($date_d<10)
{
  $date_d="0".$date_d;
}
$iask_filename = USER_SEARCH_IASK_LOG_PATH.date("Ym")."/".$date_d."/boke_ay_" . date("Ymd", strtotime("-1 day")) .".log";
$iask_filename_html = USER_SEARCH_IASK_LOG_PATH.date("Ym")."/".$date_d."/boke_ay_" . date("Ymd", strtotime("-1 day")) .".html";
$conn_db_3306_r = @mysql_connect(DBHOST_VIDEO_R_aoyun, DBUSER_VIDEO_R_aoyun, DBPASSWD_VIDEO_R_aoyun) or
    die(DBHOST_VIDEO_R_aoyun.DBUSER_VIDEO_R_aoyun.DBPASSWD_VIDEO_R_aoyun."Can't connect to 3306 port readonly database");//长连接
//统计昨天登录过的用户个人中心信息
echo "正在从MySQL数据库中取出所有的用户userid,请稍候....";
//exit(0);
//$select_dt_user_r = @mysql_select_db("dt_video", $conn_db_3306_r) or die("Can't select database");
$select_dt_user_r = @mysql_select_db("dt_manage", $conn_db_3306_r) or die("Can't select database");
//$sql_tb_usertotal_r = "SELECT videoid,up_userid FROM tb_video_total where activeid = 0 limit 10";/*上线后打开*/
$starttime = date("Y-m-d 00:00:00", strtotime("-3 day"));
$endtime = date("Y-m-d 00:00:00");
$sql_tb_usertotal_r = "select videoid,up_userid from tb_video_activity where (adddate>'".$starttime."' or appr_time>'".$starttime."') and adddate<'".$endtime."' and appr_status=1 and active_status in(1,0) and conv_status=1 and del_status=0 and activeid=128;";/*上线后打开*/
$query_tb_usertotal_r = mysql_query($sql_tb_usertotal_r, $conn_db_3306_r) or die("Query Error:" .
    mysql_error() . "\n");
echo  $sql_tb_usertotal_r."\n";
echo "\n[取出所有的用户userid:完成]\n";
$i=0;
echo $iask_filename."\n";

if(file_exists($iask_filename))
{
    unlink($iask_filename);
}

while ($row_tb_usertotal_r = mysql_fetch_assoc($query_tb_usertotal_r))
{
     if (!($i % 2000))
    {
      sleep(1);        
    }
  $vid = $row_tb_usertotal_r['videoid'];
  $uid = $row_tb_usertotal_r['up_userid'];
  $result['vid'] = $vid;
  $result['uid'] = $uid;
  /*  
  echo "VID:". $result['vid'] = $vid."\n";
  echo "UID:".$result['uid'] = $uid."\n";
  */
  $content = getContent($result,$i);
  us_writeFile($content, $iask_filename, USER_SEARCH_IASK_LOG_PATH .date("Ym")."/".$date_d);
  $i=$i+1;
  
    
}
if (file_exists($iask_filename) && is_readable($iask_filename))
{
  echo "正在向爱问推送数据,请稍候....\n";
  //pclose(popen("touch {$iask_filename} && chmod 0664 {$iask_filename} && /usr/bin/rsync -vzrtup {$iask_filename} 10.69.2.48::usersource_video/",
        //"r"));
  $command="/usr/bin/rsync -avgt --progress --password-file=/usr/local/etc/rsyncd.secrets " . USER_SEARCH_IASK_LOG_PATH ."*"." backupuser@219.142.118.48::boke_2008_sum_olympic_video";
  echo $command."\n";
  pclose(popen("touch {$iask_filename} && chmod 0664 {$iask_filename} && $command",
        "r"));
  
  $command="/usr/bin/rsync -avgt --progress --password-file=/usr/local/etc/rsyncd.secrets " . USER_SEARCH_IASK_LOG_PATH ."*"." backupuser@172.16.153.70::olympic_video/";
  pclose(popen("touch {$iask_filename} && chmod 0664 {$iask_filename} && $command",
        "r"));
    $command="/usr/bin/rsync -avu " . $iask_filename ." 172.16.6.198::vblog/";
    pclose(popen("touch {$iask_filename} && chmod 0664 {$iask_filename} && $command",
        "r"));
    $command="cp {$iask_filename} {$iask_filename_html}";
    pclose(popen($command, "r"));
    $command="/usr/bin/rsync -avu {$iask_filename_html} {$iask_filename} 10.68.1.30::v_blog_sina_com_cn/htdocs/ay_data/";
    pclose(popen($command, "r"));
    $command="/usr/bin/rsync -avu {$iask_filename_html} {$iask_filename} 10.68.1.71::v_blog_sina_com_cn/htdocs/ay_data/";
    pclose(popen($command, "r"));
  
  echo "[推送完成]\n";
}



echo "\n[完成]\n";


echo "程序于 " . date("Y-m-d H:i:s") . " 执行结束。\n\n";

function us_path_validate($path)
{
    $arraypath = split("\/+", $path);
    $tmppath = "";
    for ($i = 0; $i < count($arraypath); $i++)
    {
        if ("" == $arraypath[$i])
            continue;
        $tmppath .= (0 == $i ? "":"/") . $arraypath[$i];
        if (!is_dir($tmppath))
        {
            if (!mkdir($tmppath, 0777))
            {
                return false;
            }
        }
    }
    return true;
}

function us_writeFile($content, $filename, $dirpath)
{
    if (!us_path_validate($dirpath))
        exit();
    $fp = fopen($filename, "a+");
    if (!@fwrite($fp, $content . "\n"))
    {
        @fclose($fp);
        return false;
    }
    fclose($fp);
    return true;
}

function getContent($result,$i)
{
  /*
         if($i==0)
  {
    $str  = "VID\tUID\t日期\n";
          $str .= $result['vid'] . "\t";//视频总量
          $str .= $result['uid'] . "\t";//userid,用户UID
          $str .= date("Y-m-d",strtotime("-1 day")). "";
    return $str;
  }else{
  */
    $str  = $result['vid'] . "\t";//视频总量
          $str .= $result['uid'] . "\t";//userid,用户UID
          $str .= date("Y-m-d",strtotime("-1 day"))   . "";
    return $str;
   //    }
}
?>



function GetUnreadNum($uid)
{
  $cache = $this->_connectCache();
  $num = $cache->get(CACHE_SYSLOG."_new_".$uid);
  if($num===false)
  {
    $lastread = $cache->get(CACHE_SYSLOG."_read_".$uid);
    if($lastread===false) $lastread = time()-3*24*60*60;

    $db = $this->_connectDb(0);
    $sql = "select count(*) from syslog where uid='$uid' and time>FROM_UNIXTIME($lastread)";
    $st = $db->query($sql);
    $num = $st->fetchColumn()+0;
    $cache->set(CACHE_SYSLOG."_new_".$uid,$num);
  }
return $num;
}
MySQL客户端显示汉字乱码的解决

MySQL 服务端不加任何参数启动时,客户端可以默认正常显示汉字,如下面所示

    PHP code:


    D:mysql5>.binmysqld-max-nt.exe --console


    061106 20:35:21  InnoDB: Started; log sequence number 0 43655


    061106 20:35:22 [Note] .binmysqld-max-nt.exe: ready for connections.


    Version: '5.0.18-nt-max'  socket: ''  port: 3306  MySQL Community Edition (GPL)





    Microsoft Windows XP [版本 5.1.2600]


    (C) 版权所有 1985-2001 Microsoft Corp.





    C:Documents and SettingsAdministrator>cd d:mysql5bin





    C:Documents and SettingsAdministrator>d:





    D:mysql5bin>mysql -uroot


    Welcome to the MySQL monitor.  Commands end with ; or g.


    Your MySQL connection id is 1 to server version: 5.0.18-nt-max





    Type 'help;' or 'h' for help. Type 'c' to clear the buffer.





    mysql> use test


    Database changed


    mysql> SHOW VARIABLES LIKE 'character_set%';阅读全文
var_dump(get_class_methods(get_class($this->helloworld)));
// 设定update()方法的期望值为只被以字符串“something”为参数调用多次。
$observer->expects($this->any())
                 ->method('update')
                 ->with($this->equalTo('foo'))
                 ->will($this->returnValue('foos'));

$tmp = get_class($observer);
var_dump(get_class_methods($tmp));
由于在我们代码开发中,网网接口调用平凡,但是现实资源往往也不足,为此,在我们的测试过程中也出现了困难,一方面是时间的对等,另一方面来自于开发进度和先关准备资源的不充分,为此,phpunit库早已为我们准备好了,getMock函数来跳过或者模拟一些接口方法:
以下假设update函数是掉外网的一个接口,但是这个时候,外网的接口还没有写好,我们怎么办才好呢?那就getMock吧!

helloworld.php
<?php
class helloworld
{
  public function helloworld()
  {
    echo "hello the world!";
    
  }
  public function update($arra)
  {
    return $arra;
  }
  
  public function update_next_do($arra)
  {
    
    if($this->update($arra)=='foos')
    {
      return foos;
    }else{
      return false;
    }
    
  }
  
  
  
}
?>


自动生成helloworldTest.php


<?php

require_once 'helloworld.php';

require_once 'PHPUnit/Framework/TestCase.php';

/**
* helloworld test case.
*/
class helloworldTest extends PHPUnit_Framework_TestCase {
  
  /**
   * @var helloworld
   */
  private $helloworld;
  
  /**
   * Prepares the environment before running a test.
   */
  protected function setUp() {
    parent::setUp ();
    
    // TODO Auto-generated helloworldTest::setUp()
    

    $this->helloworld = new helloworld(/* parameters */);
  
  }
  
  /**
   * Cleans up the environment after running a test.
   */
  protected function tearDown() {
    // TODO Auto-generated helloworldTest::tearDown()
    

    $this->helloworld = null;
    
    parent::tearDown ();
  }
  
  /**
   * Constructs the test case.
   */
  public function __construct() {
    // TODO Auto-generated constructor
  }
  
  /**
   * Tests helloworld->helloworld()
   */
  public function testHelloworld() {
    // TODO Auto-generated helloworldTest->testHelloworld()
    //$this->markTestIncomplete ( "helloworld test not implemented" );
    
    //$this->helloworld->helloworld(/* parameters */);
    $this->assertTrue($this->helloworld->update('foo')=='foo'); ////假如接口真实存在直接可以调用,来什么返回什么
    $this->assertFalse($this->helloworld->update('foo')=='foos');
    //以下开始构造虚拟接口class helloworld   function update('foo') return foos;    
    $observer = $this->getMock('helloworld', array('update'));
    
        // 设定update()方法的期望值为只被以字符串“something”为参数调用一次。
        $observer->expects($this->any())
                 ->method('update')
                 ->with($this->equalTo('foo'))
                 ->will($this->returnValue('foos'));

        // 创建一个Subject对象并附上模拟的Observer对象。
        $this->assertTrue($observer->update('foo')=='foos');//虚拟接口变为:输入foo返回foos了
        $result = $observer->update('foo');//虚拟接口变为:输入foo返回foos了
        $this->assertTrue($this->helloworld->update_next_do($result)=="foos");//其余真实方法去调用(虚拟接口)以达到预期结果
    
        
    
  
  }
    

}



注意:在里面多次执行了getMock模拟函数update(),我们用了any(),如果我们用once()的话,在调用第二次这个虚拟函数肯定会出错,因为once()限定了,相关匹配如下:


表 11.1. 匹配器
匹配器  含义
PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount any()  返回一个匹配器,当它评估的方法被执行0或多次时匹配。
PHPUnit_Framework_MockObject_Matcher_InvokedCount never()  返回一个匹配器,当它评估的方法被从未被执行时匹配。
PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce atLeastOnce()  返回一个匹配器,当它评估的方法被至少执行一次时匹配。
PHPUnit_Framework_MockObject_Matcher_InvokedCount once()  返回一个匹配器,当它评估的方法恰好被执行一次时匹配。
PHPUnit_Framework_MockObject_Matcher_InvokedCount exactly(int $count)  返回一个匹配器,当它评估的方法正好被执行$count次时匹配。
PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex at(int $index)  返回一个匹配器,当它评估的方法在特定的$index上被调用时匹配。


关于:
            ->with($this->equalTo('foo'))
                 ->will($this->returnValue('foos'));
你要是传入多个变量的参数如(这样传):
                 ->with($this->equalTo('foo'),$this->equalTo('foo2'),$this->equalTo(array("one","two","three")))
                         ->will($this->returnValue(array("one return array","two  return array","three return array")));

这儿的with参数和will关系:
只有传入with的几个对应的参数,方能得到will的结果,但是你要是有引用什么的函数需要Mock的话:


    $friendObj = new Friend();
    $friendObj->getList($fuids,$uid,0,1,1000);
    var_dump($fuids); //你mock它,但是你传入的$fuids(假如一个数组),运行这儿是得不到的,注意啊!
    if(empty($fuids['uids']))
    {
      return 0;  
    }

为此:在需要通过mock的函数,请不要写为引用的格式,通过return 返回即可。
但你会说,要是有错误怎么办?
我建议通过php5的try catch 来实现,定义错误编号来解决这个问题,Tks.转帖请注明来自向东的博客:www.xiangdong.org/blog
                                    rewrite:xiangdong2    
                                                         2009-4-13






vim的配置文件在哪里
当我们使用Vim时, 你需要知道一系列的配置文件. 这些配置文件的位置依赖于Vim的安装位置和你所使用的操作系统.
通常, 有三个配置文件, 你是必须知道在哪里能找到的.
vimrc
这是Vim最主要的配置文件. 它有两个版本, 全局版本(global)和用户版本(personal)).
全局vimrc文件放在你安装Vim的目录中. 你可以打开vim, 在普通模式下输入下面的命令来找出这个目录的位置
:echo $VIM
结果应该是这样的:
Linux: /usr/share/vim/vimrc
Windows: c:\program files\vim\vimrc
用户版本的vimrc文件放在你的主目录下. 主目录的位置依赖于你的操作系统. Vim最初是为Unix及类Unix操作系统提供的, 所以用户版本的vimrc文件都是通过在文件名的最前面加一个点来设置成隐藏文件. 这是在类Unix上设置隐藏文件的方法, 但不适用于Microsoft Windows. 所以呢, vimrc文件与操作系统有关. 应该是这样的:
Linux: /home/kim/.vimrc
Windows: c:\documents and settings\kim\_vimrc
不管怎么改用户版的vimrc文件, 其中的设置内容都是覆盖在全局vimrc文件中设置的内容. 这就意味着你可以不需要去改变全局vimrc文件来进行配置Vim.
你可以在Vim的普通模式下输入下面的命令, 来找出Vim认为的你的系统的主目录的位置:
:echo $HOME
vimrc文件包含的是ex (vi的前身) 命令, 一条命令一行. 并且vimrc文件也是增加Vim配置信息的默认方式.
你的vimrc可以将其他的文件 (包含着配置信息) 作为外部资源. 在vimrc文件里, 你可用以source命令来实现:
    source /path/to/external/file
这样可以使你的vimrc文件保持整洁, 并且你的设置会更加的结构 (更多的关于如何保持vimrc文件整洁的内容请参考附录B) .

===============================

<h1 style="margin: 17pt 0cm 7.8pt"><span style="font-family: 宋体">用</span><span><span style="font-family: Calibri">VIM</span></span><span style="font-family: 宋体">做</span><span><span style="font-family: Calibri"><a href="javascript:;" target="_self" onclick="javascript:tagshow(event, 'PHP');"><u><strong>PHP</strong></u></a></span></span><span style="font-family: 宋体">开发环境</span></h1><p style="margin: 0cm 0cm 7.8pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">作者:廖宇雷</span></span></p><span></span><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">虽然</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">本质上只是一个编辑器。但只要配合一些适当的插件,</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">也能变成一个全功能的</span><span><span style="font-family: Calibri">IDE</span></span><span style="font-family: 宋体">。笔者使用</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">已经有挺长一段时间了,经过反复的试验,配置了一个高效的</span><span><span style="font-family: Calibri">PHP</span></span><span style="font-family: 宋体">开发环境,实为居家旅行、谋财害命、杀人越货必备之良品。</span></span></p><span></span><h2 style="margin: 13pt 0cm 7.8pt"><span style="font-family: 宋体"><a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%B0%B2%D7%B0');"><u><strong>安装</strong></u></a></span><span><span style="font-family: Cambria">vim</span></span></h2><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">鉴于大多数读者都是使用</span><span><span style="font-family: Calibri"><a href="javascript:;" target="_self" onclick="javascript:tagshow(event, 'Windows');"><u><strong>Windows</strong></u></a></span></span><span style="font-family: 宋体">环境,所以本文就以</span><span><span style="font-family: Calibri">Windows</span></span><span style="font-family: 宋体">作为运行环境。不过由于</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">出色的跨平台特性,配置文件只需简单修改就可以在</span><span><span style="font-family: Calibri"><a href="javascript:;" target="_self" onclick="javascript:tagshow(event, 'Linux');"><u><strong>Linux</strong></u></a></span></span><span style="font-family: 宋体">版本的</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">中使用。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">目前</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">的最新版本是</span><span><span style="font-family: Calibri">7.2</span></span><span style="font-family: 宋体">,如果没有特别原因建议安装最新的版本。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://www.vim.org/download.php#pc"><span style="font-size: small; font-family: Calibri">http://www.vim.org/download.php#pc</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><a href="ftp://ftp.vim.org/pub/vim/pc/gvim72.exe"><span style="color: #800080; font-family: Calibri">ftp://ftp.vim.org/pub/vim/pc/gvim72.exe</span></a></span></span></p><span></span><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">安装时</span><span class="MsoIntenseEmphasis"><span style="font-family: 宋体"><strong><span style="color: #4f81bd">不要装到带有空格、中文的目录中</span></strong></span></span><span style="font-family: 宋体">,其他保持默认即可。笔者的安装目录是</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">c:\apps\office\vim</span></span></span><span style="font-family: 宋体">,后文也以此为准。为了叙述方便,笔者用</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">$VIM</span></span></span><span></span><span style="font-family: 宋体">来表示</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">的安装目录。例如您的</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">安装在</span><span><span style="font-family: Calibri">d:\vim\</span></span><span style="font-family: 宋体">中,那</span><span><span style="font-family: Calibri">$VIM</span></span><span style="font-family: 宋体">就代表</span><span><span style="font-family: Calibri">d:\vim\</span></span><span style="font-family: 宋体">。</span></span></p><span></span><h2 style="margin: 13pt 0cm 7.8pt"><span style="font-family: 宋体">开始配置</span><span><span style="font-family: Cambria">vim</span></span></h2><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">我们对</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">的配置分为几个步骤。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-size: large"><span style="font-family: 宋体">修改</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">后自动生效</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">打开</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">$VIM</span></span></span><span></span><span style="font-family: 宋体">目录,可以看到其中有一个</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">_vimrc</span></span></span><span></span><span style="font-family: 宋体">文件,用</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">打开此文件,删除所有内容后,在最后插入两行:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; autoload _vimrc</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">autocmd! bufwritepost _vimrc source %</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">上述命令让我们通过</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">编辑</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">文件并保存时,可以自动载入</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">文件,使得我们对</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">的定制可以立即生效(无需重启</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">)。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-size: large"><span style="font-family: 宋体">使</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">中文化</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">在</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">顶部增加下列文本:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; disable VI's compatible mode..</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set nocompatible</span></span></p><span></span><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; set encoding=utf-8</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set fileencodings=ucs-bom,utf-8,gbk,default,latin1</span></span></p><span></span><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; use chinese help</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set helplang=cn</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">上述<a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%B4%FA%C2%EB');"><u><strong>代码</strong></u></a>的作用是禁用</span><span><span style="font-family: Calibri">vi</span></span><span style="font-family: 宋体">兼容模式(原始的</span><span><span style="font-family: Calibri">vi</span></span><span style="font-family: 宋体">功能太少了,没必要考虑兼容)、按照</span><span><span style="font-family: Calibri">utf-8</span></span><span style="font-family: 宋体">、</span><span><span style="font-family: Calibri">gbk</span></span><span style="font-family: 宋体">的顺序来检测文件编码,并设置帮助为中文。不过设置</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">set helplang=cn</span></span></span><span></span><span style="font-family: 宋体">并不能马上看到中文帮助,我们还得下载中文帮助文件。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://vimcdoc.sourceforge.net/"><span style="font-size: small; font-family: Calibri">http://vimcdoc.sourceforge.net/</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><span style="font-family: Calibri">vimcdoc-1.6.0.tar.gz</span></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt; text-align: left" class="MsoNormal" align="left"><span style="font-size: small"><span style="font-family: 宋体">得到中文帮助文件压缩包后,将压缩包中</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">doc</span></span></span><span></span><span style="font-family: 宋体">子目录的所有文件复制到</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">$VIM\vimfiles\doc</span></span></span><span></span><span style="font-family: 宋体">目录中。此时再输入</span><strong><span><span style="color: #ff0000">:help</span></span></strong><span></span><span style="font-family: 宋体">命令就可以看到中文帮助了。</span></span></p><p style="margin: 12pt 0cm 7.8pt; text-align: center" class="MsoNormal" align="center"><span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">中文帮助还是</span><span><span style="font-family: Calibri">7.1</span></span><span style="font-family: 宋体">版的,不过不影响我们使用。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-family: 宋体"><span style="font-size: large">设置字体</span></span></h3><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">选择</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">菜单的&ldquo;编辑&rdquo;</span><span><span style="font-family: Calibri">-&gt;</span></span><span style="font-family: 宋体">&ldquo;选择字体&rdquo;,就可以为</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">指定喜欢的显示字体了。笔者使用的是</span><span style="font-family: Calibri"><span>Consolas</span></span><span style="font-family: 宋体">字体,大小设置为</span><span><span style="font-family: Calibri">9pt</span></span><span style="font-family: 宋体">。这个设置显示代码非常漂亮,不过中文就有点变形了。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">设置好后,输入命令</span><strong><span><span style="color: #ff0000">:set guifont</span></span></strong><span></span><span style="font-family: 宋体">可以查看到当前的字体设置,将该设置写入</span><span style="font-family: Calibri"><span>_vimrc</span></span><span style="font-family: 宋体">文件。</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot;set gui options</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">if has(&quot;gui_running&quot;)</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small"><span style="color: #244061"><span style="font-family: Consolas"><span> </span>set guifont=Consolas:h9</span></span></span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">endif</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">上述代码中的</span><span><span style="font-family: Calibri">if &hellip; endif</span></span><span style="font-family: 宋体">是一个条件判断结构。指示只有当我们使用图形界面版的</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">时才设置字体。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-size: large"><span style="font-family: 宋体">为编辑</span><span><span style="font-family: Calibri">PHP</span></span><span style="font-family: 宋体">代码进行基本设置</span></span></h3><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">现在用</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">打开</span><span><span style="font-family: Calibri">.php</span></span><span style="font-family: 宋体">文件看上去是很难看的,别说代码高亮,连行号都没有显示。所以还要给</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">添加以下内容:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; Enable syntax highlight</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">syntax enable</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; Show line number</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set nu</span></span></p><span></span><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; show matching bracets</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set showmatch</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; Basic editing options</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set expandtab</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set shiftwidth=2</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">au FileType html,python,vim,javascript setl shiftwidth=2</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">au FileType html,python,vim,javascript setl tabstop=2</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">au FileType java,php setl shiftwidth=4</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">au FileType java,php setl tabstop=4</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set smarttab</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set lbr</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set tw=0</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot;Auto indent</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set ai</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; Smart indet</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set si</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; C-style indeting</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set cindent</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; Wrap lines</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set wrap</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">上述设置启用了格式化高亮、行号显示,以及括号匹配、自动缩进等编辑功能,对于大多数情况都可以获得理想的编辑体验。不过此时对</span><span><span style="font-family: Calibri">.php</span></span><span style="font-family: 宋体">文件的支持还不完善,需要下载专门的</span><span><span style="font-family: Calibri">php</span></span><span style="font-family: 宋体">插件。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://www.vim.org/scripts/script.php?script_id=1571"><span style="font-size: small; font-family: Calibri">http://www.vim.org/scripts/script.php?script_id=1571</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><span style="font-family: Calibri">php.tar.gz</span></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">将其中的</span><span><span style="font-family: Calibri">php.vim</span></span><span style="font-family: 宋体">复制到</span><span><span style="font-family: Calibri">$VIM\vimfiles\syntax</span></span><span style="font-family: 宋体">目录中即可。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-family: 宋体"><span style="font-size: large">设置喜欢的配色方案</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">默认的配色方案相信没几个人会喜欢,可以通过下面的网址查看配色方案并下载(有几百个哦)。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">下载网址:</span><span><a href="http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-c.html"><span style="font-family: Calibri">http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-c.html</span></a></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">这个网址列出了</span><span><span style="font-family: Calibri">300</span></span><span style="font-family: 宋体">多个配色方案以及实际的显示效果,点击方案名称即可下载到一个</span><span><span style="font-family: Calibri">.vim</span></span><span style="font-family: 宋体">文件。将该文件放入</span><span><span style="font-family: Calibri">$VIM\vimfiles\colors</span></span><span style="font-family: 宋体">目录,然后在</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">中添加:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; set color schema</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">colorscheme oceandeep</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">这两行代码需要加到</span><span style="font-family: Calibri"><span>if has(&quot;gui_running&quot;) &hellip; endif</span></span><span style="font-family: 宋体">代码块中,例如:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">if has(&quot;gui_running&quot;)</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small"><span style="color: #244061"><span style="font-family: Consolas"><span> </span>set guifont=Consolas:h9</span></span></span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small"><span style="color: #244061"><span style="font-family: Consolas"><span> </span>&quot; set color schema</span></span></span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small"><span style="color: #244061"><span style="font-family: Consolas"><span> </span>colorscheme oceandeep</span></span></span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">endif</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">设置后显示效果就漂亮多了</span><span><span style="font-family: Calibri">:-)</span></span></span><span><span style="font-size: small; font-family: Calibri">&shy;</span></span></p><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-family: 宋体"><span style="font-size: large">更多有用的编辑设置</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt; text-align: left" class="MsoNormal" align="left"><span style="font-size: small"><span style="font-family: 宋体">虽然不是专门针对编辑</span><span><span style="font-family: Calibri">.php</span></span><span style="font-family: 宋体">文件的设置,但这些选项可以让</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">更好用,所以建议加上:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; Sets how many lines of history VIM har to remember</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set history=400</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; Set to auto read when a file is changed from the outside</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set autoread</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; Have the mouse enabled all the time:</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set mouse=a</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; Do not redraw, when running macros.. lazyredraw</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set lz</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; set 7 lines to the curors - when moving vertical..</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set so=7</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; The commandbar is 2 high</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set cmdheight=2</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; Change buffer - without saving</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set hid</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; Ignore case when searching</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; set ignorecase</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set incsearch</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; Set magic on</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set magic</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; No sound on errors.</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set noerrorbells</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set novisualbell</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set t_vb=</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; How many tenths of a second to blink</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set mat=4</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; Highlight search things</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set hlsearch</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; Turn backup off</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set nobackup</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set nowb</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set noswapfile</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; smart backspace</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set backspace=start,indent,eol</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; switch buffers with Tab</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">map &lt;C-Tab&gt; :bn&lt;CR&gt;</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">map &lt;S-Tab&gt; :bp&lt;CR&gt;</span></span></p></div><span><span style="font-size: small; font-family: Calibri"> </span></span> <p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt; text-align: left" class="MsoNormal" align="left"><span style="font-size: small"><span style="font-family: 宋体">经过一番改造,我们的</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">已经可以很顺手的编辑</span><span><span style="font-family: Calibri">.php</span></span><span style="font-family: 宋体">文件了。不过要打造</span><span><span style="font-family: Calibri">php</span></span><span style="font-family: 宋体">开发环境还有很多<a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%B9%A4%D7%F7');"><u><strong>工作</strong></u></a>要做呢。</span></span></p><span></span><h2 style="margin: 13pt 0cm 7.8pt"><span style="font-family: 宋体">打造</span><span><span style="font-family: Cambria">PHP IDE</span></span></h2><p style="margin: 0cm 0cm 7.8pt" class="MsoNormal"></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span><span style="font-family: Calibri">IDE</span></span><span style="font-family: 宋体">左侧是目录导航,中间是编辑区域,而右侧则是<a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%B7%BD%B7%A8');"><u><strong>方法</strong></u></a>列表,用于在已经打开的文件中快速跳转。在编辑区域按下</span><span style="font-family: Calibri"><span>CTRL+X</span></span><span style="font-family: 宋体">键,还会显示已打开文件的列表。</span></span></p><p style="margin: 0cm 0cm 7.8pt" class="MsoNormal"></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">其他诸如自动补全、代码模板等功能,都应有尽有。看过了漂亮的截图,我们就来一步步打造</span><span><span style="font-family: Calibri">PHP IDE</span></span><span style="font-family: 宋体">吧。</span></span></p><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-size: large"><span style="font-family: 宋体">用</span><span><span style="font-family: Calibri">NERDTree</span></span><span style="font-family: 宋体">实现目录导航</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">在进行</span><span><span style="font-family: Calibri">PHP</span></span><span style="font-family: 宋体">应用开发时,同时编辑多个文件是很正常的事情。所以必须有一个方便的目录导航工具,以便在目录结构间快速切换,找到需要编辑的文件。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">中提供该类功能的插件很多,比较知名的有</span><span><span style="font-family: Calibri">project</span></span><span style="font-family: 宋体">、</span><span><span style="font-family: Calibri">winmanager</span></span><span style="font-family: 宋体">等。但笔者个人认为最好用的还是</span><span><span style="font-family: Calibri">The NERD Tree</span></span><span style="font-family: 宋体">这个插件。</span><span><span style="font-family: Calibri">NERDTree</span></span><span style="font-family: 宋体">不但可以显示完整的目录树结构,还可以将任何一个目录设置为根目录。并且提供了目录导航的书签功能,可谓非常方便。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://www.vim.org/scripts/script.php?script_id=1658"><span style="font-size: small; font-family: Calibri">http://www.vim.org/scripts/script.php?script_id=1658</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><span style="font-family: Calibri">NERD_tree.zip</span></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">解压缩时,要把压缩包中的目录结构完整的解压缩到</span><span><span style="font-family: Calibri">$VIM\vimfiles</span></span><span style="font-family: 宋体">目录中。完成后,应该分别找到</span><span style="font-family: Calibri"><span>$VIM\vimfiles\doc\NERD_tree.txt</span></span><span style="font-family: 宋体">文件和</span><span><span style="font-family: Calibri">$VIM\vimfiles\plugin\NERD_tree.vim</span></span><span style="font-family: 宋体">文件。然后在</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">中输入命令</span><strong><span><span style="color: #ff0000">:helptags $VIM\vimfiles\doc</span></span></strong><span style="font-family: 宋体">,将</span><span><span style="font-family: Calibri">NERDTree</span></span><span style="font-family: 宋体">的帮助文档添加到</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">中。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">最后在</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">添加如下内容:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; NERDTree</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">map &lt;F10&gt; :NERDTreeToggle&lt;CR&gt;</span></span></p></div><span style="font-size: small"><span style="font-family: 宋体">重启</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">后,按下</span><span><span style="font-family: Calibri">F10</span></span><span style="font-family: 宋体">键,就可以在左侧看到一个目录树了。在目录树窗口中按下</span><span><span style="font-family: Calibri">?</span></span><span style="font-family: 宋体">键可以查看详细的帮助信息。</span></span><span><span style="font-size: small; font-family: Calibri"> </span></span> <p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">最常用的操作键有:</span></span></p><p></p><table border="1" cellspacing="1" cellpadding="1" width="531" style="width: 531px; height: 179px"><tbody><tr><td>  <strong><span style="color: #365f91; font-family: 宋体">按键</span><span style="color: #365f91"></span></strong></td><td>  <strong><span style="color: #365f91; font-family: 宋体">作用</span><span style="color: #365f91"></span></strong></td></tr><tr><td>  <strong><span style="color: #365f91"><span style="font-family: Calibri">C</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">(大写</span><span style="color: #365f91"><span style="font-family: Calibri">C</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">键)</span><span style="color: #365f91"></span></strong></td><td>  <span style="color: #365f91; font-family: 宋体">将光标所在目录设置为根目录</span><span style="color: #365f91"></span></td></tr><tr><td>  <strong><span style="color: #365f91"><span style="font-family: Calibri">u</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">(小写</span><span style="color: #365f91"><span style="font-family: Calibri">u</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">键)</span><span style="color: #365f91"></span></strong></td><td>  <span style="color: #365f91; font-family: 宋体">转到上一级目录</span><span style="color: #365f91"></span></td></tr><tr><td>  <strong><span style="color: #365f91"><span style="font-family: Calibri">o</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">(小写</span><span style="color: #365f91"><span style="font-family: Calibri">o</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">键,不是&ldquo;零&rdquo;)</span><span style="color: #365f91"></span></strong></td><td>  <span style="color: #365f91; font-family: 宋体">展开(或折叠)光标所在目录的子目录。如果光标所在位置是一个文件,则在编辑窗口中打开该文件</span><span style="color: #365f91"></span></td></tr></tbody></table><span></span><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">此外在目录树窗口中输入目录</span><span style="color: #ff0000"><strong><span>:Bookmark</span></strong><strong><span style="font-family: 宋体">收藏名</span></strong></span><span style="font-family: 宋体">还可以将光标所在目录添加到收藏夹中。下次使用</span><span style="color: #ff0000"><strong><span>:BookmarkToRoot</span></strong><strong><span style="font-family: 宋体">收藏名</span></strong></span><span style="font-family: 宋体">可以直接转到该目录,并且以该目录作为根目录。更多命令可以参考</span><span><span style="font-family: Calibri">NERDTree</span></span><span style="font-family: 宋体">的帮助文档。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-size: large"><span style="font-family: 宋体">用</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">实现代码导航</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">解决了目录和文件导航问题,我们还要为代码之间的跳转提供辅助手段,</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">就是这样一个插件。</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">可以列出已打开文件中定义的类、函数、常量,甚至变量。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://www.vim.org/scripts/script.php?script_id=273"><span style="font-size: small; font-family: Calibri">http://www.vim.org/scripts/script.php?script_id=273</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><span style="font-family: Calibri">taglist_45.zip</span></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">压缩包需要完整解压缩到</span><span><span style="font-family: Calibri">$VIM\vimfiles</span></span><span style="font-family: 宋体">目录,并且用</span><strong><span><span style="color: #ff0000">:helptags $VIM\vimfiles\doc</span></span></strong><span></span><span style="font-family: 宋体">命令索引</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">插件的帮助文档。</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">插件需要依赖</span><span><span style="font-family: Calibri">ctags</span></span><span style="font-family: 宋体">程序才能工作。目前常用的</span><span><span style="font-family: Calibri">ctags</span></span><span style="font-family: 宋体">版本是</span><span><span style="font-family: Calibri">Exuberant Ctags</span></span><span style="font-family: 宋体">。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://ctags.sourceforge.net/"><span style="font-size: small; font-family: Calibri">http://ctags.sourceforge.net/</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><span style="font-family: Calibri">ec57w32.zip</span></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">只需要把压缩包中的</span><span><span style="font-family: Calibri">ctags.exe</span></span><span style="font-family: 宋体">复制到</span><span><span style="font-family: Calibri">$VIM\vim72</span></span><span style="font-family: 宋体">目录中即可。</span><span><span style="font-family: Calibri">ctags.exe</span></span><span style="font-family: 宋体">应该和</span><span><span style="font-family: Calibri">gvim.exe</span></span><span style="font-family: 宋体">在一个目录。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">最后在</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">添加下列内容,设置好</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">插件:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; =&gt; Plugin configuration</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">&quot; taglist</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Auto_Highlight_Tag = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Auto_Open = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Auto_Update = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Close_On_Select = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Compact_Format = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Display_Prototype = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Display_Tag_Scope = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Enable_Fold_Column = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Exit_OnlyWindow = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_File_Fold_Auto_Close = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_GainFocus_On_ToggleOpen = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Hightlight_Tag_On_BufEnter = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Inc_Winwidth = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Max_Submenu_Items = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Max_Tag_Length = 30</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Process_File_Always = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Show_Menu = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Show_One_File = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Sort_Type = &quot;order&quot;</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Use_Horiz_Window = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Use_Right_Window = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_WinWidth = 40</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let tlist_php_settings = 'php;c:class;i:interfaces;d:constant;f:function'</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">这里的设置是笔者个人习惯的设置,大家在熟悉</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">的具体设置之前可以先尝试一下。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">设置完成后,在编辑</span><span><span style="font-family: Calibri">.php</span></span></span></p>
为什么跟黑客帝国扯上关系呢,呵呵,这得从ASP.NET的封装讲起

在黑客帝国中所有的人他们全都自认为生活在一个有阳光,有绿色的世界中,实际上却是矩阵所构造的一种虚像与控制,他们不知道自已一直都在营养容器里面过着日子

就好像搞ASP.NET的人,他们跟泡在营养容器里的人一样,被MS构造出来的各种各样的类库包围着,他们从来不会想过这些类库是怎么来的(这些命名空间怎么来的),他们只关心怎么使用这些类库,这些命名空间,底层如何实现这些东西很少有人会去考虑。

他们实例化着MS提供的类库,调用着MS已经实现了的对像方法,但没有人见过这些类库的源码或是没有人知道这些类库及类库的方法是怎么实现的,就好像黑客帝国里面的人从来就没有试着睁开眼睛看到过外面的世界,他们只生活在被虚拟出来的环境中~

这两者何其相似

比如说调用AJAX,在asp.net中这现实AJAX何其简单,如果是之前没接触过别的WEB编程语言的直接来用ASP.net,他可能就不知道原来 WEB要实现AJAX要通过JS,要通过XML,要通过xmlhttp,他只会觉得,WEB原本就是可以这样子的,他的思维给MS虚拟构造出来的假象给蒙蔽了。

就好像在黑客帝国里生活在矩阵电脑里的人都能一跳跳个十几米几十米的,他们可能会觉得很正常,但是现实中不是这样子的,现实中那不是正常的。

再举个例子,树状菜单,动态载入的

在PHP(应该说是常规中才对)中我们要实现树状菜单

假设在不知道有XLoadTree的情况下,我们可能要一砖一瓦的搞起,这样,我们了解非常深,知道每一次点击会触发什么事件,隐藏了什么,又显示了什么,又传输了什么,每个事件的触发都是我们自定义的

在后来知道了有XLoadTree类库的情况下,我们非常容易的就可以实现树状菜单,而且通过查看源码我们也可以很容易的了解到JS实现这些功能的过程和原理。

但是在asp.net中,实现这一切多么的简单,直接从控件栏里面拖TreeView过来就行了,你需要了解JS吗?不需要,尽管最终在浏览器端实现这一切的是用JS,但是,你不需要了解JS,你只需要知道treeview这个控件怎么用就行了,也就是说,你不会知道底层是怎么回事,最终的JS是怎么实现的。

引言
    达尔文在进化论中写道“物竞天择,适者生存”,达老的观点是:这个世界上能够生存下
来的物种,不是身体最强壮的,也不是智商最高的,而是对环境适应能力最强的。很久以前,
体型庞大的恐龙没有生存下来,嗝屁了;当年和人类智商一样高的猿猴,没进化成功,堕落
了;只有人类,从与猿猴一样的造型不断的进化至今,在这个过程中人类不断的去学习,学
会取火、制作工具、直立行走……演化至今。不断的学习新的技术,适应环境的变化,并改
造环境甚至创造环境,成就了人类的今天。
在这个竞争日益激烈的社会,在IT 行业这个飞速发展的领域,做为程序员的我们,能否
适应这个环境,甚至成为这个环境的主宰,学习力是我们得以生存和更好的生活的关键。而
计算机技术日新月异的变化,也要求我们程序员要不断的学习,不断的充实自己。时代光华
曾经有一句口号:“知识改变命运学习成就未来”,此话有道啊。很多企业招聘时,也都特别
对新人提出一个要求:具备良好的学习能力。
搞技术是一个很累的事情,很多程序员都这样感慨,初学时觉得不会的东西太多,做了
几年后还是感觉学无止境,即便是一个N 年的老鸟,也还要不断充电,否则没两年恐怕就没
法在这个圈子里面混了。很多朋友都在疲于奔命,哀号学习之苦。
有一个业界广泛流传的故事:一富婆(估计是体重200 斤以上、脸上的粉刮下来可以包
二三十个饺子、说话眼睛看天花板的老女人)去夜总会找乐子,殷勤的老板娘挑了几个帅小
伙,富婆不满意;又挑了几个壮小伙,富婆还不满意;老板娘问富婆到底想要什么样的啊,
富婆说“体力好、精力旺、能加班、能熬夜、随叫随到、吃苦耐劳”,老板娘一下乐了……张
口大喊:“机房里搞程序,出来接客!”
可见程序员平日的工作恐怕就已经很繁忙了……不过就像我一直坚定的认为程序员的形
象不应该是“工作狂人、缺少情趣、蓬头垢面、衣着杂乱、身有异味”一样,我们要管理好
我们的时间,时间就像海绵里的水,马克思告诉俺们,要挤就一定会有的,工作可以满足我
们的现在,学习才可以成就我们的未来。本文旨在根据笔者的经验,给亲爱的读者们一点点
学习的建议。
1 学习的目标管理
怎么学习是个方法问题,我们稍后再谈,但是在此之前想要搞明白我们要学习什么,这
是个目标问题。很多程序员没有明确的目标,不知道自己最终要的是一种什么样的生活,也
不清楚自己三年以后五年以后十年以后的人生目标是什么,甚至连三个月半年或是一年内的
短期目标也没有,那自然也就无从谈起明确的学习目标。
曾经看过这样一个故事,在美国的贫民区,有一个十几岁的小孩,一直梦想着有一天可
以成为美国总统,于是他开始构思:要成为总统,就必须先做州长;要做州长,就要有钱去
拉选票;要想有钱,就得娶一富家千金;要娶千金,做影坛明星最合适不过;为做明星又得
有魅力,于是他开始学习健美,亲爱的看官,您觉得这个小孩的梦想会实现吗?您是不是认
为这就是传说中的“扯犊子”,美国式白日梦……
不过,这是一个真实的故事,后来,这个小孩果然非池中之物,练习健美得了N 个国内
国际的健美大赛冠军,甚至还出了几本健美健身类的书;后来打入好莱坞拍了很多部很牛X
的电影成了国际明星;坚持多年的感情终于娶到了富家千金,这个千金大有来头,就是被枪
杀的美国总统肯尼迪的侄女;再后来息影从政,如愿当选了美国加州州长。现在,他就差没
把小布什赶出白宫了,是的,相信您应该也猜到了,他就是--阿诺德·施瓦辛格。
这个真实的故事告诉我们,只要有梦想,做好规划,奋力去拼搏,一切皆有可能(此处
为支持国货,插播李宁公司广告)。
个人建议,如果您是一个新丁,刚入行的几年,多学技术;如果您已经变成一个大手,
那么可以学学管理或者市场方面的知识。新手最重要的是技术的累积,毕竟想成为项目经理
或是技术总监等大鸟,第一个前提还是技术要过硬,否则无法服众,技术永远都是程序员的
第一看家本领;在中国这个环境,很少有程序员能做到35 岁,一般到了30 岁左右至少要前
进一步——做个主管,这时可能更多需要的是带领技术团队的能力、与客户沟通的能力等等,
如果想拉大旗自己干,则更是如此。
但是,诚如施瓦辛格的故事一样,我们要有一个规划,至少要确定自己的长期目标和短
期目标,并列出计划,努力行动。比如,我们制订出三年内的目标,假设您是一个新手,您
是要强化自己的英文能力,学习英语;或是要增加学历的厚度,读个研究生;还是要狠K 一
项新的技能,比如PHP……总之,这三年内我们要定一下学习的目标,可能第一年我们达到
阅读计算机英语完全没有问题,第二年我们要K 下来PHP,在这三年中我们要努力考取研究
生并读完获得学历。总之,我们要有一个计划,然后进行分解,如果我们要搞定英语阅读能
力,我们怎么办?12 个月、48 周、365 天,每个月达到什么程度,每周完成多少任务,每天
做哪些学习(假设是每天背下来15 个英文单词,阅读千字左右的文档3 篇)。那么,我们的
目标就落实了,计划就落地了,目标才会随着每天每周每月的过去而逐步实现。
要立长志,不要常立志。随波逐流,撞大运,听天命,永远成为不了高手,毕竟天上没
那么多馅饼掉下来,就算掉下来也未必正好砸咱脑袋上不是吗。
2 学习的时间管理
程序员自己的时间,似乎少的可怜,有时我们要加班加点,有时我们要封闭开发,还有
时客户请吃饭我们喝大了……所以很多程序员说,忙得连谈女朋友的时间都没有,可是,生
活不会因为这些借口而宽容我们。房价依然会高到离谱,女朋友依然会抱怨没人陪伴,通货
膨胀也不会就此停止……生活依然要继续,我们不能停下脚步,不能停下学习进步的脚步。
对此,我有两个看法,第一个看法,让我们来看一个小故事吧——
一位管理专家在一群学生面前,拿出一个广口瓶放在桌上,同时拿出了几十个拳头大小
的石块,一个个放进瓶中,当石块放满整个瓶子后,专家问:“瓶子装满了吗?”
同学们回答:“装满了!”
“真的吗?”专家再拿出一桶碎石,取出一把倒入瓶中,再把瓶子摇一摇,让碎石填入
石块中的缝隙,“瓶子装满了吗?”。
有位同学回答:“也许没有”。
“很好!”专家又拿出一桶沙子倒进瓶中,充满了石块所留下的空间,然后再问:“瓶子
装满了吗?”
全班大声回应:“没有!”
“非常好!”这次专家拿出一壶水,注入瓶中,直到水满至瓶口。专家看着全班同学问道:
“这个展示的重点是什么?”
一位勇敢的学生举手说:“无论你的日程排得有多满,只要尽全力安排,还是可以安排很
多事情!”
专家回答:“错!”,重点是——
“如果你不先把石块放进去,就永远也放不进去了!”
在生活中大家有没有发现,我们很多很多的时间浪费在了无关紧要的小事上,而我们的
目标是重要的紧急的事情,可惜,它却没有获得最多的时间去处理。大事法则告诉我们,做
事要有条理,不要抱怨没有时间,先看看,要做的事情是不是每一件都是重要的或者紧急的,
不要再让琐碎的小事浪费自己的生命了。
我的第二个看法:学会化零为整,尽量把时间用在重要和紧急的事情上,但是我们仍然
会有大把时间是零散的。
我曾经听过一个讲座,叫《做自己想做的人》,主讲人讲了一个自己的时间管理的方法,
就是:随时随地都可以休息。牛啊,他可以把所有的时间有效利用,虽然他也很忙,但是如
果今天公司组织出去卡拉OK,他也可以在包厢嘈杂的声音中睡着(我当年也练成了一个本
领,就是可以在公车或地铁上抓住扶手,头靠在胳膊上,三十秒入睡)。即便有一点小小的时
间,那怕在等车,那怕在等人,都可以掏出来一本书看,这就时间管理的观念。
在时间管理上有三个“B”——Bathe 洗澡、Bus 坐车、Bed 睡觉
有多少人,在洗澡的时候在发呆在胡思乱想;有多少人,在坐车的时候在东张西望;有
多少人,在睡觉前在数绵羊或者是大脑一片空白……那么,把这些时间好好利用起来吧,我
们可不可以在洗澡的时候想想今天写的一段代码为什么执行报错;我们可不可以在清晨坐车
的时候看看技术书籍或者计划一下一天的工作;我们可不可以在睡觉前想一下今天都做了什
么事情有没有什么经验教训要总结……如果这些零散的时间我们都能利用起来,积少成多,
您会发现,有一天,会改变我们的生活。
3 学习的方法问题
凡事要讲究方法,才能事半功倍。愚公移山固然可贵,可惜要“子子孙孙无穷尽也”,这
玩艺咱来不了……
就比如今天一个兄弟说想要学习Linux,问我什么方法最好,那么我可以给出一个选择:
首选,找个Linux 高手当师傅来带你入门直至出徒;次选,参加一个Linux 培训班和老师学
习;次次选,买一本Linux 书边看边实践;次次次选,在网上搜索资料自学。
可能各位看官都觉得通过网络学习(比如通过论坛等获取知识的途经)是很好的方法,
诚然这是方法之一,但是如果想最快最有效的学习Linux,对于一个初学者,首选当然是有师
傅来指导,有过来人讲述亲身经验,可以让他走过的弯路我们不再走,他的经验教训我们拿
来就用,这是最快的一种方法;如果不具备这样的机会,条件允许可以参加个培训班,授课
的老师会总结自己的体会和经验,系统化的把知识讲给我们听,这种学习速度也比较快;如
果资金有困难,那么强烈建议至少要买一本书,毕竟好的书是作者的心得体会的总结,看一
本书可以让我们学习更条理化;当然如果您真是一毛不拔,书都不想买,只是想通过网络学
习,那么我只能说这并不适合初学者,因为网上知识太乱太杂,老鸟去获取是一种很好的手
段,可是新手往往无法分辨,效果自然惨不忍睹。这就是方法的问题。
再比如,假设看官您是刚刚升任公司项目部经理,首先面临的一个最大的问题就是,如
何在竞标中向客户做演示讲解,这对于平时埋头做技术沉默寡言的您是否是个挑战?没办法
了,回家对着四面墙狂练吧,但是练习也要有方法,一方面可以从网上找些产品演示或演讲
技巧的视频教程或者买相关的书籍来看,或者向前辈讨教下,这是必要的;另一方面自己练
习时,要有方法,比如可以使用电脑的录音功能录制下来自己练习的过程,回过头来,自己
去听自己的讲解是否满意,然后总结什么地方有问题,依次循环往复,相信会受益最多效果
最好进步最快,这就是方法了。
不为失败找借口,要为成功找方法,方法是让我们的时间更有效的重要手段,比如笔者
每天晚上都会总结好第二天要做的事项,一个一个列在日程表中,第二天,做完一个划掉一
个,虽然同样是做事情,但是这种成就感是让人做事非常愉快的,而且事情也不容易遗漏,
这也是一种方法。
“黑猫白猫抓到耗子就是好猫”,可是我们总不能让一只猫搞了一个月才抓到耗子,时间
不等人,找到适合自己的学习方法,是达成目标的关键。我曾经认识一位学习Linux 的新人,
成天捧着一本《Linux 命令大全》疯狂的看书敲命令,我真不忍心打击他,因为Linux 现在至
少有两三千个命令,每个命令平均有二三十个选项,要敲到什么时候呢……何况这些命令和
选项,我使用Linux 七年了,感觉也不过用到其中十分之一都不到,常用的并没有那么多……
可惜啊,时间就这样别浪费了,这就是方法的错误。
本文到此,也该结束了,本文名为《学习的革命》,实则是作者作为夜色版块标题党一员
的通病,内容没有那么“革命”,鲁迅先生讲我们要革了谁的命,我想,作为程序员来讲,先
革了自己的命吧,如果过去您在懒惰您在懈怠,如果过去您在为学习找借口想托词,先革了
自己的命,改变,从新来过。
如果还不清楚要怎么开始,那么给您个建议,先搞明白这三个事情——
为何学习
学习什么
怎么学习

我坚信任何一个人都渴望成功,任何一个人都期望过自己想过的生活,不付出辛勤的汗
水,这是不可能实现的……天上的馅饼,如同程序员中的美女一样,总是很少很少的,与其
白日发梦,不如踏踏实实的学习和工作,不是吗?毛主席教导过我们,好好学习,才能天天
向上。
莫等闲,白了少年头,空悲切,与君共勉。
D:\Program Files\Zend\Zend Studio for Eclipse - 6.0.1\plugins\com.zend.php.phpunit_6.0.1.v20080601\resources\library\PHPUnit\Samples\Money

object getMock($className, [array $methods, [array $arguments, [string $mockClassName, [boolean $callOriginalConstructor, [boolean $callOriginalClone, [boolean $callAutoload]]]]]])  
       返回一个用于指定的$className的模拟对象(见第 11 章)。缺省地,给定类的所有方法都是模拟的。当提供第二个(可选)参数时,只有名字出现在数组中的方法是模拟的。第三个(可选)参数持有参数数组,用于传入模拟对象的构造函数。第四个(可选)参数可用于为模拟对象指定类名。第五个(可选)参数可用于禁用对原始对象的__construct()方法的调用。第六个(可选)参数可用于禁用对原始对象的__clone()方法的调用。第七个(可选)参数可用于在模拟对象创建期间禁用__autoload()。
    <?php
    
require_once 'PHPUnit/Framework/TestCase.php';
    
    /**
    * 测试从账户中取现
    */
    class AccountHolderWithdrawsCashSpec extends PHPUnit_Extensions_Story_TestCase
    {
       /**
        * @scenario
        * 场景 1: 帐户有足够的资金
        */
       function AccountHasSufficientFunds()
       {
           $this->given('帐户余额为', 100)
                    ->and('有效的银行卡')
                    ->and('提款机有足够现金')
                ->when('帐户持有人要求取款', 20)
                ->then('提款机应该分发', 20)
                    ->and('帐户余额应该为', 80)
                    ->and('应该退还银行卡');
       }
    
       // ...
    
       /**
        * 处理 given
        */
       function runGiven(&$world, $action, $arguments)
       {
           switch($action)
           {
           case '帐户余额为':
               // 由于 Account 对象必须属于一个 AccountHolder(帐户持有人),
               // 因此需要构造一个 AccountHolder 对象
               $account_holder = new AccountHolder();
               $account_holder->name = 'tester';
               // 创建一个 Account 对象,并设置余额为 $arguments[0]
               $world['account'] = new Account($account_holder);
               $world['account']->balance = $arguments[0];
               break;
    
           case '有效的银行卡':
               $card = new CreditCard($world['account']);
               $card->valid = true;
               $world['card'] = $card;
               break;
    
           case '提款机有足够现金':
               // 确保 ATM 的余额大于帐户余额
               $world['atm'] = new ATM();
               $world['atm']->balance = $world['account']->balance + 1;
               break;
    
           default:
               {
                   return $this->notImplemented($action);
               }
           }
       }
    
       /**
        * 处理 when
        */
       function runWhen(&$world, $action, $arguments)
       {
           /**
            * 在 when 中调用对象的业务方法
            */
           switch($action)
           {
           case '帐户持有人要求取款':
               // 从指定提款机使用指定银行卡取出现金
               $world['account']->drawingByATM($world['atm'], $world['card'], $arguments[0]);
               break;
    
           default:
               return $this->notImplemented($action);
           }
       }
    
       /**
        * 处理 then
        */
       function runThen(&$world, $action, $arguments)
       {
           /**
            * 在 then 中验证业务对象的状态是否符合标准
            */
           switch($action)
           {
           case '提款机应该分发':
               // 验证提款机的余额
               $this->assertEquals($arguments[0], $world['atm']->last_dispense, "提款机应该分发 {$arguments[0]}");
               break;
    
           case '帐户余额应该为':
               // 验证帐户余额
              $this->assertEquals($arguments[0], $world['account']->balance, "帐户余额应该为 {$arguments[0]}");
              break;
  
          case '应该退还银行卡':
              // 验证银行卡没有被 ATM 锁定
              $this->assertTrue($world['card']->isCheckedOut(), '应该退还银行卡');
              break;
  
          default:
              return $this->notImplemented($action);
          }
      }
  }
?>
指定端口进行拷贝:

实践中为了稳妥:



* 复制目录:
        * 命令格式:
                scp -r local_folder remote_username@remote_ip:remote_folder
                或者
                scp -r local_folder remote_ip:remote_folder
                第1个指定了用户名,命令执行后需要再输入密码;
                第2个没有指定用户名,命令执行后需要输入用户名和密码;
        * 例子:
                scp -r /home/space/music/ root@www.cumt.edu.cn:/home/root/others/
                scp -r /home/space/music/ www.cumt.edu.cn:/home/root/others/
                上面 命令 将 本地 music 目录 复制 到 远程 others 目录下,即复制后有 远程 有 ../others/music/ 目录

======
从 远程 复制到 本地
======
从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可;
例如:
        scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3
        scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/
最简单的应用如下 :
scp 本地用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2
[ 本地用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .
可能有用的几个参数 :
-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .
-C 使能压缩选项 .
-P 选择端口 . 注意 -p 已经被 rcp 使用 .
-4 强行使用 IPV4 地址 .
-6 强行使用 IPV6 地址 .
注意两点:
1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:
#scp -p 4588 remote@www.abc.com:/usr/local/sin.sh /home/administrator
2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。 [/code]
除了ftp方式复制文件外,大多数人经常会用到scp这个命令,但是很多主机出于安全考虑,更改了ssh默认的连接端口,如改成5198,这时就要用到-P(P是大写)选项,来制定端口
推文件:scp -P 5198 /dir/files user@host:/dir/files
拷贝文件:scp -P 5198 user@host:/dir/files /dir/files
拷贝目录:
scp -P36000  -r  /root/tmp  root@172.25.39.108:/usr/local/tads/htdocs/

拷贝单个文件:
$ scp -P 3000 trial_a.jpg  404@myip:/home/404
  404@myip's password:
  trial_a.jpg                                   100%   89KB  88.8KB/s   00:00  


下载远程文档或目录到本地,假如想上传或想下载目录,最好的办法是采用tar压缩一下,是最明智的选择.
scp user@host:/path/file /localpath 假如拷目录就 scp -r user@host:/dirpath /localpath
上传本地目录或文档到远程
或 scp localfile user@host:/dirpath
scp -r localdir user@host:/dirpath
sftp 是个交互式文档传输程式。他类似于 ftp, 但他进行加密传输,比FTP有更高的安全性。下边就简单介绍一下如何远程连接主机,进行文档的上传和下载,连同一些相关操作。
举例,如远程主机的 IP 是 202.206.64.33或是域名
www.hebust.edu.cn
,用户名是  fyt ,在命令行模式下:sftp fyt@202.206.64.33或  fyt@
www.hebust.edu.cn
。回车提示输入密码。进入提示符
sftp>
假如登陆远程机器不是为了上传下载文档,而是要修改远程主机上的某些文档。能够
ssh  fyt@202.206.64.33 (其实sftp就是ssh 的一个程式。)
sftp> get /var/www/fuyatao/index.php  /home/fuyatao/
_ x `/x9d2dGuest这条语句将从远程主机的  /var/www/fuyatao/目录下将 index.php 下载到本地  /home/fuyatao/目录下。
sftp> put /home/fuyatao/downloads/Linuxgl.pdf /var/www/fuyatao/挨踢圈 -- 技术·资讯·教育·服务·社区;z m9r O&S U6H
这条语句将把本地 /home/fuyatao/downloads/目录下的 linuxgl.pdf文档上传至远程主机/var/www/fuyatao/ 目录下。
您假如不知道远程主机的目录是什么样, pwd命令能够帮您查询远程主机的当前路径。查询本机当前工作目录 lpwd.
改变路径能够用cd ,改变本机路径能够用 lcd;
ls rm rmdir mkdir 这些命令都能够使用。同理调用本机都是加 l , 即 lls lrm.
要离开sftp,用exit 或quit、 bye 均可。周详情况能够查阅 man  sftp.
假如觉得在命令行模式下不太方便,能够 sudo apt-get install gftp。在图像界面下操作就简便多了
sftp -oport=2230 dmtsai@192.168.1.12






<?php
error_reporting(E_ALL);
define ('DEF_MC_PREFIX', "app10");      //MC的前缀
include_once '../libs/sinainterface.class.php';
//include_once '../../libs/applogger.class.php';
require_once '../libs/mysqlpdo.class.php';
require_once '../config/db_config1.php';
require_once '../config/commstr1.php';
$test3 = new orderlist(0);
$test3->set_memcache_values(1);
print_r($test3->get_memcache_values(1));
?>

<?php
class OrderList
{
  private $uid;//自己的uid号,取好友要用到
  private $obj_mc;
  private $mcop = true;//假如有了memcache就是true,否则没有true,不写缓存
  public $int_all_order_count;
  private $int_friend_order_count;
  private $return_param;
    function __construct($uid)
  {

    $this->uid = $uid;
    $this->s_id = APP_SID;
    $this->obj_db = new mysqlpdo ( );
    if ($this->mcop) {
      $re = $this->ConnectMc ( $mobj );
      if ($re) {
        $this->obj_mc = $mobj;
      } else {
        $this->mcop = false;
      }
    }
  }

    public function  get_memcache_values($int_page)
    {
      if ($this->mcop)
    {

            $arr_subject = $this->obj_mc->get ( DEF_MC_PREFIX . APP_SID . '_' . $int_page );
      $arr_acount  = $this->obj_mc->get(DEF_MC_PREFIX . "_c" .APP_SID);
      if ($arr_subject&&$arr_acount)
      {
        $this->int_all_order_count = $arr_acount ;
        return $arr_subject;
      }

    }else{

            //取数据库和调用set_memcache_values()进行赋值
            //$this->obj_mc->set(DEF_MC_PREFIX . "_c".APP_SID, $arr_count [0] ['p_count'] , 0 ,60*60*12); //对memcache赋值。

        }
    }
    public function set_memcache_values($int_page)
    {
            $arr_subject=array("uid" => "1212", "content" => "this ia a test by xiangdong...");
            if($this->mcop)
      {  //把循环出来的$arr_subject放入MC变量(MC有规则的含$i,以后便于取)
        $this->obj_mc->set ( DEF_MC_PREFIX . APP_SID . '_' . $int_page, $arr_subject, 0 ,60 * 60 * 12 );
      }
            return 1;

    }

    public function ConnectMc(&$mcobj)
    {
    global $MC_CONFIG;
    echo $MC_CONFIG;
    $server = explode ( ":", $MC_CONFIG );
    $mcobj = new Memcache ( );
    $re = $mcobj->connect ( $server [0], $server [1] );
    if (! $re)
      return 0;
    return 1;
  }
}
?>

<?php


?>

参考:http://blog.csdn.net/chinalinuxzend/archive/2007/10/07/1813599.aspx
阅读全文
分页: 237/272 第一页 上页 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 下页 最后页 [ 显示模式: 摘要 | 列表 ]