Go 计算文件的 md5 和 sha1

Go 计算文件的 md5 和 sha1:

package main

import (
	"crypto/md5"
	"crypto/sha1"
	"fmt"
	"io"
	"os"
)

func main() {
	TestFile := "123.txt"
	infile, inerr := os.Open(TestFile)
	if inerr == nil {
		md5h := md5.New()
		io.Copy(md5h, infile)
		fmt.Printf("%x %s\n", md5h.Sum([]byte("")), TestFile)

		// 前面计算md5后,文件读写位置变了,这里调用Seek重置起始位置
		infile.Seek(0, 0)

		sha1h := sha1.New()
		io.Copy(sha1h, infile)
		fmt.Printf("%x %s\n", sha1h.Sum([]byte("")), TestFile)
	} else {
		fmt.Println(inerr)
		os.Exit(1)
	}
}

 

分类至 GO
0条评论

Go 计算字符串的 md5 和 sha1

Go 计算字符串的 md5 和 sha1:

package main

import (
	"crypto/md5"
	"crypto/sha1"
	"fmt"
)

func main() {
	TestString := "Hi, pandaman!"

	Md5Inst := md5.New()
	Md5Inst.Write([]byte(TestString))
	Result := Md5Inst.Sum([]byte(""))
	fmt.Printf("%x\n\n", Result)

	Sha1Inst := sha1.New()
	Sha1Inst.Write([]byte(TestString))
	Result = Sha1Inst.Sum([]byte(""))
	fmt.Printf("%x\n\n", Result)
}

 

分类至 GO
0条评论

Go 语言中的 map 示例(key-value 键值对)

Go 语言中的 map 示例(key-value 键值对) :

package main

import "fmt"

type PersonInfo struct {
	ID      string
	Name    string
	Address string
}

func main() {
	var persionDB map[string]PersonInfo
	persionDB = make(map[string]PersonInfo)

	persionDB["1234"] = PersonInfo{"12345", "Tom", "Room 203,..."}
	persionDB["1"] = PersonInfo{"1", "Jack", "Room 101,..."}

	person, ok := persionDB["1234"]

	if ok {
		fmt.Println("Found person", person.Name, "with ID 1234.")
	} else {
		fmt.Println("Did not find person with ID 1234.")
	}
}

 

分类至 GO
0条评论

重新编译 PHP 中文手册

目前,从 PHP 官网 https://www.php.net/download-docs.php 下载的 chm 中文手册在 Windows 系统上有两个大问题:

  1. 索引不完整,中文标题的页面没有索引
  2. 搜索栏用不了,无论搜什么都搜不出来

鉴于此,本人参考了网上制作 chm 的文档,自己重新编译一个版本。

在 Windows 系统下,chm 文件是通过微软的 HTML Help Workshop 生成的。chm 文件可以用 7-zip 进行打开,解压出来后可得到原 html 文件、hhc 目录文件、hhk 索引文件。

本人用 7-zip 解压从 PHP 官网下载的 php_enhanced_zh.chm ,得到所有的 html,以及 php_manual_zh.hhcphp_manual_zh.hhk,打开这两个文件没有看到任何中文字符,猜测可能是解压的时候丢失了,或者原本官网打包就有问题。如果要重新制作 chm 手册,我们还缺少一个 hhp 后缀名的项目配置文件 。

下面是本人写的一个 PHP 脚本,用于重新生成 php_manual_zh.hhcphp_manual_zh.hhkphp_manual_zh.hhp

分类至 PHP
0条评论

浏览器后退到前一页时还原之前的状态

本博客后台有个文章列表页,数据是通过 ajax 加载数据的:

当我翻到第2页时,点击编辑按钮去编辑文章(列表页跟编辑页是同一个 iframe),之后点击浏览器的后退按钮,退回到列表页,但是列表页又从第1页开始加载了,而我希望它停留在之前的第2页不变。所以,在翻页时,要做个记住页码的功能。

曾想过用 cookie、localStore 实现,用 cookie 的话还得引入第三方 js 库,用 localStore 又担心兼容性差,最后还是回归到 form 表单上。

分类至 杂项
0条评论

PHP 的 array_column 函数

语法

array_column ( array $input , mixed $column_key [, mixed $index_key = null ] ) : array

array_column() 返回input数组中键值为column_key的列, 如果指定了可选参数index_key,那么input数组中的这一列的值将作为返回数组中对应值的键。

分类至 PHP
0条评论

Git 中修改已提交的用户名/邮箱

1、执行一个 sh 文件

git filter-branch --env-filter '

OLD_EMAIL="旧邮箱"
CORRECT_NAME="新提交的名字"
CORRECT_EMAIL="新提交的邮箱"

if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

2、如果遇到权限问题则赋予权限,例如

Permission denied

#执行如下命令
chmod +x  XXXX.sh

3、如果遇到以下错误,修复它

Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f
 
#执行如下命令
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

4、最后提交(慎重)

git push origin --force --all

 

分类至 杂项
0条评论

nginx 中 fastcgi_params 和 fastcgi.conf 的区别

对比下 fastcgi.conf 与 fastcgi_params 文件,可以看出只有以下差异,即 fastcgi.conf 只比 fastcgi_params 多了一行:

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

 

原本只有 fastcgi_params 文件,fastcgi.conf是 nginx 0.8.30 才引入的。主要为是解决以下问题:原本 Nginx 只有 fastcgi_params,后来发现很多人在定义 SCRIPT_FILENAME 时使用了硬编码的方式。

例如:

fastcgi_param  SCRIPT_FILENAME  /var/www/foo$fastcgi_script_name;

于是为了规范用法便引入了 fastcgi.conf。

分类至 Linux
0条评论

git-flow 的工作流程

当在团队开发中使用版本控制系统时,商定一个统一的工作流程是至关重要的。Git 的确可以在各个方面做很多事情,然而,如果在你的团队中还没有能形成一个特定有效的工作流程,那么混乱就将是不可避免的。

基本上你可以定义一个完全适合你自己项目的工作流程,或者使用一个别人定义好的。

在这章节中我们将一起学习一个当前非常流行的工作流程 git-flow。

分类至 杂项
0条评论