Zend Studio 8.0.1 正式版官方下载地址
windows版:http://downloads.zend.com/studio-eclipse/8.0.1/ZendStudio-8.0.1.msi
linux版(32位):http://downloads.zend.com/studio-eclipse/8.0.1/ZendStudio-8.0.1-x86.tar.gz
linux版(64位):http://downloads.zend.com/studio-eclipse/8.0.1/ZendStudio-8.0.1-x86_64.tar.gz

 

jansfer

307076195D2D40756195D2D4

Rsync使用的Rsync演算法来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 核心算法 假定在名为和的两台计算机之间同步相似的文件A与B,其中对文件A拥有访问权,对文件B拥有访问权
Rsync使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
算法核心部分:
假定在名为α和β的两台计算机之间同步相似的文件A与B,其中α对文件A拥有访问权,β对文件B拥有访问权。并且假定主机α与β之间的网络带宽很小。那么rsync算法将通过下面的五个步骤来完成:
1.β将文件B分割成一组不重叠的固定大小为S字节的数据块。最后一块可能会比S 小。
2.β对每一个分割好的数据块执行两种校验:一种是32位的滚动弱校验,另一种是128位的MD4强校验。
3.β将这些校验结果发给α。
4.α通过搜索文件A的所有大小为S的数据块(偏移量可以任选,不一定非要是S的倍数),来寻找与文件B的某一块有着相同的弱校验码和强校验码的数据块。这项工作可以借助滚动校验的特性很快完成。
5.α发给β一串指令来生成文件A在β上的备份。这里的每一条指令要么是对文件B经拥有某一个数据块而不须重传的证明,要么是一个数据块,这个数据块肯定是没有与文件B的任何一个数据块匹配上的。
Rsync的优点如下:
1.可以镜像保存整个目录树和文件系统;
2.可以很容易做到保持原来文件的权限、时间、软硬链接等;
3.无须特殊权限即可安装;
4.优化的流程,文件传输效率高;
5.可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
6.支持匿名传输。

基本语法

  • 通过远程 shell 方式:
  • rsync [OPTION] [USER@]HOST:SRC DEST
  • 使用远程 shell(如 ssh, rsh)实现将远程机器的内容拷贝到本地机器。 SRC 地址路径中以单个冒号 ":" 进行分隔。
  • rsync [OPTION] SRC [USER@]HOST:DEST
  • 使用远程 shell(如 rsh、ssh)实现本地机器的内容拷贝到远程机器。 DEST 地址路径中以单个冒号 ":" 进行分隔。
  • 通过 rsync daemon 方式:
  • rsync [OPTION] [USER@]HOST::SRC DEST 或
  • rsync [OPTION] rsync://[USER@]HOST[:PORT]/SRC [DEST]
  • 从远程 rsync 服务器中拷贝文件到本地机。 SRC 地址路径中以双冒号 "::" 进行分隔。
  • rsync [OPTION] SRC [USER@]HOST::DEST 或
  • rsync [OPTION] SRC rsync://[USER@]HOST[:PORT]/DEST
  • 从本地机器拷贝文件到远程 rsync 服务器中。 DEST 地址路径中以双冒号 "::" 进行分隔。

如果 rsync 命令中只指定 SRC 参数而不指定 DEST 参数,则意为显示源文件列表而非进行同步拷贝。 rsync 有许多功能选项,常用的选项如下:

rsync 常用参数

选项
描述

-a, –archive
归档模式,保持所有文件属性,等同于 -rlptgoD

-v, –verbose
详细信息输出

-r, –recursive
对子目录进行递归处理

-R, –relative
使用相对路径信息

-b, –backup
创建备份

-z, –compress
对备份的文件在传输时进行压缩处理

–delete
用于同步目录,从 DEST 中将 SRC 不存在的文件进行删除

–progress
显示备份过程

rsync模式
rsync [OPTION]… SRC [SRC]… [USER@]HOST:DEST
rsync [OPTION]… [USER@]HOST:SRC DEST
rsync [OPTION]… SRC [SRC]… DEST
rsync [OPTION]… [USER@]HOST::SRC [DEST]
rsync [OPTION]… SRC [SRC]… [USER@]HOST::DEST
rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]

rsync有六种不同的工作模式:
拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。
使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。
从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。

使用实例:

  • 查看服务端文件及列表
    • # rsync 9.186.110.53::

      查看服务端可用的模块列表以及注释信息

    • # rsync ibmuser@9.186.110.53::www/

      查看服务端 www 模块中的目录及文件列表(使用 rsyncd 用户认证方式)

    • # rsync ibmuser@9.186.110.53:/var/www/html/

      查看服务端 /var/www/html 目录中的内容(使用服务端的系统用户进行验证,如 ibmuser)

  • 保持客户端与服务端的数据同步
    • # rsync -avz ibmuser@9.186.110.53::www/ /backup1/

      使用后台服务方式将服务端 www 模块下的内容备份到本地 /backup1 目录中,备份时保留原有权限、属性、属主及符号连接等,并使用压缩方式加快数据传输。

    • # rsync – avz ibmuser@9.186.110.53:/var/www/html /backup2/

      使用 ssh 方式将远程的 /var/www/html 目录备份到本地 /backup2/ 目录下

    • # rsync -avz –delete ibmuser@9.186.110.53::www/ /backup3/

      将远程 www 模块备份到本地 /backup3/ 目录中,同时进行同步目录,删除本地目录中多余的文件。

当服务端的数据出现问题时,需要通过客户端的数据对服务端进行恢复,只要客户端有服务端的写入权限,即可通过调换 rsync 命令的 SRC、DEST 参数进行恢复。

来源

Tcpdump分析TCP协议三次握手过程

   TCP(Transmission Control Protocol) 传输控制协议

   TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

    位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)

    Sequence number(顺序号码) Acknowledge number(确认号码)

第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

完成三次握手,主机A与主机B开始传送数据。
实例:

IP 192.168.1.116.3337 > 192.168.1.123.7788: S 3626544836:3626544836
IP 192.168.1.123.7788 > 192.168.1.116.3337: S 1739326486:1739326486 ack 3626544837

IP 192.168.1.116.3337 > 192.168.1.123.7788:   ack 1739326487,ack 1
第一次握手:192.168.1.116发送位码syn=1,随机产生seq number=3626544836的数据包到192.168.1.123,192.168.1.123由SYN=1知道,192.168.1.116要求建立联机;

第二次握手:192.168.1.123收到请求后要确认联机信息,向192.168.1.116发送

   ack    number=3626544837,syn=1,ack=1,随机产生seq=1739326486的包

第三次握手:192.168.1.116收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,192.168.1.116会再发送

ack    number=1739326487,ack=1,192.168.1.123收到后确认seq=seq+1,ack=1则连接建立成功。

下载安装XHProf

sudo apt-get install php5-dev
wget http://pecl.php.net/get/xhprof-0.9.2.tgz
tar zxf xhprof-0.9.2.tgz
cd xhprof-0.9.2
cp -r xhprof_html xhprof_lib <directory_for_htdocs>
cd extension
phpize
./configure
make
make install

创建xhprof.ini

touch /etc/php5/fpm/conf.d/xhprof.ini

为文件添加以下内容

[xhprof]
extension=xhprof.so
;
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
;
xhprof.output_dir=/tmp/xhprof
创建output_dir<输出路径>:
mkdir /tmp/xhprof && chmod 777 /tmp/xhprof

重启服务让修改生效,现在就可以使用XHProf了,不过为了显示效果更炫,最好继续安装Graphviz。

安装Graphviz

wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
tar zxf graphviz-2.24.0.tar.gz
cd graphviz-2.24.0
./configure
make
make install

安装完成后,会生成/usr/local/bin/dot文件,你应该确保路径在PATH环境变量里,以便XHProf能找到它。

在PHP中使用XHProf

// start profiling
xhprof_enable();

// run program
....

// stop profiler
$xhprof_data = xhprof_disable();

//
// Saving the XHProf run
// using the default implementation of iXHProfRuns.
//
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";

$xhprof_runs = new XHProfRuns_Default();

// Save the run under a namespace "xhprof_foo".
//
// **NOTE**:
// By default save_run() will automatically generate a unique
// run id for you. [You can override that behavior by passing
// a run id (optional arg) to the save_run() method instead.]
//
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");

echo "---------------\n".
"Assuming you have set up the http based UI for \n".
"XHProf at some address, you can view run at \n".
"http://<xhprof-ui-address>/index.php?run=$run_id&source=xhprof_foo\n".
"---------------\n";

参考

http://www.ooso.net/archives/522

http://hi.baidu.com/thinkinginlamp/blog/item/f4bd08fa1a03ba9e59ee90fd.html

CURL? 嗯,说来话长了~~~~
这东西现在已是苹果机上内置的命令行工具之一了,可见其魅力之一斑

1)
二话不说,先从这里开始吧!
curl http://www.yahoo.com
回车之后,www.yahoo.com 的html就稀里哗啦地显示在屏幕上了~~~~~
2)
嗯,要想把读过来页面存下来,是不是要这样呢?
curl http://www.yahoo.com > page.html
当然能够,但不用这么麻烦的!
用curl的内置option就好,存下http的结果,用这个option: -o
curl -o page.html http://www.yahoo.com
这样,您就能够看到屏幕上出现一个下载页面进度指示。等进展到100%,自然就OK咯
3)
什么什么?!访问不到?肯定是您的proxy没有设定了。
使用curl的时候,用这个option能够指定http访问所使用的proxy服务器及其端口: -x
curl -x 123.45.67.89:1080 -o page.html http://www.yahoo.com
4)
访问有些网站的时候比较讨厌,他使用cookie来记录session信息。
像IE/NN这样的浏览器,当然能够轻易处理cookie信息,但我们的curl呢?…..
我们来学习这个option: -D <– 这个是把http的response里面的cookie信息存到一个特别的文档中去
curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.yahoo.com
这样,当页面被存到page.html的同时,cookie信息也被存到了cookie0001.txt里面了
5)
那么,下一次访问的时候,如何继续使用上次留下的cookie信息呢?要知道,很多网站都是靠监控您的cookie信息,
来判断您是不是不按规矩访问他们的网站的。
这次我们使用这个option来把上次的cookie信息追加到http request里面去: -b
curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b cookie0001.txt http://www.yahoo.com
这样,我们就能够几乎模拟任何的IE操作,去访问网页了!
6)
稍微等等~~~~~我似乎忘记什么了~~~~~
对了!是浏览器信息~~~~
有些讨厌的网站总要我们使用某些特定的浏览器去访问他们,有时候更过分的是,还要使用某些特定的版本~~~~
NND,哪里有时间为了他去找这些怪异的浏览器呢!?
好在curl给我们提供了一个有用的option,能够让我们随意指定自己这次访问所宣称的自己的浏览器信息: -A
curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.yahoo.com
这样,服务器端接到访问的需要,会认为您是个运行在Windows 2000上的IE6.0,嘿嘿嘿,其实也许您用的是苹果机呢!
而"Mozilla/4.73 [en] (X11; U; Linux 2.2; 15 i686"则能够告诉对方您是一台PC上跑着的Linux,用的是Netscape 4.73,呵呵呵
7)
另外一个服务器端常用的限制方法,就是检查http访问的referer。比如您先访问首页,再访问里面所指定的下载页,这第二次访问的referer地址就是第一次访问成功后的页面地址。这样,服务器端只要发现对下载页面某次访问的referer地址不 是首页的地址,就能够断定那是个盗连了~~~~~
讨厌讨厌~~~我就是要盗连~~~~~!!
幸好curl给我们提供了设定referer的option: -e
curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -e "mail.yahoo.com" -o page.html -D cookie0001.txt http://www.yahoo.com
这样,就能够骗对方的服务器,您是从mail.yahoo.com点击某个链接过来的了,呵呵呵
8)
写着写着发现漏掉什么重要的东西了!—– 利用curl 下载文档
刚才讲过了,下载页面到一个文档里,能够使用 -o ,下载文档也是相同。
比如, curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
这里教大家一个新的option: -O
大写的O,这么用: curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
这样,就能够按照服务器上的文档名,自动存在本地了!
再来一个更好用的。
假如screen1.JPG以外更有screen2.JPG、screen3.JPG、….、screen10.JPG需要下载,难不成还要让我们写一个script来完成这些操作?
不干!
在curl里面,这么写就能够了:
curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen[1-10].JPG
呵呵呵,厉害吧?!~~~
9)
再来,我们继续讲解下载!
curl -O http://cgi2.tky.3web.ne.jp/~/[001-201].JPG
这样产生的下载,就是
~zzh/001.JPG
~zzh/002.JPG

~zzh/201.JPG
~nick/001.JPG
~nick/002.JPG

~nick/201.JPG
够方便的了吧?哈哈哈
咦?高兴得太早了。
由于zzh/nick下的文档名都是001,002…,201,下载下来的文档重名,后面的把前面的文档都给覆盖掉了~~~
没关系,我们更有更狠的!
curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~/[001-201].JPG
–这是…..自定义文档名的下载?
–对头,呵呵!
#1是变量,指的是这部分,第一次取值zzh,第二次取值nick
#2代表的变量,则是第二段可变部分—[001-201],取值从001逐一加到201
这样,自定义出来下载下来的文档名,就变成了这样:
原来: ~zzh/001.JPG —> 下载后: 001-zzh.JPG
原来: ~nick/001.JPG —> 下载后: 001-nick.JPG
这样一来,就不怕文档重名啦,呵呵
9)
继续讲下载
我们平时在windows平台上,flashget这样的工具能够帮我们分块并行下载,还能够断线续传。
curl在这些方面也不输给谁,嘿嘿
比如我们下载screen1.JPG中,突然掉线了,我们就能够这样开始续传
curl -c -O http://cgi2.tky.3wb.ne.jp/~zzh/screen1.JPG
当然,您不要拿个flashget下载了一半的文档来糊弄我~~~~别的下载软件的半截文档可不一定能用哦~~~

分块下载,我们使用这个option就能够了: -r
举例说明
比如我们有一个http://cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 要下载(赵老师的电话朗诵 :D
我们就能够用这样的命令:
curl -r 0-10240 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
curl -r 10241-20480 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
curl -r 20481-40960 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
curl -r 40961- -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3
这样就能够分块下载啦。
但是您需要自己把这些破碎的文档合并起来
假如您用UNIX或苹果,用 cat zhao.part* > zhao.mp3就能够
假如用的是Windows,用copy /b 来解决吧,呵呵
上面讲的都是http协议的下载,其实ftp也相同能够用。
用法嘛,
curl -u name:passwd ftp://ip:port/path/file
或大家熟悉的
curl ftp://name:passwd@ip:port/path/file
10)
说完了下载,接下来自然该讲上传咯
上传的option是 -T
比如我们向ftp传一个文档: curl -T localfile -u name:passwd ftp://upload_site:port/path/
当然,向http服务器上传文档也能够
比如 curl -T localfile http://cgi2.tky.3web.ne.jp/~zzh/abc.cgi
注意,这时候,使用的协议是HTTP的PUT method
刚才说到PUT,嘿嘿,自然让老服想起来了其他几种methos还没讲呢!
GET和POST都不能忘哦。
http提交一个表单,比较常用的是POST模式和GET模式
GET模式什么option都不用,只需要把变量写在url里面就能够了
比如:
curl http://www.yahoo.com/login.cgi?user=nickwolfe&password=12345
而POST模式的option则是 -d
比如,curl -d "user=nickwolfe&password=12345" http://www.yahoo.com/login.cgi
就相当于向这个站点发出一次登陆申请~~~~~
到底该用GET模式还是POST模式,要看对面服务器的程式设定。
一点需要注意的是,POST模式下的文档上的文档上传,比如
<form method="POST" enctype="multipar/form-data" action="http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi">
<input type=file name=upload>
<input type=submit name=nick value="go">
</form>
这样一个HTTP表单,我们要用curl进行模拟,就该是这样的语法:
curl -F upload=@localfile -F nick=go http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi
罗罗嗦嗦讲了这么多,其实curl更有很多很多技巧和用法
比如 https的时候使用本地证书,就能够这样
curl -E localcert.pem https://remote_server
再比如,您还能够用curl通过dict协议去查字典~~~~~
curl dict://dict.org/d:computer
今天就先讲到这里吧,呵呵。疯狂的curl功能,需要您—一起来发掘。

« 上一页下一页 »