配置Git记住用户名密码的俩种方法

前言

相信大家在使用github过程中,也有这情况,总是让大家输入烦人的用户名,密码,浪费时间。下面这俩种办法也是网上找来的,我做了些整合,避免大家走入当时跟我一样的坑中。

方法一

1.1创建文件储存git用户名密码

在%HOME%目录中,一般为C:\users\Administrator,也可以是你自己创建的系统用户名目录,反正都在C:\users\中。文件名为.git-credentials,由于在Window中不允许直接创建以”.”开头的文件,所以需要借助git bash进行,打开git bash客户端,进行%HOME%目录,然后用touch创建文件 .git-credentials, 命令如下:

cd C\users\
touch .git-credentials

然后用代码编辑工具打开刚才的文件,编辑如下:

https://你的用户名:你的密码@github.com

这一步你要注意一下,如果你是dsdn的账号,注意一下后缀,应该是https://你的用户名:你的密码@code.csdn.net,这个根据情况而定

1.2添加 git config内容

进入git bash终端输入以下命令:

git config --global credential.helper store

执行完后查看%HOME%目录下的.gitconfig文件,会多了一项:

[credential]
   helper = store

重新开启git bash会发现git push时不用再输入用户名和密码

方法二

2.1添加环境变量

在windows中添加一个HOME环境变量,变量名:HOME,变量值:%USERPROFILE%

注意这里添加的是用户变量

dG08KLU

 

 

 

 

进入%HOME%目录,新建一个名为”_netrc”的文件,文件中内容格式如下:

machine github.com
login your-usernmae
password your-password

这里依旧注意用户地址后缀。

重新打开git bash即可,无需再输入用户名和密码

 

本人用第一种方法搞定的。第二种方法还有待大家测试。

Thinkphp5结合PHPMailer发送邮件(php发送邮件)

网上发送邮件的例子有很多,今天这篇文章主要是采用了tp5和结合PHPMailer实现的,也算是比较新的了。

php命名空间是在php5.3中引入的,也得到了大家的认可,有不太懂的可以自行去学习。

thinkphp呢,不用多说了吧。本文主要是用了目前最新的tp5。

PHPMailer是一个用于发送电子邮件的php函数包,网上也有许多下载,不做太多解释。

1.第一步 准备文件

我们需要用到其中俩个类文件class.phpmailer.php和class.smtp.php

QQ截图20160828132846

 

 

 

 

 

 

 

因为TP5的命名规范,更加简洁,所以这里我简单得对俩个文件改了一下名称Mail.php,Smtp.php

QQ截图20160828133159

 

 

 

 

 

 

 

 

 

如图所示。把他放到了我项目中的扩展里面,大家可自行根据自己的项目位置来放。

2.第二步 增加命名空间

因为默认这俩个文件是没有命名空间的  所以得我们自己手动加一下。我的命名是namespace org;

QQ截图20160828133550

 

 

 

3.第三步 引入使用

这个时候我们就基本可以直接使用了,下面代码大家自己根据情况而写。

首先我们在配置文件中加入配置项 config.php

1
2
3
4
5
6
7
8
9
// 配置邮件发送服务器
'MAIL_HOST' =>'smtp.163.com',//smtp服务器的名称
'MAIL_SMTPAUTH' =>TRUE, //启用smtp认证
'MAIL_USERNAME' =>'xxxxxx@163.com',//你的邮箱名
'MAIL_FROM' =>'xxxxxx@163.com',//发件人地址
'MAIL_FROMNAME'=>'姓名',//发件人姓名
'MAIL_PASSWORD' =>'xxxx',//密码  注意这里是邮箱授权码
'MAIL_CHARSET' =>'utf-8',//设置邮件编码
'MAIL_ISHTML' =>TRUE, // 是否HTML格式邮件

然后在公共类文件中加入方法 common.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 * 邮件发送函数
 */
function sendMail($to, $title, $content,$mail) {
    $mail->IsSMTP(); // 启用SMTP
    $mail->Host=C('MAIL_HOST'); //smtp服务器的名称(这里以QQ邮箱为例)
    $mail->SMTPAuth = C('MAIL_SMTPAUTH'); //启用smtp认证
    $mail->Username = C('MAIL_USERNAME'); //你的邮箱名
    $mail->Password = C('MAIL_PASSWORD') ; //邮箱密码
    $mail->From = C('MAIL_FROM'); //发件人地址(也就是你的邮箱地址)
    $mail->FromName = C('MAIL_FROMNAME'); //发件人姓名
    $mail->AddAddress($to,"尊敬的客户");
    $mail->WordWrap = 50; //设置每行字符长度
    $mail->IsHTML(C('MAIL_ISHTML')); // 是否HTML格式邮件
    $mail->CharSet=C('MAIL_CHARSET'); //设置邮件编码
    $mail->Subject =$title; //邮件主题
    $mail->Body = $content; //邮件内容
    $mail->AltBody = "这是一个纯文本的身体在非营利的HTML电子邮件客户端"; //邮件正文不支持HTML的备用显示
    return($mail->Send());
}

最后呢大家在自己需要调用的控制器中调用即可,可别忘了引入空间!

1
2
$m = new Mail();
sendMail('xxxxxx@qq.com','标题','内容',$m)

常见的错误原因

1.这里是需要你邮箱开启STMP服务的

登录你的邮箱手动开启STMP服务,这个服务默认是关闭的,一定要去邮箱->设置 里去手动开启,开启时要求你设置一个独立密码,这个密码就是配置文件中的密码。

2.有时候可能会发送成功,但是对方没有接受到邮件

这里有可能是在系统默认为了垃圾邮件,需要自己到垃圾箱中找一下,QQ邮箱经常的事。

 

最后说的是

这里我也只是跟大家说了一下我的怎么应用,你只需要理解即可,而实际的应用呢,是需要大家自己变更的。

php字符串转数组及数组转字符串的常用方法(implode()和explode())

php中掌握常用函数很重要,相信这俩个函数大家一定不很陌生,这里就做一个简单说明介绍:

1.数组元素组合为字符串 implode()

implode() 函数返回由数组元素组合成的字符串。

implode(separator,array)

separator 可选。规定数组元素之间放置的内容。默认是 “”(空字符串)。

array 必需。要组合为字符串的数组。

例子:

1
2
3
4
<?php
$arr = array('Hello','World!','I','love','Shanghai!');
echo implode(" ",$arr);
?>

输出:Hello World! I love Shanghai!

2.字符串打散为数组:explode()

explode() 函数把字符串打散为数组。

explode(separator,string,limit)

separator 必需。规定在哪里分割字符串。
string 必需。要分割的字符串。
limit 可选。规定所返回的数组元素的数目。

例子:

1
2
3
4
<?php
$str = "Hello world. I love Shanghai!";
print_r (explode(" ",$str));
?>

输出:Array ( [0] => Hello [1] => world. [2] => I [3] => love [4] => Shanghai! )

MyIsam和InnoDB的区别

“MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持”

这是网上对MyISAM和InnoDB的解释,很抽象吧,我们用白话的方式解释一下

所谓事务处理,就是原子性操作。
打个比方,支持事务处理的Innodb表,建设一个中,发帖是给积分的。你发了一个帖子执行一个insert语句,来插入帖子内容,插入后就要执行一个update语句来增加你的积分。假设一种特殊情况突然发生,insert成功了,update操作却没有被执行。也就是说你发了帖子却没有增加相应的积分。这就会造成用户不满。如果使用了事务处理,insert和update都放入到事务中去执行,这个时候,只有当insert和update两条语句都执行生成的时候才会将数据更新、写入到中,如果其中任何一条语句失败,那么就会回滚为初始状态,不执行写入。这样就保证了insert和update肯定是一同执行的。

mysiam表不支持事务处理,同时mysiam表不支持外键。外键不用说了吧?不知道的话,去网上查吧。
同时,在执行数据库写入的操作(insert,update,delete)的时候,mysiam表会锁表,而innodb表会锁行。通俗点说,就是你执行了一个update语句,那么mysiam表会将整个表都锁住,其他的insert和delete、update都会被拒之门外,等到这个update语句执行完成后才会被依次执行。

而锁行,就是说,你执行update语句是,只会将这一条记录进行锁定,只有针对这条记录的其他写入、更新操作会被阻塞并等待这条update语句执行完毕后再执行,针对其他记录的写入操作不会有影响。

因此,当你的数据库有大量的写入、更新操作而查询比较少或者数据完整性要求比较高的时候就选择innodb表。当你的数据库主要以查询为主,相比较而言更新和写入比较少,并且业务方面数据完整性要求不那么严格,就选择mysiam表。因为mysiam表的查询操作效率和速度都比innodb要快

Mysql中主键(Primary Key)、外键(Foreign Key)、唯一键( Unique Key)、索引(Index)的说明

本文主要介绍Mysql几种键和索引:

MySQL中有三种Key和一个Index: Primary Key(主键), Unique Key(唯一键),Foreign Key(外键)和 Index(索引)

四者的区别如下:
定义:
主键(Primary Key):唯一标识一条记录,不能有重复,不允许为空。
外键(Foreign Key):表的外键是另一表的主键, 外键可以有重复, 可以是空值。
唯一键( Unique Key):唯一标识一条记录,不能有重复,可以为空。
索引(Index):该字段可以有重复值记录,可以有空值,如果是唯一索引,那么就不可以有重复的记录,可以有空值。

作用:
主键:用来保证数据完整性。
外键:用来和其他表建立联系,以保证数据的一致性和级联操作。
唯一键:用来用防止数据插入的时候重复。
索引:是提高查询排序的速度。

个数:
主键:一个表只能有一个列是主键。
外键:一个表可以有多个列是外键。
唯一键:一个表可以有多个列是唯一键。
索引:一个表可以有多个列是索引。

从中可以看出,索引和唯一键很相似,二者的区别在于作用不同,索引用于提高查询速度,唯一键用于唯一约束。当然如果建立的索引是唯一索引的话,也可以起到唯一约束的作用。在MySQL具体实现上,索引需要建立数据结构,需要额外的磁盘空间来存储索引,而键(主键,外键和唯一键)都是逻辑层面的实现和约束,二者还是有着本质的区别。

还有就是MySQL的索引包括:普通索引(Index)、唯一索引(UNIQUE INDEX)、全文索引(FULLTEXT INDEX)、组合索引。这里就不要把唯一键和唯一索引弄混淆了!也不要把索引和其它的三种键弄混淆了。

还有一点需要注意的是,虽然键(key)和索引(index)有着本质的区别,但是当我们在建立主键或者唯一键的时候,也就建立了索引,MySQL和Oracle都是这么做的,要是不明白这一点,很容易把索引和主键和唯一键弄混淆。

唯一键可以起到唯一约束的作用,当然主键也可以起到唯一约束的作用。当然我们可以不建立唯一键和主键,直接为指定的数据表的列添加唯一约束。唯一约束保证指定列的值不能重复。

所以,关于上面的概念,大家不要咬文嚼字,而是根据功能去理解每一种KEY的作用,在什么场合需要去使用它。

比如需要主键约束的时候,我们就可以对某一列建立主键;
需要对某一列或者多个列进行唯一约束的时候,我们就建立唯一键或者唯一约束;
需要加快查询速度的时候,我们就建立相应类型的索引。

关于四者的理解,上未参考到权威的资料,请读者保持怀疑的态度接受。

PHP中使用substr()截取字符串出现中文乱码问题(mb_substr)

在PHP开发中,经常会执行字符串的截取操作,遇到这些需求时,我们经常会想到使用substr()方法来实现,substr()对全英文字符串的截取是比较适合的。

但字符串只要出现中文字符,就有可能导致PHP substr中文乱码,因为中文UTF-8编码,每个汉字占3字节,而GB2312占2字节,英文占1字节,截取位数不准确,substr()硬生生地将一个中文字符“锯”成两半,造成断开的字符会把其后的..拉过来一起做一个字,所以出现了PHP substr中文乱码。

这个时候我们就要想点办法了。

其实可以用mb_substr()/mb_strcut()这个函数,mb_substr()/mb_strcut()的用法与substr()相似,只是在mb_substr()/mb_strcut最后要加入多一个参数,以设定字符串的编码,但是一般的服务器都没打开php_mbstring.dll,需要在php.ini在把php_mbstring.dll打开。

  echo mb_substr("php中文字符encode",0,4,"utf-8");

如果未指定最后一个编码参数,会是三个字节为一个中文,这就是utf-8编码的特点,若加上utf-8字符集说明,所以,是以一个字为单位来截取的。

使用的时候要注意php文件的编码,和网页显示时的编码。使用这个mb_substr方法要事先知道字符串的编码,如果不知道编码,就需要判断,mbstring库还提供了mb_check_encoding来检验字符串编码,但还不完善。

php错误:operator not supported for strings in原因及解决方法

php报错

PHP Fatal error:  [] operator not supported for strings in ……

错误原因

在对某一个变量进行第二次赋值的时候,也就是在同一页面内对同一变量第二次赋值,但值的类型前后不一致会导致这个错误,可以在第二次赋值前重新进行一次声明变量类型.
简单的来说,就是同一页面内,同一变量前后赋值的类型不一致所导致的。

比如:
$a = “abc”;
$a[] = “def”;

解决方法

检查你的代码中是否有上例中的书写方式,请在每次赋值前声明一次变量或用unset()函数销毁变量

例:
$a=”abc”;
unset($a);
$a[] = “def”;

Thinkphp中比较标签的用法(eq,equa等)

其实这些标签在TP官方手册中已经有了明确的说明介绍,我这里就简单说明举例一下。

比较标签(判断输出数据)包括(eq,equal,notequal,neq,gt,lt,egt,elt,heq,nheq)
闭合 非闭合标签
属性 name(必须):变量名
value(必须):要比较的值,支持变量

用法:

1
<比较标签 name="变量" value="值">内容

系统支持的比较标签以及所表示的含义分别是:

eq或者 equal 等于
neq 或者notequal 不等于
gt 大于
egt 大于等于
lt 小于
elt 小于等于
heq 恒等于
nheq 不恒等于

他们的用法基本是一致的,区别在于判断的条件不同。

例如,要求name变量的值等于value就输出,可以使用:

1
<eq name="name" value="value">value</eq>

或者

1
<equal name="name" value="value">value</equal>

也可以支持和else标签混合使用:

1
<eq name="name" value="value">相等<else/>不相等</eq>

当 name变量的值大于5就输出

1
<gt name="name" value="5">value</gt>

当name变量的值不小于5就输出

1
<egt name="name" value="5">value</egt>

比较标签中的变量可以支持对象的属性或者数组,甚至可以是系统变量:
举例说明:
当vo对象的属性(或者数组,或者自动判断)等于5就输出

1
<eq name="vo.name" value="5">{$vo.name}</eq>

当vo对象的属性等于5就输出

1
<eq name="vo:name" value="5">{$vo.name}</eq>

当$vo[‘name’]等于5就输出

1
<eq name="vo['name']" value="5">{$vo.name}</eq>

而且还可以支持对变量使用函数
当vo对象的属性值的字符串长度等于5就输出

1
<eq name="vo:name|strlen" value="5">{$vo.name}</eq>

变量名可以支持系统变量的方式,例如:

1
<eq name="Think.get.name" value="value">相等<else/>不相等</eq>

通常比较标签的值是一个字符串或者数字,如果需要使用变量,只需要在前面添加“$”标志:
当vo对象的属性等于$a就输出

1
<eq name="vo:name" value="$a">{$vo.name}</eq>

所有的比较标签可以统一使用compare标签(其实所有的比较标签都是compare标签的别名),例如:
当name变量的值等于5就输出

1
<compare name="name" value="5" type="eq">value</compare>

等效于

1
<eq name="name" value="5" >value</eq>

其中type属性的值就是上面列出的比较标签名称

mysql的数据类型int、bigint、smallint 和 tinyint的说明

使用整数数据的精确数字数据类型。
bigint
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。
int
从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。
smallint
从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据。存储大小为 2 个字节。
tinyint
从 0 到 255 的整型数据。存储大小为 1 字节。
注释:
在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。在 SQL Server 中,int 数据类型是主要的整数数据类型。
在数据类型优先次序表中,bigint 位于 smallmoney 和 int 之间。
只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其它整数数据类型(tinyint、smallint 和 int)提升为 bigint。