欢迎大家光临我的个人官方网站。在dlf5.net工作室没上线之前,我把dlf5.net域名跳转到dlf5.com个人博客。

发表于 winds | 5 条评论

git与github在ubuntu下的使用

git与github在ubuntu下的使用

最近开始使用git对kohana3的文档做一些补充的工作,使用了git 和 github ,从了解到使用,还是有一点距离,下面是总结的一些方法。

1、Git的安装

我使用了ubuntu 10.04 ,默认情况下,ubuntu 中并没有安装,所以首先需要在系统中进行 git 的安装。

sudo apt-get install git-core

安装完成后,在终端中输入 git 就可以看到相关的命令了。如果只是需要使用git来管理本地的代码,那么现在就可以使用了。如果需要和github上的项目结合,还需要做其他的一些操作。

安装后的效果

2、github帐号的申请

如果只是需要将github上感兴趣的代码拷贝到本地,自己进行修改使用,而不打算共享发布的话,其实不申请帐号也没有关系,只需要 git clone 代码到本地就可以了。本文对这种方法不做讨论,毕竟使用 github 就是为了开源的目的。

首先去 github.com 上注册一个帐号,具体的注册流程就不赘述了。

3、在本地建立一个文件夹,然后做一些全局变量的初始化

git config –global user.name = “用户名或者用户ID”

git config –global user.email = “邮箱”

这两个选项会在以后的使用过程中自动添加到代码中。

4、创建验证用的公钥

这个是比较复杂和困扰大多数人的地方,因为 git 是通过 ssh 的方式访问资源库的,所以需要在本地创建验证用的文件。

使用命令:ssh-keygen -C ‘you email address@gmail.com’ -t rsa

会在用户目录 ~/.ssh/ 下建立相应的密钥文件

可以使用 ssh -v git@github.com 命令来测试链接是否畅通

5、上传公钥

在 github.com 的界面中 选择右上角的 Account Settings,然后选择 SSH Public Keys ,选择新加。

Title 可以随便命名,Key 的内容拷贝自 ~/.ssh/id_rsa.pub 中的内容,完成后,可以再使用 ssh -v git@github.com 进行测试。看到下面的信息表示验证成功。

进行到这里,我们也可以利用github来管理我们的项目和参与开源工作了,大体上使用git分为三种方式。

管理自己的项目

这种情况是自己在本地有一些代码,需要利用 github 来管理自己的项目,可以按照下面的步骤进行。

1、建立仓库

在需要建立项目的文件夹中,使用 git init 进行仓库的建立。完成后,可以看到文件家中多了一个 .git 隐藏目录。

2、添加文件

使用 git add . 来进行初始文件的添加。这里 . 表示将文件夹下所有的文件都添加进去,我们也可以指定文件进行添加。

3、提交文件

使用 git -m commit  -m ‘comment’ 提交,可以将编辑的内容进行提交。

通过 git show 可以看到项目的一些状态。

这是代码已经在本地管理了,但是本地管理完全体现不出git的优势。

利用github托管自己的项目

1、如果需要将自己的项目托管在github.com上,首先需要创建项目。在 Dashboard 中选择 Create New Repository,填入相关信息后,项目就创建成功了。

2、之后,会有一个如何上传的提示,如下图已经很详细了。

Fork别人的项目

前面提到过,如果只是下载使用别人的代码,通过 git clone 就可以了,当然clone的前提是项目必须是public的,私有的项目是没办法的。如果需要参与,可以通过fork,然后合并的方式。

1、首先需要去自己感兴趣的项目中进行Fork,fork出自己的一份分支来。fork之后,一般可以看到一个ssh访问的地址。例如:git@github.com:cocowool/userguide.git

2、复制代码

使用 git clone git@github.com:cocowool/userguide.git userguide 可以将代码复制到本地的 userguide 文件夹中

3、进行自己的修改,完成后请求原作者合并

 

git pull person master

 

下面是一些比较有用的命令的介绍:

 

# 创建一个版本库
git init
# 每次修改好了后,可以先将修改存入stage(快照/索引)中
git add <modified files>
# 修改了大量文件则使用下面这个命令批量存入
git add .
# 使用commit将快照/索引中的内容提交到版本库中
git commit -m "msg"
# 也可以将git add与git commit用一个指令完成
git commit -a -m "msg"
# 将本地的git档案与github(远程)上的同步
git push
# 将github(远程)的git档案与本地的同步(即更新本地端的repo)
git pull
# 例如,pull指令其实包含了fetch(將变更复制回來)以及merge(合并)操作
git pull git://github.com/tom/test.git

# 另外版本控制系統的branch功能也很有意思,若同时修改bug,又要加入新功能,可以fork出一个branch:一个专门修bug,一个专门加入新功能,等到稳定后再merge合并
git branch bug_fix # 建立branch,名为bug_fix
git checkout bug_fix # 切换到bug_fix
git checkout master #切换到主要的repo
git merge bug_fix #把bug_fix这个branch和现在的branch合并

# 若有remote的branch,想要查看并checkout
git branch -r # 查看远程branch
git checkout -b bug_fix_local bug_fix_remote #把本地端切换为远程的bug_fix_remote branch并命名为bug_fix_local

# 还有其它可以查看repo状态的工具
git log #可以查看每次commit的改变
git diff #可以查看最近一次改变的內容,加上参数可以看其它的改变并互相比较
git show #可以看某次的变更

# 若想知道目前工作树的状态,可以輸入
git status

http://www.cnblogs.com/cocowool/archive/2010/10/19/1855616.html
发表在 精彩转载 | 一条评论

Ubuntu 11.04下安装极点五笔输入法[转]

刚刚安装好了 Ubuntu 11.04,但是没有五笔的日子实在不好过,在网上一搜,居然有高手想到引用极点五笔的字典实现可以同时打拼音和五笔,下面看如何操作:

ibus下用法
在终端中执行如下操作
sudo wget http://www.xiit.cn/wp-content/uploads/2011/03/vissible-ibus.tar.gz
tar -zxvf vissible-ibus.tar.gz
sudo cp vissible.db /usr/share/ibus-table/tables
sudo cp vissible.gif /usr/share/ibus-table/icons
完成后,在点任务栏中那个键盘小图标,在下拉菜单选“重新重启” 重启ibus输入法,然后再点一下键盘小图标并在下拉菜单中选“首选项”,然后在弹出的窗口中点击“输入法”选项卡,接着点“选择输入法”>”汉语”,然后点”添加” 极点五笔,OK!

发表在 精彩转载 | 标签为 , , | 留下评论

mysql的FIND_IN_SET函数意义及使用方法

mysql的 find_in_set函数使用方法

很多时候我们在设计数据库时有这种情况,比如:

有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 …..11,12,13等等

现在有篇文章他既是 头条,又是热点,还是图文,

type中以 1,3,4的格式存储.

那们我们如何用sql查找所有type中有4图文标准的文章呢, www~phperz~com

这就要我们的find_in_set出马的时候到了.

先看mysql手册中find_in_set函数的语法:

FIND_IN_SET(str,strlist)
假如字符串str 在由N 子链组成的字符串列表strlist 中, 则返回值的范围在 1 到 N 之间 。一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则 FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。 这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

mysql> SELECT FIND_IN_SET(‘b’,’a,b,c,d’);

-> 2

用起来很简单

就以上面我说到的情况来举例: php程序员站

以下为引用的内容:
select * from article where FIND_IN_SET(’4′,type)

来源:http://blog.phpbk.com/2012/03/mysql%E7%9A%84find_in_set%E5%87%BD%E6%95%B0%E6%84%8F%E4%B9%89%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/

 

发表在 精彩转载 | 标签为 , , | 一条评论

Yii在Nginx下的rewrite配置

1. Nginx配置
在nginx.conf的server {段添加类似如下代码:
Nginx.conf代码:
location / {
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}
}

2. 在Yii的protected/conf/main.php去掉如下的注释
Php代码:
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'/'=>'/view',
'//'=>'/',
'/'=>'/',
),
),

发表在 YiiFramework, 精彩转载 | 标签为 , , , | 留下评论

10位邀请百度网盘名额

  1. http://pan.baidu.com/netdisk/beinvited?invite_code=f9245654ac991f0da22b7ed1c06de37c
  2. http://pan.baidu.com/netdisk/beinvited?invite_code=9a062542e6afc3333012868a337d072f
  3. http://pan.baidu.com/netdisk/beinvited?invite_code=d60c2c73d7f272a237dfd22b1aa25670
  4. http://pan.baidu.com/netdisk/beinvited?invite_code=0769b72dbae3cd53319b7c0d1a47928a
  5. http://pan.baidu.com/netdisk/beinvited?invite_code=16e31ed241e87fae5d6843c111d28a50
  6. http://pan.baidu.com/netdisk/beinvited?invite_code=3390df53790896ba81ec672f78fe2486
  7. http://pan.baidu.com/netdisk/beinvited?invite_code=7f4abea559a115ca32d8f3f7c6367cbd
  8. http://pan.baidu.com/netdisk/beinvited?invite_code=ce698b77402436b38db3b51ca881948e
  9. http://pan.baidu.com/netdisk/beinvited?invite_code=3390df53790896ba81ec672f78fe2486
  10. http://pan.baidu.com/netdisk/beinvited?invite_code=c29049193568efc2542d020896a631cb
成功邀请好友,双方都可以获得300M的空间奖励,每个人仅有10位邀请名额,最多可获得3G的奖励空间
发表在 生活杂谈 | 标签为 , | 留下评论

[转]php session丢失

抛开cookie使用session

PHP中SESSION不能跨页传递问题的解决办法

在PHP中使用过SESSION的朋友可能会碰到这么一个问题,SESSION变量不能跨页传递。这令我苦恼了好些日子,最终通过查资料思考并解决了这个问题。我认为,出现这个问题的原因有以下几点:

1、客户端禁用了cookie

2、浏览器出现问题,暂时无法存取cookie

3、php.ini中的session.use_trans_sid = 0或者编译时没有打开–enable-trans-sid选项

为什么会这样呢?下面我解释一下:

Session储存于服务器端(默认以文件方式存储session),根据客户端提供的session id来得到用户的文件,取得变量的值,session id可以使用客户端的Cookie或者Http1.1协议的Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取Session的目录……。也就是说,session id是取得存储在服务上的session变量的身份证。当代码session_start();运行的时候,就在服务器上产生了一个session文件,随之也产生了与之唯一对应的一个session id,定义session变量以一定形式存储在刚才产生的session文件中。通过session id,可以取出定义的变量。跨页后,为了使用session,你必须又执行session_start();将又会产生一个session文件,与之对应产生相应的session id,用这个session id是取不出前面提到的第一个session文件中的变量的,因为这个session id不是打开它的“钥匙”。如果在session_start();之前加代码session_id($session id);将不产生新的session文件,直接读取与这个id对应的session文件。

PHP中的session在默认情况下是使用客户端的Cookie来保存session id的,所以当客户端的cookie出现问题的时候就会影响session了。必须注意的是:session不一定必须依赖cookie,这也是session相比cookie的高明之处。当客户端的Cookie被禁用或出现问题时,PHP会自动把session id附着在URL中,这样再通过session id就能跨页使用session变量了。但这种附着也是有一定条件的,即“php.ini中的session.use_trans_sid = 1或者编译时打开打开了–enable-trans-sid选项”。

明白了以上的道理,现在我们来抛开cookie使用session,主要途径有三条:

1、设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了–enable-trans-sid选项,让PHP自动跨页传递session id。

2、手动通过URL传值、隐藏表单传递session id。

3、用文件、数据库等形式保存session_id,在跨页过程中手动调用。

通过例子来说明吧:

 

 

s1.php

<?php

session_start();

$_SESSION['var1']=”中华人民共和国”;

$url=”<a href=”.”\”s2.php\”>下一页</a>”;

echo $url;

?>

s2.php

<?php

session_start();

echo ”传递的session变量var1的值为:”.$_SESSION['var1'];

?>


运行以上代码,在客户端cookie正常的情况下,应该可以在得到结果“中华人民共和国”。

现在你手动关闭客户端的cookie,再运行,可能得不到结果了吧。如果得不到结果,再“设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了–enable-trans-sid选项”,又得到结果“中华人民共和国”

这也就是上面所说的途径1。

下面再说途径2:

修改的代码如下:

 

 

s1.php

<?php

session_start();

$_SESSION['var1']=”中华人民共和国”;

$sn = session_id();

$url=”<a href=”.”\”s2.php?s=”.$sn.”\”>下一页</a>”;

echo $url;

?>

s2.php

<?php

session_id($_GET['s']);

session_start();

echo ”传递的session变量var1的值为:”.$_SESSION['var1'];

?>


办法3还是通过例子来说明:

login.html

 

 

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>

<html>

<head>

<title>Login</title>

<meta http-equiv=”Content-Type” content=”text/html; charset=??????”>

</head>

<body>

请登录:

<form name=”login” method=”post” action=”mylogin1.php”>

用户名:<input type=”text” name=”name”><br>

口 令:<input type=”password” name=”pass”><br>

<input type=”submit” value=”登录”>

</form>

</body>

</html>

mylogin1.php

<?php

$name=$_POST['name'];

$pass=$_POST['pass'];

if(!$name || !$pass) {

echo ”用户名或密码为空,请<a href=\”login.html\”>重新登录</a>”;

die();

}

if (!($name==”laogong” && $pass==”123″)) {

echo ”用户名或密码不正确,请<a href=\”login.html\”>重新登录</a>”;

die();

}

//注册用户

ob_start();

session_start();

$_SESSION['user']= $name;

$psid=session_id();

$fp=fopen(“e:\\tmp\\phpsid.txt”,”w+”);

fwrite($fp,$psid);

fclose($fp);

//身份验证成功,进行相关操作

echo “已登录<br>”;

echo “<a href=\”mylogin2.php\”>下一页</a>”;

?>


mylogin2.php

 

 

<?php

$fp=fopen(“e:\\tmp\\phpsid.txt”,”r”);

$sid=fread($fp,1024);

fclose($fp);

session_id($sid);

session_start();

if(isset($_SESSION['user']) && $_SESSION['user']=”laogong” ) {

echo ”已登录!”;

}

else {

//成功登录进行相关操作

echo “未登录,无权访问”;

echo “请<a href=\”login.html\”>登录</a>后浏览”;

die();

}

?>


同样请关闭cookie测试,用户名:laogong 密码:123 这是通过文件保存session id的,文件是:e:\tmp\phpsid.txt,请根据自己的系统决定文件名或路径。

至于用数据库的方法,我就不举例子了,与文件的方法类似。

总结一下,上面的方法有一个共同点,就是在前一页取得session id,然后想办法传到下一页,在下一页的session_start();代码之前加代码session_id(传过来的session id);

原文:http://hi.baidu.com/%D0%A1code/blog/item/3d36130b0f034ca32fddd47a.html

林锋博客:http://www.dlf5.com/

发表在 精彩转载 | 标签为 , , | 留下评论

[转]Yii CDbCriteria 常用方法

这是Yii CDbCriteria的一些笔记和常用用法:
    PHP代码

   $criteria = new CDbCriteria;      
   $criteria->addCondition(“id=1″); //查询条件,即where id = 1  
   $criteria->addInCondition(‘id’, array(1,2,3,4,5)); //代表where id IN (1,23,,4,5,);  
   $criteria->addNotInCondition(‘id’, array(1,2,3,4,5));//与上面正好相法,是NOT IN  
   $criteria->addCondition(‘id=1′,’OR’);//这是OR条件,多个条件的时候,该条件是OR而非AND  
   $criteria->addSearchCondition(‘name’, ‘分类’);//搜索条件,其实代表了。。where name like ‘%分类%’  
   $criteria->addBetweenCondition(‘id’, 1, 4);//between 1 and 4   
     
   $criteria->compare(‘id’, 1);    //这个方法比较特殊,他会根据你的参数自动处理成addCondition或者addInCondition,  
                                   //即如果第二个参数是数组就会调用addInCondition  
    
   $criteria->addCondition(“id = :id”);  
   $criteria->params[':id']=1;  
    
   $criteria->select = ‘id,parentid,name’; //代表了要查询的字段,默认select=’*';  
   $criteria->join = ‘xxx’; //连接表  
   $criteria->with = ‘xxx’; //调用relations   
   $criteria->limit = 10;    //取1条数据,如果小于0,则不作处理  
   $criteria->offset = 1;   //两条合并起来,则表示 limit 10 offset 1,或者代表了。limit 1,10  
   $criteria->order = ‘xxx DESC,XXX ASC’ ;//排序条件  
   $criteria->group = ‘group 条件’;  
   $criteria->having = ‘having 条件 ‘;  
   $criteria->distinct = FALSE; //是否唯一查询  

原文:http://blog.sina.com.cn/s/blog_4291fcdb0100tg3r.html

发表在 精彩转载 | 标签为 , , | 一条评论

mysql查询上周、月、季度、年和本周、月、季度、年

查询本周记录
select * from ht_invoice_information where WEEKOFYEAR(create_date)=WEEKOFYEAR(NOW());
#查询上周记录
select * from ht_invoice_information where create_date>=date_add(now(),interval -(8 + weekday(now())) day)
and create_date< =date_add(now(),interval -(1 + weekday(now())) day);

#或者
select * from `ht_invoice_information` where WEEKOFYEAR(create_date)=WEEKOFYEAR(DATE_SUB(now(),INTERVAL 1 week));
#查询本月数据
select * from ht_invoice_information where MONTH(create_date)=MONTH(NOW()) and year(create_date)=year(now());
#查询上月数据
select * from ht_invoice_information where create_date<=last_day(date_add(now(),interval -1 MONTH))
and create_date>=DATE_FORMAT(concat(extract(year_month from date_add(now(),interval -1 MONTH)),’01′),’%Y-%m-%d’);
#或者
select * from `ht_invoice_information` where MONTH(create_date)=MONTH(DATE_SUB(NOW(),interval 1 month))
and year(create_date)=year(now());
#查询本季度数据
select * from `ht_invoice_information` where QUARTER(create_date)=QUARTER(now());
#查询上季度数据
select * from `ht_invoice_information` where QUARTER(create_date)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));
#查询本年数据
select * from `ht_invoice_information` where YEAR(create_date)=YEAR(NOW());
#查询上年数据
select * from `ht_invoice_information` where year(create_date)=year(date_sub(now(),interval 1 year))

—————————————————————

$sql = “SELECT total_guest,total_user,active_guest,guest_new,active_user,login_user,visit_time FROM client_tool_detail WHERE visit_time > date_sub( now( ) , INTERVAL 32 DAY ) and app_id = $req_app_id “;

原文:http://wangqiaowqo.iteye.com/blog/1465970

发表在 精彩转载 | 标签为 | 留下评论

文章归档sql写法

最近写YII博客的存档日志portlet 或许会用到这个。记下来慢慢转化为YII的!

"select year(date),month(date),count(id) from Article Group by year(date),month(date) order by year(date) desc,month(date) desc"

发表在 生活杂谈 | 标签为 , | 留下评论

[转]全讲解PHP+MySQL的分页显示示例分析

Web开发是今后分布式程式开发的主流,通常的web开发都要涉及到与数据库打交道,客户端从服务器端读取通常都是以分页的形式来显示,一页一页的阅读起来既方便又美观。所以说写分页程序是web开发的一个重要组成部分,在这里,我们共同来研究分页程序的编写。

一、分页程序的原理

分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page)。有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在MySQL里如果要想取出表内某段特定内容可以使用的T-SQL语句:select * from table limit offset,rows来实现。这里的offset是记录偏移量,它的计算方法是offset=$pagesize*($page-1),rows是要显示的记录条数,这里就是$page。也就是说select * from table limit 10,10这条语句的意思是取出表里从第11条记录开始的20条记录。

二、主要代码解析

 

$pagesize=10; //设置每一页显示的记录数
$conn=mysql_connect("localhost","root",""); //连接数据库
$rs=mysql_query("select count(*) from tb_product",$conn); //取得记录总数$rs
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];

//计算总页数

$pages=intval($numrows/$pagesize);

//判断页数设置

if (isset($_GET['page'])){
 $page=intval($_GET['page']);
}
else{ 
 $page=1; //否则,设置为第一页
}

 


三、创建用例用表myTable

 

create table myTable
(id int NOT NULL auto_increment,news_title varchar(50),
news_cont text,add_time datetime,PRIMARY KEY(id))

 

四、完整代码

 

<html>
<head>
<title>php分页示例</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
</head>

<body>
<?php
 $conn=mysql_connect("localhost","root","");
 //设定每一页显示的记录数
 $pagesize=1;
 mysql_select_db("mydata",$conn);
 //取得记录总数$rs,计算总页数用
 $rs=mysql_query("select count(*) from tb_product",$conn);
 $myrow = mysql_fetch_array($rs);
 $numrows=$myrow[0];
 //计算总页数

 $pages=intval($numrows/$pagesize);
 if ($numrows%$pagesize)
$pages++;
 //设置页数
 if (isset($_GET['page'])){
$page=intval($_GET['page']);
 }
 else{
//设置为第一页 
$page=1;
 }
 //计算记录偏移量
 $offset=$pagesize*($page - 1);
 //读取指定记录数
 $rs=mysql_query("select * from myTable
 order by id desc limit $offset,$pagesize",$conn);
 if ($myrow = mysql_fetch_array($rs))
 {
$i=0;
?>
<table border="0" width="80%">
<tr>
 <td width="50%" bgcolor="#E0E0E0">
<p align="center">标题</td>
<td width="50%" bgcolor="#E0E0E0">
<p align="center">发布时间</td>
</tr>
<?php
 do {
$i++;
?>
<tr>
 <td width="50%"><?=$myrow["news_title"]?></td>
 <td width="50%"><?=$myrow["news_cont"]?></td>
</tr>
 <?php
 }
 while ($myrow = mysql_fetch_array($rs));
echo "</table>";
}
echo "<div align='center'>共有".$pages."页(".$page."/".$pages.")";
for ($i=1;$i< $page;$i++)
 echo "<a href='fenye.php?page=".$i."'>[".$i ."]</a> ";
 echo "[".$page."]";
 for ($i=$page+1;$i<=$pages;$i++)
echo "<a href='fenye.php?page=".$i."'>[".$i ."]</a> ";
echo "</div>";
 ?>
</body>
</html>

 

五、总结

 

本例代码在windows2000 server+php4.4.0+mysql5.0.16上运行正常。该示例显示的分页格式是[1][2][3]…这样形式。假如想显示成“首页 上一页 下一页 尾页”这样形式,请加入以下代码:

 

 

$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;

if ($page > 1)
{
 echo "<a href='fenye.php?page=".$first."'>首页</a> ";
 echo "<a href='fenye.php?page=".$prev."'>上一页</a> ";
}

if ($page < $pages)
{
 echo "<a href='fenye.php?page=".$next."'>下一页</a> 
 echo "<a href='fenye.php?page=".$last."'>尾页</a> ";
}

 

其实,写分页显示代码是很简单的,只要掌握了它的工作原理。原文:http://linux.chinaitlab.com/PHP/722000.html

林锋博客 http://www.dlf5.com

 

 

发表在 精彩转载 | 标签为 , | 留下评论