所有由suliang20发布的文章

git初始化

一、git基本配置
在https://github.com/中下载git后,安装并运行git
1.首先检测SSH keys,若已经存在key,则直接进入第三步

cd ~/.ssh
2.将原来的SSH keys备份并删除

mkdir key_backup
cp id_rsa* key_backup
rm id_rsa*
3.创建一个新的SSH key

复制代码
ssh-keygen -t rsa -C “your_email@youremail.com”
Creates a new ssh key using the provided email Generating public/private rsa key pair.
#此处输入将要保存的路径,默认为当前路径
Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa): 输入回车后提示输入一个类似于密码的自定义的通行证号,如果直接回车则为空
Enter passphrase (empty for no passphrase):
#提示重新输入以便确认输入是否正确
Enter same passphrase again:
复制代码
如果看到Your public key has been saved等信息则说明保存成功
4.将SSH key输入到GitHub网站中
在:Account Settings->SSH Pbulic Keys>单击Add another public key
将刚才新建的key输入到key中并且添加一个标题,例如:git-tutorial。即/Users/your_user_directory/.ssh/id_rsa。默认情况下.ssh是隐藏文件,需要将系统设置成显示隐藏文件才能看到。输入完成后单击Add key后,会看到git-tutorial已经被添加进去了。
5.测试是否能够正确链接到github中,输入以下命令:

ssh -T git@github.com
将会显示一下信息
The authenticity of host ‘github.com (207.97.227.239)’ can’t be established. RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. Are you sure you want to continue connecting (yes/no)?
输入yes后,显示出下列信息表示连接成功
Hi username! You’ve successfully authenticated, but GitHub does not provide shell access.
二、配置个人信息
当上面步骤完成后,就可以设置一些基本的个人信息了
1.设置用户名和邮箱
Git通过检测用户名和邮箱来跟踪进行commit的用户

git config –global user.name “Firstname Lastname”
git config –global user.email “your_email@youremail.com”
2.设置GitHub网站标记
单击网站中的Account Settings>Account Admin,将APT Token中的那串字符串记录下来,输入到下列命令中:

git config –global github.user username
git config –global github.token 获取到的token
三、创建一个新的代码库
打开网站中的创建代码库按钮,或直接使用https://github.com/repositories/new链接打开。
输入相应的信息后单击创建按钮。
实例:
1.创建完成后在本地创建一个文件夹并在该文件夹下创建一个README文件

mkdir ~/Hello-World 在user目录下创建一个名为Hello-World的项目文件夹(~代表用户目录,即:C:\Documents and Settings\当前登陆系统的用户名)
cd ~/Hello-World 更改当前目录到Hello-World目录中
git init 初始化该文件夹,将会提示以下信息:
Initialized empty Git repository in /Users/your_user_directory/Hello-World/.git/
touch README
2.创建完README以后就需要添加并提交文件了

git add README
git commit -m “first commit”
至此已经将要更改的文件提交到头信息中,但并没有真正提交到网站上去,还需要执行下面两个命令:

git remote add origin git@github.com:gbyukg/zf-tutorial.git(若是第一次提交该项目的文件或是修改项目文件名后则需要这行这个命令,以后就可不用执行该命令)
git push -u origin master

SublimeText自带格式化代码功能 – reindent

这个功能被SublimeText命名为reindent,如果你使用了SublimeText汉化包的话叫做“再次缩进”,但是这种叫法说不通。

该选项的路径:Edit – Line – Reindent(中文路径则是:编辑 – 行 – 再次缩进)

同时说明一下,该功能并不需要选中代码之后才能执行格式化功能,其默认是格式化整个文件里的代码。

接下来就说到主题了,应该如何对该格式化代码功能进行快捷键组合的设置呢?

1、首先通过以下路径打开用户按键绑定文件:

Preferences → Key Bindings – User

2、然后在其中添加以下代码(如果你有需要的话,其中的快捷键组合是可以自己定义的):

{“keys”: [“ctrl+shift+r”], “command”: “reindent” , “args”:
{“single_line”: false}}

在这儿请注意每组快捷键组合包含着一个中括号里面,通过大括号定义一组快捷键,然后通过英文逗号进行分隔,具体可参考下图:

本文到这儿就结束了吗?不,下面说下如果SublimeText自带的格式化代码不适合用在你所使用的语言(比如SQL、Ruby等)的话,你可以通过插件的方式进行配置,具体请看下述操作:

1、以下内容基于已经你已经在你的SublimeText中安装了package control(教程在本站有);

2、通过快捷键组合ctrl+shift+P唤出命令面板

3、在面板中输入“install package”后回车

4、接着输入“format”(即格式化的意思),在弹出的列表中找到对应你所想要进行格式化操作的语言,具体看图:

Sublime Text 3最好的功能、插件和设置

Sublime Text 3 是一个了不起的软件。首先,它是一个干净,实用,可以快速的编写代码编辑器。它不仅具有令人难以置信的内置功能(多行编辑和VIM模式),而且还支持插件,代码片段和其他许多东西。

我知道,网上已经有许多关于 Sublime Text 3 的文章,这事好事情。在这篇文章中,我们将看到 Sublime Text 3 的最好的部分,您可能已经听说过其中的一些,但也许其他一些人还不知道。

Features(功能)

Command Palette (命令面板) ctrl + shift + p

命令面板可以使你访问设置菜单中可以所有的东西,调用包命令,更改文件的语法,处理Sublime项目,等等。举例来说,你可以在命令面板中Git命令添加,分支,提交和推送。

使用: ctrl + shift + p

File Switching (文件切换) ctrl + p

Sublime Text提供了一个非常快速的方式来打开新的文件。只要按下Ctrl+ P并开始输入你想要打开的文件的名称。一旦找到文件,只需按enter键,就可以开始直接输入到该文件了!

使用ctrl + p

Goto Symbols (跳转标记) ctrl + r

当你编辑一个大文件时,文件中有一堆方法,按 Ctrl + R 将其全部列出来,使他们更容易找到。开始尝试的输入你想要的,然后按 Enter 就可以快速跳转这个方法了。

使用方法 :按 Ctrl + R
Sublime Text 3 有一个新功能(Goto Definition 转到定义)。它提供了 Sublime Text 更多功能,使其更接近于一个IDE。如果你有兴趣,可以自己去学习一下。

Multi-Edit(多行编辑) ctrl + click

在我看来这绝对是Sublime Text最好的功能。使用它之后,就很难再回到其他文本编辑器。(愚人码头注:其实很多编辑器,IDE现在都有这功能了,比如:WebStorm)有许多不同的方式使用多行编辑:

  • ctrl + d : 选中光标所占的文本,继续操作则会选中下一个相同的文本。(愚人码头注:多按几下试试)
  • ctrl + click : 单击想要编辑的每一个地方,都将创建一个光标
  • ctrl + shift + falt + enter : 在你的文件查找一个文本,然后将其全部选中

以下叔整理的:

  • ctrl + l 选中整行,继续操作则继续选择下一行,效果和 shift + 效果一样。
  • ctrl + shift + l 先选中多行,再按下快捷键,会在每行行尾插入光标,即可同时编辑这些行。
  • ctrl + alt + ctrl + alt +鼠标向上拖动 向上添加多行光标,可同时编辑多行。
  • ctrl + alt + ctrl + alt +鼠标向下拖动 向下添加多行光标,可同时编辑多行。
  • shift + 向上选中多行。
  • shift + 向下选中多行。

Snippets(代码片段)

代码片段是Sublime Text的另一大特点。您可以使用预装的,也可以自己创建,或安装具有代码片段的包。你所要做的就是输入一个定义了代码片段的文本,它会扩展到你的代码段。

例如,键入lorem将产生lorem存有文本。

使用: 输入一个定义了代码片段的文本(例如 lorem ),然后按 tab 键。

这里有一篇关于创建代码片段的非常棒的文章,http://www.hongkiat.com/blog/sublime-code-snippets/

Keyboard Shortcuts (快捷键)

Sublime Text的快捷键的数量是惊人的。我觉得这是Sublime Text另一个好的功能。如果太多了,你可以将自己常用的快捷键从主键( home keys )移到了自己的快捷键列表中(my keyboard)。

对于Sublime Text键盘快捷键的完整列表,看看我们的键盘快捷键文章。https://scotch.io/bar-talk/sublime-text-keyboard-shortcuts

Projects(项目)

在Sublime Text中,项目是工作流程中不可或缺的一部分。一个项目仅仅是一个 Sublime工作空间,项目中的文件夹都是开放的,并显示在侧边栏中。这是很有帮助的,因为你可以定义一个项目,并添加文件夹到项目中,并能够迅速地在文件夹之间切换。

使用项目,你只需要去Windows资源管理器或Finder中找到你想要的项目,并将其拖到Sublime Text,就可以了。

保存一个项目:进入命令面板,输入保存项目。

切换项目: ctrl + alt + p

Packages/Plugins(包/插件)

Package Control(包控制)

Sublime Text提供了绝对必要的包管理器。这是安装下面列出的所有插件和主题的最佳方式。继续,在包控制在安装插件。

使用方法:进入命令面板( ctrl + shift + p ),然后键入 install

包控制将加载所有可用于安装的包。看看你可以查找并安装自己喜欢的包..

Alignment (代码对齐)

一个非常简单和易于使用的插件,使你的代码组织和美观。当您重温代码时候非常有用。

使用方法:选中要调整的行,然后按 Ctrl + Alt + A

BracketHighlighter

该插件提供行数列高亮的各种配对的语法符号。(愚人码头注:就是将配对的括号等显示在行数列上)

Colorpicker

使用一个取色器改变颜色

使用方法 : ctrl + shift + c

注:该插件在Mac上使用时非常漂亮

Emmet

Emmet绝对的节省时间。您可以轻松快速地编写HTML。

使用方法: ctrl + alt + enter ,并且开始输入Emmet风格的HTML

看看我们的 Emmet指南 ,以了解更多,并自己尝试Emmet。

DocBlockr

一个真正简单的方式来轻松地创建许多语言包括JavaScript,PHP和CoffeeScript的文档块。只要在函数的上面输入 /** ,按 Tab 就可以了。DocBlockr会观察函数需要的变量名和类型,并创建文档块。

Git

Git帮助你与你的Git repo协议进行交互。它支持很多命令像 init , push , pull ,branch , stash ,等的。了解更多关于你在Sublime Text里面究竟能使用哪些Git功能,以提高您的工作流程。 https://scotch.io/tutorials/using-git-inside-of-sublime-text-to-improve-workflow

GitGutter

这是一个小巧有用的插件,它会告诉你自上次git commit以来已经改变的行。一个指示器显示在行号的旁边。

Gist

这个插件可以让你拉你的Gists,并把它们插入到你的文件。当你有一个Gists,以启动一个HTML文件或任何其他可重用的代码时候,这是有用的。

使用方法:打开命令面板,并且键入 gist 。您也可以使用所显示的快捷方式。

SidebarEnhancements

在侧边栏的文件上右击时,这个插件提供了大量更多的选择。打开,查找,复制和粘贴,等等。

这里是老菜单和SidebarEnhanced菜单的比较。

Themes (主题)

Sublime Text可以安装主题,有一些主题真的很酷。您可以使用包控制找到这些。使用包控制安装一个主题,然后更新您的用户设置使用它。

// User/Preferences.sublime-settings
{
    "theme": "Soda Light.sublime-theme"
}

注意: 您可能必须重新启动Sublime Text,这些更改才会生效。

一些流行的主题:

THEME – SODA包括 LIGHT 和 DARK

THEME – FLATLAND

PREDAWN

Flatland的一个分支。 repo

SPACEGRAY

“一个Hyperminimal UI主题”。这里有 更多的相关资料

更多皮肤:

更多优秀主体, 请查看 2014年的最佳Sublime Text的主题

Color Schemes (配色方案)

除了改变你的主题,你也可以改变你的配色方案。这不同于主题,因为主题是Sublime Text的包。配色方案仅仅是配色方案文件,并更改您的设置。

更改配色方案:菜单, Preferences 首选项> Color Scheme 配色方案,并选择一个。

你会马上看到变化,可以检查你是不是喜欢。对于一些大的颜色方案的列表,请访问Dayle Rees的 colour schemes(配色方案) repo或 color sublime ,一项伟大的工程。

Settings(设置)

Sublime自带了大量的设置。我建议你去看看它所提供的所有设置。

为了让您进入用户设置,使用命令面板并且键入 user

这里是我当前的设置,大部分是属性不需要解释了吧。为自己挑选好的部分并作为自己的自定义设置!

// User/Preferences.sublime-settings
{
    "bold_folder_labels": true,
    "color_scheme": "Packages/Theme - Flatland/Flatland Monokai.tmTheme",
    "font_face": "Ubuntu Mono",
    "font_options": "subpixel_antialias",
    "font_size": 14,
    "highlight_line": true,
    "highlight_modified_tabs": true,
    "ignored_packages":
    [
    ],
    "line_padding_bottom": 1,
    "line_padding_top": 1,
    "rulers":
    [
        80
    ],
    "scroll_past_end": true,
    "tab_size": 4,
    "tab_completion": false,
    "theme": "Soda Light.sublime-theme",
    "translate_tabs_to_spaces": true,
    "trim_trailing_white_space_on_save": true,
    "vintage_start_in_command_mode": true,
    "word_wrap": true
}

我在Sublime中用的是最佳模式。它提供了 vi 编辑命令代替Sublime Text。它不是原vi包的全功能,但它是我目前见过最接近 vi编辑器的文本编辑器。使用你的键盘快捷键和命令包就可以非常快速的开发。

上面的设置会在你打开一个文件时自动开启Vintage模式(叔注:Vintage是Sublime Text的vi模式编辑包。 可以使用组合vi命令来调用Sublime Text的功能,包括多重选择。)。

如果你不喜欢这个功能,只是删除 vintage_start_in_command_mode 就可以了,如果你想完全禁用Vintage模式,那么删除 ignored_packages 设置。

ublime text 3 快捷键大全以及配置编译环境

Ctrl+Shift+P:打开命令面板
Ctrl+P:搜索项目中的文件
Ctrl+G:跳转到第几行
Ctrl+W:关闭当前打开文件
Ctrl+Shift+W:关闭所有打开文件
Ctrl+Shift+V:粘贴并格式化
Ctrl+D:选择单词,重复可增加选择下一个相同的单词
Ctrl+L:选择行,重复可依次增加选择下一行
Ctrl+Shift+L:选择多行
Ctrl+Shift+Enter:在当前行前插入新行
Ctrl+X:删除当前行
Ctrl+M:跳转到对应括号
Ctrl+U:软撤销,撤销光标位置
Ctrl+J:选择标签内容
Ctrl+F:查找内容
Ctrl+Shift+F:查找并替换
Ctrl+H:替换
Ctrl+R:前往 method
Ctrl+N:新建窗口
Ctrl+K+B:开关侧栏
Ctrl+Shift+M:选中当前括号内容,重复可选着括号本身
Ctrl+F2:设置/删除标记
Ctrl+/:注释当前行
Ctrl+Shift+/:当前位置插入注释
Ctrl+Alt+/:块注释,并Focus到首行,写注释说明用的
Ctrl+Shift+A:选择当前标签前后,修改标签用的
F11:全屏
Shift+F11:全屏免打扰模式,只编辑当前文件
Alt+F3:选择所有相同的词
Alt+.:闭合标签
Alt+Shift+数字:分屏显示
Alt+数字:切换打开第N个文件
Shift+右键拖动:光标多不,用来更改或插入列内容
鼠标的前进后退键可切换Tab文件
按Ctrl,依次点击或选取,可需要编辑的多个位置
按Ctrl+Shift+上下键,可替换行

选择类

Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本。

Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑。举个栗子:快速选中并更改所有相同的变量名、函数名等。

Ctrl+L 选中整行,继续操作则继续选择下一行,效果和 Shift+↓ 效果一样。

Ctrl+Shift+L 先选中多行,再按下快捷键,会在每行行尾插入光标,即可同时编辑这些行。

Ctrl+Shift+M 选择括号内的内容(继续选择父括号)。举个栗子:快速选中删除函数中的代码,重写函数体代码或重写括号内里的内容。

Ctrl+M 光标移动至括号内结束或开始的位置。

Ctrl+Enter 在下一行插入新行。举个栗子:即使光标不在行尾,也能快速向下插入一行。

Ctrl+Shift+Enter 在上一行插入新行。举个栗子:即使光标不在行首,也能快速向上插入一行。

Ctrl+Shift+[ 选中代码,按下快捷键,折叠代码。

Ctrl+Shift+] 选中代码,按下快捷键,展开代码。

Ctrl+K+0 展开所有折叠代码。

Ctrl+← 向左单位性地移动光标,快速移动光标。

Ctrl+→ 向右单位性地移动光标,快速移动光标。

shift+↑ 向上选中多行。

shift+↓ 向下选中多行。

Shift+← 向左选中文本。

Shift+→ 向右选中文本。

Ctrl+Shift+← 向左单位性地选中文本。

Ctrl+Shift+→ 向右单位性地选中文本。

Ctrl+Shift+↑ 将光标所在行和上一行代码互换(将光标所在行插入到上一行之前)。

Ctrl+Shift+↓ 将光标所在行和下一行代码互换(将光标所在行插入到下一行之后)。

Ctrl+Alt+↑ 向上添加多行光标,可同时编辑多行。

Ctrl+Alt+↓ 向下添加多行光标,可同时编辑多行。

编辑类

Ctrl+J 合并选中的多行代码为一行。举个栗子:将多行格式的CSS属性合并为一行。

Ctrl+Shift+D 复制光标所在整行,插入到下一行。

Tab 向右缩进。

Shift+Tab 向左缩进。

Ctrl+K+K 从光标处开始删除代码至行尾。

Ctrl+Shift+K 删除整行。

Ctrl+/ 注释单行。

Ctrl+Shift+/ 注释多行。

Ctrl+K+U 转换大写。

Ctrl+K+L 转换小写。

Ctrl+Z 撤销。

Ctrl+Y 恢复撤销。

Ctrl+U 软撤销,感觉和 Gtrl+Z 一样。

Ctrl+F2 设置书签

Ctrl+T 左右字母互换。

F6 单词检测拼写

搜索类

Ctrl+F 打开底部搜索框,查找关键字。

Ctrl+shift+F 在文件夹内查找,与普通编辑器不同的地方是sublime允许添加多个文件夹进行查找,略高端,未研究。

Ctrl+P 打开搜索框。举个栗子:1、输入当前项目中的文件名,快速搜索文件,2、输入@和关键字,查找文件中函数名,3、输入:和数字,跳转到文件中该行代码,4、输入#和关键字,查找变量名。

Ctrl+G 打开搜索框,自动带:,输入数字跳转到该行代码。举个栗子:在页面代码比较长的文件中快速定位。

Ctrl+R 打开搜索框,自动带@,输入关键字,查找文件中的函数名。举个栗子:在函数较多的页面快速查找某个函数。

Ctrl+: 打开搜索框,自动带#,输入关键字,查找文件中的变量名、属性名等。

Ctrl+Shift+P 打开命令框。场景栗子:打开命名框,输入关键字,调用sublime text或插件的功能,例如使用package安装插件。

Esc 退出光标多行选择,退出搜索框,命令框等。

显示类

Ctrl+Tab 按文件浏览过的顺序,切换当前窗口的标签页。

Ctrl+PageDown 向左切换当前窗口的标签页。

Ctrl+PageUp 向右切换当前窗口的标签页。

Alt+Shift+1 窗口分屏,恢复默认1屏(非小键盘的数字)

Alt+Shift+2 左右分屏-2列

Alt+Shift+3 左右分屏-3列

Alt+Shift+4 左右分屏-4列

Alt+Shift+5 等分4屏

Alt+Shift+8 垂直分屏-2屏

Alt+Shift+9 垂直分屏-3屏

Ctrl+K+B 开启/关闭侧边栏。

F11 全屏模式

Shift+F11 免打扰模式

配置编译环境

控制台输入(以C++为例)

原理很简单,就是在外部建立一个用来执行文件的 bat,然后调用它。注意的就是,需要用start 来打开一个新窗口,同时需要 pause 一下来看结果,其中很蛋疼的就是Sublime默认后台执行你的start,如果你的pause和start放在一个文件了pause对start %1 的文件是无效的,因此其实需要建立两个文件。注意环境变量。。。(关于什么是环境变量,三两句解释不清楚,最好自己百度一下。)

配好之后个人感觉控制台输入意义不是很大,做题的话都是从文件读入,做开发基本不需要读入。So~ 各位慎重。

MyCRun.bat

@echo off

%1

echo.

echo ——————-

pause

exit
MyCallRun.bat

@start  MyCRun %1

配置文件在 Sublime Text 3\Packages\C++.sublime-package 。 先备份一下。

修改里面的 C++.sublime-build 为

{

“shell_cmd”: “g++ \”${file}\” -o \”${file_path}/${file_base_name}\””,

“file_regex”: “^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$”,

“working_dir”: “${file_path}”,

“selector”: “source.c, source.c++”,

“variants”:

[

{

“name”: “Run”,

“shell_cmd”: “g++ \”${file}\” -o \”${file_path}/${file_base_name}\” && MyCallRun \”${file_path}/${file_base_name}.exe\””    //  其实就是这里加了个MyCallRun

}

]

}

C/C++

Sublime Text 3 默认配置好了 c++ 。但是需要你自己把 gcc 目录添加进环境变量

Java

Sublime Text 3 默认只运行了 javac,需要自己添加运行。

苦逼看不懂 Sublime 的命令格式,于是把 javac 改成一个自己的bat。(感觉也可以像C++那样用 && 连起来)

在命令行可直接访问的地方建立 myJRun.bat (我直接放在 jdk/bin 下了)

@ECHO OFF

cd %~dp1

ECHO Compiling %~nx1…

IF EXIST %~n1.class (

DEL %~n1.class

)

javac %~nx1

IF EXIST %~n1.class (

ECHO Running…

ECHO ———————-OUTPUT———————-

java %~n1

)

注意不能使用 cls 。

修改java的编译选项(备份好原来的)。

目录:Packages/Java.sublime-package/JavaC.sublime-build

{

“shell_cmd”: “myJRun.bat \”$file\””,

“file_regex”: “^(…*?):([0-9]*):?([0-9]*)”,

“selector”: “source.java”

}

这样以后写的Java代码点 Build 就会自动运行了。

这种办法不能跨平台,再研究研究Sublime自己的方式。

Go

用 Sublime 开发 golang 的环境很简单,只需要安装一个 GoSublime 就差不多了。

php实现zip压缩文件解压缩

仔细的研究了一下,原来用php写的解压程序效率比想象的还是高很多的,既然这么好,干脆再优化一下后用到自己后台中,虽然现在大部分空间的控制面板中有压缩和解压这个功能,但是毕竟有时候有些麻烦。

做这个之前,没有接触过php压缩这一块,网上搜了一些,大多数都是php压缩类、压缩函数,少则几百行,多的就几千行代码。这对于我这种新手来说很摸不到头脑,再说我也不用这么复杂的功能。最后参考函数手册,理清楚了几个相关的函数后,就明白了怎么去整了。

记得要开启 zip ,把 php.ini 中的 extension=php_zip.dll 前面的分号去掉。

源码范例:
代码如下:
<?php

//需开启配置 php_zip.dll
//phpinfo();
header(“Content-type:text/html;charset=utf-8”);

function get_zip_originalsize($filename, $path) {
//先判断待解压的文件是否存在
if(!file_exists($filename)){
die(“文件 $filename 不存在!”);
}
$starttime = explode(‘ ‘,microtime()); //解压开始的时间

//将文件名和路径转成windows系统默认的gb2312编码,否则将会读取不到
$filename = iconv(“utf-8″,”gb2312”,$filename);
$path = iconv(“utf-8″,”gb2312”,$path);
//打开压缩包
$resource = zip_open($filename);
$i = 1;
//遍历读取压缩包里面的一个个文件
while ($dir_resource = zip_read($resource)) {
//如果能打开则继续
if (zip_entry_open($resource,$dir_resource)) {
//获取当前项目的名称,即压缩包里面当前对应的文件名
$file_name = $path.zip_entry_name($dir_resource);
//以最后一个“/”分割,再用字符串截取出路径部分
$file_path = substr($file_name,0,strrpos($file_name, “/”));
//如果路径不存在,则创建一个目录,true表示可以创建多级目录
if(!is_dir($file_path)){
mkdir($file_path,0777,true);
}
//如果不是目录,则写入文件
if(!is_dir($file_name)){
//读取这个文件
$file_size = zip_entry_filesize($dir_resource);
//最大读取6M,如果文件过大,跳过解压,继续下一个
if($file_size<(1024*1024*6)){
$file_content = zip_entry_read($dir_resource,$file_size);
file_put_contents($file_name,$file_content);
}else{
echo “<p> “.$i++.” 此文件已被跳过,原因:文件过大, -> “.iconv(“gb2312″,”utf-8″,$file_name).” </p>”;
}
}
//关闭当前
zip_entry_close($dir_resource);
}
}
//关闭压缩包
zip_close($resource);
$endtime = explode(‘ ‘,microtime()); //解压结束的时间
$thistime = $endtime[0]+$endtime[1]-($starttime[0]+$starttime[1]);
$thistime = round($thistime,3); //保留3为小数
echo “<p>解压完毕!,本次解压花费:$thistime 秒。</p>”;
}

$size = get_zip_originalsize(‘20131101.zip’,’temp/’);

?>

测试解压了一个300多KB的小文件,花了0.115秒,测试解压了一个30多MB的(网页文件,小文件比较多),花了20多秒。

Ubuntu下使用Vi是方向键变乱码 退格键不能使用的解决方法

一、编辑/etc/vim/vimrc.tiny

由于/etc/vim/vimrc.tiny的拥有者是root用户,所以要在root的权限下对这个文件进行修改。很简单,这个文件里面的倒数第二句话是“set compatible”,

将“compatible”改成“nocompatible”非兼容模式就可以解决方向键变ABCD的问题了。接下来要解决Backspace键的问题也很简单,在刚才那句话后面再加一句:

  1. set backspace=2

就可以解决问题了。这个时候,无论对于哪个用户,使用vi都能很方便的按照我们的习惯去编辑文件了。

二、安装vim full版本

由于Ubuntu预安装的是tiny版本,所以会导致我们在使用上的产生上述的不便。但是,我们安装了vim的full版本之后,键盘的所有键在vi下就很正常了。

首先,要先卸掉旧版的vi,输入以下命令:

  1. sudo apt-get remove vim-common

然后安装full版的vim,输入命令:

  1. sudo apt-get install vim

这样安装好了之后,我们在编辑文件的时候依然是使用“vi”命令来启动新装的vim,但是操作起来比tiny更加方便了。

三、添加”.vimrc”文件

这并不是一个聪明的方法。它是在用户的个人目录下,编辑.vimrc文件(注意文件名是以“.”开头的),添加下面两句语句:

  1. set nocompatible          //以非兼容模式工作
  2. set backspace=2

Ubuntu 能PING IP但不能PING主机域名的解决方法

——————————————————————————-

——————————————————————————-

vi /etc/nsswitch.conf

hosts: files dns

networks: files

改成:

hosts: files dns wins

networks: files

如果不一样的话,就在hosts:原来那行后面加个wins 就行了。

——————————————————————————-

——————————————————————————-

最近碰到了这么一个问题: ping一个域名domain_name的时候提示”ping: unknown host domain_name“,但是ping域名对应的IP地址 (使用host或nslookup获取) 却没有问题。

so-name, real-name && linker-name
Linux共享库 (shared object) 的real-name命名规则为: libname.so.x.y.z。其中x表示主 (Major) 版本号,不同主版本号的库之间是不兼容的;y表示次 (Minor) 版本号,它表示库的增量升级,高的次版本号的库向后兼容 (Backwards Compatible) 低的次版本号的库;z表示发布 (Release) 版本号,表示库的一些修正,性能的改进等。

共享库的so-name是在real-name的基础上去掉次版本号和发布版本号。so-name文件一般都是一个指向对应的real-name文件的一个软链接。

共享库的linker-name是应用程序链接的时候的搜索名,通常是so-name的一个软链接。

运行ldconfig时,系统会更新所有的软链接,使它们指向最新版本的共享库。

libc && glibc
标准C库 (the standard C library) 实现了ISO C标准,包含了一套所有C程序都可以使用的函数。libc通常被用作the standard C library的简写。

libc也被用作一个标准C库的实现的名字。在19世纪90年代早期,Linux内核的开发者把glibc 1.x独立了出来 (forked glibc),并把它称为”Linux libc”,也简称为libc。Linux libc主要发布了2, 3, 4, 5四个版本。

1997年,FSF发布了glibc 2.0,它对POSIX标准有更好的支持,并且代码的可移植性更好。因此,现在所有主要的Linux发行版都是使用glibc

Linux libc的最后的so-name是libc.so.5。因此后来的glibc 2.x使用的so-name是libc.so.6。

网络信息服务(Network Information Service, NIS)
NIS也曾被称YP (Yellow Pages),它是一个基于RPC (Remote Procedure Call Protocol) 的客户机/服务器系统,允许一个NIS域中的一组机器共享一系列配置文件。在NIS环境中,有主服务器、从服务器和客户机三种类型的主机。服务器的作用是充当主机配置信息的中央数据库。主服务器上保存着这些信息的权威副本,而从服务器则是保存这些信息的冗余副本。客户机依赖于服务器向它们提供这些信息。

DNS Resolver
一个域名 (Domain Name) 由一个或多个标签 (label) 组成,标签之间用点隔开。最右端的标签代表顶级域 (top-level domain,TLD)。DNS (Domain Name System, 域名解析系统) 是互联网的一项核心服务,它是一个分布式层次化的系统,能够将域名和IP地址相互映射。DNS通过允许一个域名服务器把它的一部分域名解析服务委托给子服务器而实现了一种层次化的域名空间。DNS由解析器 (Resolver) 和域名服务器两部分组成。

DNS系统的客户端被称为DNS解析器 (DNS Resolver)。在Linux系统上,解析器并不是特指某个应用程序,而是指解析器库。这个库包含了标准C库中的一系列函数,最主要的两个函数是gethostbyname()gethostbyaddr()。可以对DNS解析器进行配置,使得它们查找/etc/hosts中的信息、查询DNS服务器或者使用网络信息服务系统的配置信息。libc使用/etc/host.conf配置文件;glibc使用/etc/nsswitch.conf配置文件。

/etc/host.conf中主要的选项有:(1) order指定域名解析的查找顺序,其中hosts表示/etc/hosts配置文件;bind表示查询DNS服务器;nis表示查询NIS系统的配置信息。(2) multi [on|off]指定/etc/hosts中的主机是否可以有多个IP地址。

/etc/nsswitch.conf是名字服务开关 (name service switch) 的配置文件,其中对应DNS解析器的数据库名字是hosts:。它的主要选项有:(1) dns表示使用DNS解析地址 (2) files表示使用/etc/hosts/etc/network配置文件 (3) nis或nisplus。

DNS服务器在/etc/resolv.conf中配置。

ping
ping命令用来测试网络上的一台主机是否能够连通。ping命令向目标主机发送ICMP (Internet Control Message Protocol) 回声请求消息然后等待目标主机的回应,与此同时计算消息从源主机到目标主机的往返时间 (round-trip time,RTT)。

问题解决
首先,能够ping域名对应的IP,显然不可能是服务器禁止了ping服务 (使用防火墙等)。host和nslookup能够返回域名对应的IP地址,那么/etc/resolv.conf中的DNS设置也是没有问题的。

事实上,使用ping命令处理一个域名的时候,是使用gethostbyname()函数返回对应的主机信息 (参加源代码); 而host和nslookup则是直接使用/etc/resolv.conf中的DNS服务器。因此,需要查看/etc/nsswitch.conf中的hosts:数据库是否打开了dns选项。

Ubuntu 的网络配置文件

Ubuntu 的网络配置文件主要有以下几个:IP地址配置文件、主机名称配置文件、DNS配置文件。

IP地址配置文件: /etc/network/interfaces
打开后里面可设置DHCP或手动设置静态ip。前面auto eth0,让网卡开机自动挂载.

1. 以DHCP方式配置网卡

编辑文件/etc/network/interfaces:
sudo vi /etc/network/interfaces

并用下面的行来替换有关eth0的行:
# The primary network interface – use DHCP to find our address
auto eth0
iface eth0 inet dhcp

用下面的命令使网络设置生效:
sudo /etc/init.d/networking     restart
也可以在命令行下直接输入下面的命令来获取地址
sudo dhclient eth0

2. 为网卡配置静态IP地址

编辑文件/etc/network/interfaces:

sudo vi /etc/network/interfaces

并用下面的行来替换有关eth0的行:# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.3.90
gateway 192.168.3.1
netmask 255.255.255.0

将上面的ip地址等信息换成你自己就可以了.用下面的命令使网络设置生效:
sudo /etc/init.d/networking restart

3. 设定第二个IP地址(虚拟IP地址)

编辑文件/etc/network/interfaces: sudo vi /etc/network/interfaces

在该文件中添加如下的行:
auto eth0:1
iface eth0:1 inet static
address 192.168.1.60
netmask 255.255.255.0
network x.x.x.x
broadcast x.x.x.x
gateway x.x.x.x

根据你的情况填上所有诸如address,netmask,network,broadcast和gateways等信息.
用下面的命令使网络设置生效:
sudo /etc/init.d/networking restart

主机名称配置文件(/bin/hostname)

使用下面的命令来查看当前主机的主机名称:

sudo /bin/hostname

使用下面的命令来设置当前主机的主机名称:

sudo /bin/hostname newname

系统启动时,它会从/etc/hostname来读取主机的名称.

DNS配置文件

首先,你可以在/etc/hosts中加入一些主机名称和这些主机名称对应的IP地址,这是简单使用本机的静态查询.

要访问DNS 服务器来进行查询,需要设置/etc/resolv.conf文件.
sudo vi /etc/resolv.conf

nameserver 202.96.128.68

nameserver 61.144.56.101

nameserver 192.168.8.220

/重新设置网络,以启用新设置

sudo /etc/init.d/networking restart

ssdb 命令说明

et:
说明:设置指定 key 的值内容. cmd:set(‘key’, ‘value’);

Ssdb 命令说明

setx:
说明:设置指定 key 的值内容, 同时设置存活时间. cmd:setx(‘key’, ‘value’, 60); 单位:秒

setnx:
说明:当 key 不存在时, 设置指定 key 的值内容. 如果已存在, 则不设置. cmd:setnx(‘key’, ‘value’);

get:
说明:获取指定 key 的值内容. cmd:get(‘key’);

getset:
说明:更新 key 对应的 value, 并返回更新前的旧的 value. cmd:getset(‘key’, ‘value’);

del:
说明:删除指定的 key. cmd:$ssdb->del(‘key’);

incr:
说明:使 key 对应的值增加 num. 参数 num 可以为负数. 如果原来的值不是

整数(字符串形式的整数), 它会被先转换成整数. cmd:incr(‘key’, 1);

exists:
说明:判断指定的 key 是否存在. cmd:exists(‘key’);

keys:
说明:列出处于区间 (key_start, key_end] 的 key 列表.(“”, “”] 表示整个区间.

limit 最多返回这么多元素 cmd:keys(‘a’, ‘z’, 10);

scan:
说明:列出处于区间 (key_start, key_end] 的 key-value 列表.(“”, “”] 表示整个

区间. limit 最多返回这么多元素 cmd:scan(‘a’, ‘z’, 10);

rscan:
说明:列出处于区间 (key_start, key_end] 的 key-value 列表, 反向顺序.(“”, “”]

表示整个区间. cmd:rscan(‘a’, ‘z’, 10);

multi_set:
说明:批量设置一批 key-value.
cmd:multi_set(new Object[]{“key1″,”value1″,”key2″,”value2”});

multi_get:
说明:批量获取一批 key 对应的值内容. cmd:multi_get(array(‘k1’, ‘k2’));

multi_del:
说明:批量删除一批 key 和其对应的值内容. cmd:multi_del(array(‘k1’, ‘k2’));

hset:
说明:设置 hashmap 中指定 key 对应的值内容. cmd:hset(‘h’, ‘key’, ‘value’);

hget:
说明:获取 hashmap 中指定 key 的值内容. cmd:hget(‘h’, ‘key’);

hdel:
说明:获取 hashmap 中的指定 key. cmd:hdel(‘h’, ‘key’);

//java 语法

hincr:
说明:使 hashmap 中的 key 对应的值增加 num. 参数 num 可以为负数. 如

果原来的值不是整数(字符串形式的整数), 它会被先转换成整数. cmd:hincr(‘h’, ‘key’, 1);

hexists:
说明:判断指定的 key 是否存在于 hashmap 中. cmd:hexists(‘h’, ‘key’);

hsize:
说明:返回 hashmap 中的元素个数. cmd:hsize(‘h’);

hlist:
说明:列出名字处于区间 (name_start, name_end] 的 hashmap.(“”, “”] 表示整

个区间.
cmd:$ssdb->hlist(‘a’, ‘z’, 10);

hkeys:
说明:列出 hashmap 中处于区间 (key_start, key_end] 的 key 列表.(“”, “”] 表

示整个区间.
cmd:hkeys(‘h’, ‘a’, ‘z’, 10);

hgetall:
说明:返回整个 hashmap. cmd:hgetall(‘h’);

hscan:
说明:列出 hashmap 中处于区间 (key_start, key_end] 的 key-value 列表.(“”,

“”] 表示整个区间. cmd:hscan(‘h’, ‘a’, ‘z’, 10);

hrscan:
说明:列出 hashmap 中处于区间 (key_start, key_end] 的 key-value 列表, 反

向顺序.(“”, “”] 表示整个区间. cmd:hrscan(‘h’, ‘a’, ‘z’, 10);

hclear:
说明:删除 hashmap 中的所有 key. cmd:hclear(‘h’);

multi_hset:
说明:批量设置 hashmap 中的 key-value. cmd:multi_zset(‘z’, array(‘a’ => 1,’b’ => 2));

multi_hget:
说明:批量获取 hashmap 中多个 key 对应的权重值. cmd:multi_hget(‘h’, array(‘k1’, ‘k2’));

multi_hdel:
说明:指删除 hashmap 中的 key. cmd:multi_hdel(‘h’, array(‘k1’, ‘k2’));

zset:
说明:设置 zset 中指定 key 对应的权重值. cmd:zset(‘z’, ‘key’, 100);

zget:
说明:获取 zset 中指定 key 的权重值. cmd:zget(‘z’, ‘key’);

zdel:
说明:获取 zset 中的指定 key. cmd:zdel(‘hz, ‘key’);

zincr:
说明:使 zset 中的 key 对应的值增加 num. 参数 num 可以为负数. 如果原

来的值不是整数(字符串形式的整数), 它会被先转换成整数. cmd:zincr(‘z’, ‘key’, 1);

zexists:
说明:判断指定的 key 是否存在于 zset 中. cmd:zexists(‘z’, ‘key’);

zsize:
说明:返回 zset 中的元素个数. cmd:zsize(‘z’);

zlist:
说明:列出名字处于区间 (name_start, name_end] 的 zset.(“”, “”] 表示整个区

间.
cmd:zlist(‘a’, ‘z’, 10);

zkeys:
说明:列出 zset 中处于区间 (key_start+score_start, score_end] 的 key 列表.

如果 key_start 为空, 那么对应权重值大于或者等于 score_start 的 key 将被返回. 如果 key_start 不为空, 那么对应权重值大于 score_start 的 key, 和大于 key_start 且对应权重值等于 score_start 的 key将被返回.也就是说, 返回的 key 在 (key.score == score_start && key > key_start || key.score > score_start) 区间.(“”, “”] 表示整个区间.

cmd:zkeys(‘z’, ”, 1, 100, 10); zscan:

说明:列出 zset 中的 key-score 列表,name – zset 的名字.key_start – 参见 zkeys().score_start – 参见zkeys().score_end – 参见 zkeys().limit – 最多返回这么 多个元素.

cmd:zscan(‘z’, ”, 1, 100, 10); zrscan:

说明:列出 zset 中的 key-score 列表, 反向顺序.

cmd:zrscan(‘a’, ‘z’, 10); zrank, zrrank:

说明:注意! 本方法可能会非常慢! 请在离线环境中使用.返回指定 key 在 zset 中的排序位置(排名), 排名从 0 开始. zrrank 获取是是倒序排名.

cmd:zrank(‘z’, ‘k1’); zrange, zrrange:

说明:注意! 本方法在 offset 越来越大时, 会越慢!根据下标索引区间 [offset, offset + limit) 获取 key-score 对, 下标从 0 开始. zrrange 是反向顺序获取.

cmd:zrange(‘z’, 0, 10); zclear:

说明:删除 zset 中的所有 key.

cmd:zclear(‘z’); zcount:

说明:返回处于区间 [start,end] key 数量.

cmd:zcount(‘z’, 0, 100); zsum:

说明:返回 key 处于区间 [start,end] 的 score 的和.

cmd:zsum(‘z’, 0, 100); zavg:

说明:返回 key 处于区间 [start,end] 的 score 的平均值.

cmd:zavg(‘z’, 0, 100); zremrangebyrank:

说明:删除位置处于区间 [start,end] 的元素.

cmd:zremrangebyrank(‘z’, 1, 2); zremrangebyscore:

说明:删除权重处于区间 [start,end] 的元素.

cmd:zremrangebyscore(‘z’, 1, 2); multi_zset:

说明:批量设置 zset 中的 key-score.

cmd:multi_zset(‘z’, array(‘a’ => 1,’b’ => 2,)); multi_zget:

说明:批量获取 zset 中多个 key 对应的权重值.

cmd:multi_zget(‘z’, array(‘k1’, ‘k2’)); multi_zdel:

说明:指删除 zset 中的 key.

cmd:multi_zdel(‘z’, array(‘k1’, ‘k2’)); qsize:

说明:返回队列的长度.

cmd:qsize(‘q’); qclear:

说明:清空一个队列.

cmd:qclear(‘q’); qfront:

说明:返回队列的第一个元素.

cmd:qfront(‘q’); qback:

说明:返回队列的最后一个元素.

cmd:qback(‘q’); qget:

说明:返回指定位置的元素. 0 表示第一个元素, 1 是第二个 … -1 是最后一个.

cmd:qget(‘q’, -2); qslice:

说明:返回下标处于区域 [begin, end] 的元素. begin 和 end 可以是负数

cmd:qslice(‘q’, 0, -1); qpush:

说明:本函数是 qpush_back() 的别名. qpush_front:

说明:往队列的首部添加一个或者多个元素

cmd:qpush_front(‘q’, ‘a’); qpush_back:

说明:往队列的尾部添加一个或者多个元素

cmd:qpush_back(‘q’, ‘a’); qpop:

说明:本函数是 qpop_front() 的别名. qpop_front:

说明:删除并返回队列的第一个元素. cmd:qpop_front(‘q’);

qpop_back: 说明:删除并返回队列的最后一个元素. cmd:qpop_back(‘q’);

batch, exec:
说明:批量执行一批命令. 批量命令可以减少客户端和服务器之间的交互延时,

能提高性能和响应速度.
cmd: $ssdb->batch()->set(‘a’, 1)->get(‘a’)->exec();// 或 者

$ssdb->batch();$ssdb->set(‘a’, 1);$ssdb->get(‘a’);$ssdb->exec();

Mysql命令行添加用户

创建用户:

命令:

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

说明:username – 你将创建的用户名, host – 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,  如 果想让该用户可以从任意远程主机登陆,可以使用通配符%. password –  该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登 陆服务器.

例子:

CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456'; 
CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY '123456'; 
CREATE USER 'pig'@'%' IDENTIFIED BY '123456'; 
CREATE USER 'pig'@'%' IDENTIFIED BY ''; 
CREATE USER 'pig'@'%';

授权:

命令:

GRANT privileges ON databasename.tablename TO 'username'@'host'

说明: privileges – 用户的操作权限,如SELECT , INSERT , UPDATE  等(详细列表见该文最后面).如果要授予所 的权限则使用ALL.;databasename –  数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用* 表示, 如*.*.
例子:

GRANT SELECTINSERT ON test.user TO 'pig'@'%'; 
GRANT ALL ON *.* TO 'pig'@'%';

注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:

GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION

设置与更改用户密码

命令:

SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');

如果是当前登陆用户用

SET PASSWORD = PASSWORD("newpassword");

撤销用户权限

命令:

REVOKE privilege ON databasename.tablename FROM 'username'@'host';

说明: privilege, databasename, tablename – 同授权部分.
例子

REVOKE SELECT ON *.* FROM 'pig'@'%';

注意: 假如你在给用户’pig’@’%’授权的时候是这样的(或类似 的):GRANT SELECT ON test.user TO  ‘pig’@’%’, 则在使用 REVOKE SELECT ON *.* FROM  ‘pig’@’%’;命令并不能撤销该用户对test数据库中user表的SELECT 操作. 相反,如果授权使用的是GRANT SELECT ON  *.* TO ‘pig’@’%’;则 REVOKE SELECT ON test.user FROM  ‘pig’@’%’;命令也不能撤销该用户对test数据库中user表的 Select 权限.

具体信息可以用命令SHOW GRANTS FOR ‘pig’@’%’; 查看.

删除用户

命令:

DROP USER ‘username’@'host’;

一个典型的数据库建表, 建用户过程:

创建用于localhost连接的用户并指定密码 
mysql> create user 'pcom'@'localhost' identified by 'aaa7B2249'; 
Query OK, 0 rows affected (0.00 sec) 
     
创建数据库 
mysql> create database pcom default character set utf8 collate utf8_bin; 
Query OK, 1 row affected (0.00 sec) 
     
给本地用户授权, 这里不需要指定密码 
mysql> grant all on pcom.* to 'pcom'@'localhost'; 
Query OK, 0 rows affected (0.00 sec) 
     
给其他IP地址下的用户授权, 注意: 这里必须指定密码, 否则就可以无密码访问 
mysql> grant all on pcom.* to 'pcom'@'192.168.0.0/255.255.0.0' identified by 'aaa7B2249'; 
Query OK, 0 rows affected (0.00 sec) 
     
同理 
mysql> grant all on pcom.* to 'pcom'@'172.20.0.0/255.255.0.0' identified by 'aaa7B2249'; 
Query OK, 0 rows affected (0.00 sec) 
     
Done!

附表:在MySQL中的操作权限

ALTER
Allows use of ALTER TABLE. 
    
ALTER ROUTINE 
Alters or drops stored routines. 
    
CREATE
Allows use of CREATE TABLE. 
    
CREATE ROUTINE 
Creates stored routines. 
    
CREATE TEMPORARY TABLE
Allows use of CREATE TEMPORARY TABLE. 
    
CREATE USER
Allows use of CREATE USERDROP USERRENAME USERand REVOKE ALL PRIVILEGES. 
    
CREATE VIEW
Allows use of CREATE VIEW. 
    
DELETE
Allows use of DELETE. 
    
DROP
Allows use of DROP TABLE. 
    
EXECUTE
Allows the user to run stored routines. 
    
FILE 
Allows use of SELECT… INTO OUTFILE and LOAD DATA INFILE. 
    
INDEX
Allows use of CREATE INDEX and DROP INDEX. 
    
INSERT
Allows use of INSERT. 
    
LOCK TABLES 
Allows use of LOCK TABLES on tables for which the user also has SELECT privileges. 
    
PROCESS 
Allows use of SHOW FULL PROCESSLIST. 
    
RELOAD 
Allows use of FLUSH. 
    
REPLICATION 
Allows the user to ask where slave or master 
    
CLIENT 
servers are. 
    
REPLICATION SLAVE 
Needed for replication slaves. 
    
SELECT
Allows use of SELECT. 
    
SHOW DATABASES 
Allows use of SHOW DATABASES. 
    
SHOW VIEW
Allows use of SHOW CREATE VIEW. 
    
SHUTDOWN 
Allows use of mysqladmin shutdown. 
    
SUPER 
Allows use of CHANGE MASTERKILLPURGE MASTER LOGSand SET GLOBAL SQL statements. Allows mysqladmin debug command. Allows one extra connection to be made if maximum connections are reached. 
    
UPDATE
Allows use of UPDATE. 
    
USAGE 
Allows connection without any specific privileges.

最后不要忘记刷新数据库

flush privileges;