网站开发的过程中需要了解很多概念,这里一小部分
第一: 域名
域名并不是必须的东西,通过ip地址也可以直接访问网站。但是基本每个网站都自己的域名。
域名对人类是友好的,ip地址对计算机的是友好的。
biadu.com 是个域名, 360.com 是个域名 ,这里写的很清楚 http://baike.baidu.com/view/43.htm
域名的作用就是方便人们的记忆,域名具有唯一性,也就是说全世界同一个域名只有一个,就像
身份证号码一样,没有两个是一样的。
第二:web服务器
网站的内容全部是来自web服务器的。web服务器负责传送这些内容给浏览器。
也就是说web服务器把网站的文件发给浏览器。
这里没有说web服务器生成了文件。通常文件有两类
已经有的文件,比如一个图片,一个js文件 ... 这些文件是固定不变了,web服务器读取文件并传送给浏览器。
需要动态生成的文件。 通常web服务器自己是不直接参与的,需要很其他的程序配合生成最后的结果。 这样的网站就是动态网站。
具体可以看看下什么是动态网站。
第三:http协议
http详细的规定了,web服务器和代理(通常就是浏览器)传送文件的的具体过程,和细节。
比如大名鼎鼎的404, 200 , 301 当然这里代码很多。
404就是 web服务器告诉代理(浏览器)文件没有找到。
200就是说 web服务器正确的返回了代理(浏览器)需要的文件。
301表示 web服务器高速代理(浏览器)你请求的文件已经到另外一个地方去了。
具体的内容比较多
第四:浏览器
浏览器的作用就是对web服务器传送的文件进行解析。最后显示给用户。
第五:html
html就是一个网页的骨架,网页的内容。网页的结构。
第六:javascript
网页的动态效果,一般是通过javascript 完成的,比如点击出现个提示框, 点击图片会改变,文字大小会改变。
这里都是 javascript 来完成的,当然也不全是。
第七:css
css 就是把网站变得更漂亮的工具。
如果要深入的了解网站运行的原理,需要了解http协议,因为网站就是基于http的。
这里不打算讨论复杂的内容,简单的做下科普。
理解网站的运行原理
我们就拿 www.ippbs.net 作为一个示例。
从用户的角度看。
用户需要在浏览器中输入网站的网址就可以看到网站。
首先
第一个问题: 显示的页面从哪里来的?
答案可定是从远程的服务器来的,具体的说。 当输入 www.ipbbs.net 的是,需要做解析, 解析的
意思就是,把网址 www.ipbbs.net 变成一个 ip地址,因为网络中通信都是使用ip地址来通信的。
这就可以知道服务器的位置,并进行通信。
第二个问题: 远程服务器传回那些信息?
传回的信息有文本信息,图片,或者flash 等。 有很多种格式的文件。
核心是一些文本文件。比如查看文章的源代码就是传回来的东西。
这里需要注意,虽然输入了一个网址,传回啦的文件,可以是对个的。 一个图片是一个文件,
一个js代码可以是一个文件, 一个css可以是一个文件。
第三个问题: 浏览器是怎样呈现出来的?
浏览器获得这些文件后,就开始处理。最会呈现给用户。
首先看看百度官方是怎么说的(http://zhanzhang.baidu.com/wiki/36)
“ 百度从未提供过网站权重信息数据以及对外查询服务。第三方站长工具的数据并非百度官方数据,不代表真实的网站情况,百度对使用此类数据而造成的困扰不负任何责任。请网站管理员不要将这些“百度权重”数值当成真实数值来参考使用”
简单的说,百度的意思就是 , 这个所谓的“百度权重”不是百度自己评定的。 是第三方评定的。
不过相当多的人还是比较看重这个东西的。那么就应该明白这个东西是怎么来的。
首先要明白关键词指数,就是说这个一个词每天被搜索多少次。
排名越靠前的被点击的概率越大。
百度权重就主要受两个元素的影响。关键词指数和网站的排名。
说的简单的指数反应了 百度能给这个网站带来多少流量。
效果图
实现这个效果需要两个步骤
第一: 制作一份php的函数文件
或者说是一个字典文件, 因为自动补全用的就是字典中的内容。
这里通过php程序自动获得
<?php// 获得所有的函数, 这里有系统函数和内部的函数
$funs_all = get_defined_functions();
// 仅仅提取 系统的内部函数
$funs = $funs_all['internal'];// 获得系统的常量
$constants = get_defined_constants();// 把系统常量加入
foreach($constants as $k => $v) {
$funs[] = $k ;
}// 生产字典, 名字就是 php_functions.txt
file_put_contents('php_functions.txt', implode(PHP_EOL, $funs));
这样多的好处就是方便, 如果从php源代码中寻找需要,和当前使用的版本一致,这样才准确。
第二: 修改 .vimrc 文件
在 .vimrc 中加入
set dictionary+=~/php_functions.txt #保存函数列表的那个文件
set complete-=k complete+=k
function! InsertTabWrapper()
let col=col('.')-1
if !col || getline('.')[col-1] !~ '\k'
return "\<TAB>"
else
return "\<C-N>"
endif
endfunction
inoremap <TAB> <C-R>=InsertTabWrapper()<CR>
第三使用方法:
输入一个或者多个字符后按下tab, 就自动出现, 继续按tab就循环选择
参考:
http://home.51.com/oxff/diary/item/10052427.html
linux 标注的输入和输出、错误是2是 0, 1 (linux 中的标准输入,输出,和错误)
自己可以自定义一些。
首先要明白文件操作的三种方式。
第一: 读取
第二: 追加
第三: 重写(先把文件清空,之后写入)
比如一个文件
[root@qd ~]# cat a.txt
test
[root@qd ~]# cat < a.txt # 读取操作
test
[root@qd ~]# echo "new test" > a.txt #重写操作
[root@qd ~]# echo "other " >> a.txt #追加操作
[root@qd ~]# cat a.txt
new test
other
如果要自定义一些使用命令exec
做一个读的操作
[root@qd ~]# exec 3< a.txt
[root@qd ~]# cat <&3
new test
other
这里可以看到 没有使用文件名通过一个数 就读取了文件。
这里要注意 exec 3< 后面的文件是必须存在的。
做一个重写的操作
[root@qd ~]# exec 4>a.txt
[root@qd ~]# echo "test" >&4
[root@qd ~]# cat a.txt
test
做一个追加操作
[root@qd ~]# exec 5>>a.txt
[root@qd ~]# echo "test" >&5
[root@qd ~]# cat a.txt
test
test
这里可以看到 出现了两个test.
linux 中有三个特殊的文件描述符
0 -- 表示标准的输入
1 -- 表示标准的输出
2 -- 表示错误输出
命令
[root@qd ~]# echo "ccc" 0> a.txt
ccc
[root@qd ~]# echo "ccc" 1> a.txt
[root@qd ~]# echo "ccc" 2> a.txt
ccc
可以看到0, 2 又输出了 ccc. 1 没有,因为直接写入到文件中了。
什么时候2起作用比如
[root@qd ~]# not a com 2> err.txt
[root@qd ~]# cat err.txt
-bash: not: command not found
命令出错的时候,就用到了。
如果想记录命令执行的输出可以用
xxx 2>> err.txt 1>>ok.txt
这样错了的就重写到 err.txt , 成功的就重写的到 ok.txt
不管执行的结果都可以同一个文件可以用
xxx &>> all.txt
基本的移动 h,j,k, l
一次移动多个字符 {x}h, x表示一个数字,比如 5h 可以配合 h,j, k, l
w -- 向后移动一个单词, 光标在单词的第一个字母
b -- 向前移动一个单词, 光标在单词的第一个字母
e -- 向后移动一个单词, 光标在单词的最后一个字母
ge -- 向前移动一个单词, 光标在单词的最后一个字母
$ -- 移动到行尾
^ -- 移动到行的开始并且不是空字符
0 -- 移动到行的第一个字符,不管是不是空字符
f{x} -- 移动到一下个 x字符处, 比如 fa fb
F{x} -- 移动到上一个 x字符处
t{x} -- 移动到 x 的前一个字符(向右移动)
T{x} -- 移动到 x 的后一个字符(向左移动)
% -- 相匹配的{}, [], () 之间来回跳转
1G -- 移动到第一行
1gg -- 移动到第一行
gg -- 移动到第一行
G -- 最后一行
90% -- 移动到文件90%的地方
H ,M L -- 分别一移动到屏幕的 最上面,中间,最下面
CTRL-G 显示 光标在文件中位置
:set ruler -- 一直显示光标的位置
ctrl-u -- 向上滚动半个屏幕
ctrl-d -- 向下滚动半个屏幕
ctrl-e -- 向上滚动一行
ctrl-y -- 向下滚动一行
ctrl-f -- 向下滚动一屏
ctrl-b -- 向上滚动一屏
zz -- 当前行是屏幕的中间,前提是上下有足够的空间
/ -- 特殊字符的处理 .*[]^%/?~$
? -- 向上搜索 , n 下一个
:set ignorecase 不区分大小写
/\<hello\> 单词搜索,
:set hlsearch -- 搜索大的都高亮
`` -- 如果使用 g 跳转, `` 表示跳回原来的位置
ctrl-o 跳转到更远的地方
ctrl-i 跳回更近的地方
m -- 标记位置可以定义 26个比如 ma, mc
`a -- 调到m标记a的地方
`` -- 上次跳转的地方
`" -- 调到上次编辑的地方
`[ -- 最后一次修改的开始的地方
`] -- 最后一次修改的结束的的地方
k -- 向上移动
j -- 向下移动
h -- 向左移动
l -- 向右移动
x -- 删除一个字符
i -- 有正常模式进入到插入模式
d 删除
dd 删除一行
d$ 删除到行尾从光标开始的地方
d^ 从行开始删除到光标的地方
J -- 两行的合并, 这个是大写的
u -- 撤销
ctrl - r -- 反撤销
U -- 仅仅撤销在一行的操作
o -- 另一起一行插入(当前行之下)
O -- 另起一行 (当前行之上)
ZZ -- 保存退出
:q -- 退出
:q! -- 强制退出
:help i -- 查看 "i"快捷键的帮助 , help CTRL-A, help index, ...
/usr/share/vim/vim72/vimrc_example.vim .vimrc 示例文件
:echo $VIMRUNTIME 在vim中查看vim路径
shell 中直接 运行 vimtutor 简单的教程
ciw -- 表示删除一个单词后进入插入模式, 并且光标可以是单词的任何一个位置
diw -- 可以ciw 一样,不过没有进入插入模式
x <==> dl 删除当前的一个字符
X <==> dh 删除左边一个字符
D <==> d$
C <==> c$
s <==> cl 修改一个字符 表示删除当前的然后变为插入模式
S <==> cc 修改一行
r 表示替换一个字符, 替换后没有进入插入模式
xp -- 交互两个相邻的字母
daw -- del a word 包括空白
diw -- 删除一个单词不包括空白
~ 改大小写
// 添加反斜杠
string addcslashes(string $str, string $charlist);
// 仅仅对 单引号, 双引号、反斜线、NUL 添加 反斜线
string addslashes(string $str);
// 把acsii 字符串转变为16进制的数, 但是前面没有 0x
string bin2hex(string $str);
// 把 数变成字母 (ascii范围), ord() 相反
string chr (int $ascii) ;
//把一个字符串,分割成多行
string chunk_split(string $body [, int $chunklen=76 [, string $end = "\r\n"]]);
// 写入文件
int fprintf( resource $handle, string $fomat, mixed $arg1, mixed $arg2 ...);
// 十六进制 变成 二进制
string hex2bin(string $data);
// html实体
string htmlspecialchars(string $string);
// 数组转换成字符串, 函数的别名 join
string implode( string $glue, array $pieces);
// 首字母小写
string lcfirst(string $str);
// 文件的MD5
string md5_file( string $filename);
// 字符串的md5
string md5(string $str);
//
string nl2br (string $strng );
// 字符串解析成变量
void parse_str( string $ster [, array $arr]);
// 格式话输出
int printf ( string $format [, mixed $arg ...);
// 格式化返回
string sprintf( string $format [, mixed $args ..]);
// 不区分大小写的替换
mixed str_ireplace (mixed $search , mixed $replace , mixed $subject [, int &$count]);
// 填充
string str_pad(string $input , int $pad_length );
// 重复
string str_repeat( string $input, int $multiplier);
// 替换
mixed str_replace( mix $search , mixed $replace , mixed $subject [, int &$count]);
// 区分大小写比较
int strcasecmp(string $str1, string $str2);
// 随机打乱一个字符串
string str_shuffle(string $str);
// 字符串变成数组, 按照长度分
array str_split( string $string [, int $aplit_lenght = 1]);
// 去除html标签
string strip_tags( string $str [, string $allowable_tags]);
// 删除反引用
string stripcslashes (string $str);
string stripslashes( string $str);
// 首次出现的位置
int stripos ( string $haystack , string $needle);
int strpos( string $haystack, string $needle);
// 忽略大小查找 如果找到了, 返回 开始到 找到的地方
string stristr(string $haystack, mixed $needle );
// 自然比较
int strnatcasecmp(string $str1, string $st2);
// 区分大小写
int strnatcmp(string $str1, string $str2);
// 查找字符串首次出现的位置
string strstr (string $haystack , mixed $needle);
//
string strtolower( string $string);
string strtoupper (string $string);
// 字符串替换
string strtr (string $str, string $from, string $to);
string strtr (string $str, array $replace_pairs);
// 子字符串
string substr( string $string , int $start [, int $lenght]);
//
string ucfirst( string $str);
string ucwords( string $str);
// 打断字符
string wordwrap (string $str [, int $width = 75 [, string $break = '\n' [, bool $cut = fasle ]]] );
对字符串进行编码, 用于处理url
string urlencode( string $str);
对字符串解码
string urldecode( string $str);
解析一个url, 获得 协议、主机、端口 ... 详细信息,返回一个数组
mixed parse_url(string $url [, int $component = -1);
用于构造一个查询
http_build_query(array('name'=> 'root', 'passwd'=>'123')); 已经经过 url_encode 的编码了
获得 meta 信息, 返回一个数组。
$tags = get_meta_tags('http:www.xxxx.com');
获得 返回的头信息, 一个数组
print_r(get_headers($url));
base64编码, 方便传输
string base64_encode(string $data);
base64 解码
string base64_decode($string);
url 编码
string rawurlencode (string $str); 除去-_之外的字符都被传唤
string rawurldecode (string $str);