sizeof()---函数用法
[int占4字节,short占2字节]
1.0 回答下列问题:[答案在文章末尾]
1. sizeof(char) =
2. sizeof 'a' =
3. sizeof "a" =
4. strlen("a")) =
如果你答对了全部四道题,那么你可以不用细看下面关于sizeof的论述。如果你答错了部分题目,
那么就跟着我来一起探讨关于sizeof的用法了。
对于前面的题目,我想一般有一定C基础的同志应该不会答错1和4题。至于第2题,我想应该要清楚sizeof是求字符串所占的内存。
"a"在内存中的表现为a\0,别忘了末尾的\0也占一个字节呢。至于第2题,可能有些人会惊讶了。C 语言中,字符常数是int 型,
因此 sizeof('a') 是 sizeof(int), 这是另一个与 C++ 不同的地方。既然字符常数是int 型,那么int就可以存放4个字符,
我们可以得到sizeof 'abcd'为 4。
===========================================================================================================阅读全文
[int占4字节,short占2字节]
1.0 回答下列问题:[答案在文章末尾]
1. sizeof(char) =
2. sizeof 'a' =
3. sizeof "a" =
4. strlen("a")) =
如果你答对了全部四道题,那么你可以不用细看下面关于sizeof的论述。如果你答错了部分题目,
那么就跟着我来一起探讨关于sizeof的用法了。
对于前面的题目,我想一般有一定C基础的同志应该不会答错1和4题。至于第2题,我想应该要清楚sizeof是求字符串所占的内存。
"a"在内存中的表现为a\0,别忘了末尾的\0也占一个字节呢。至于第2题,可能有些人会惊讶了。C 语言中,字符常数是int 型,
因此 sizeof('a') 是 sizeof(int), 这是另一个与 C++ 不同的地方。既然字符常数是int 型,那么int就可以存放4个字符,
我们可以得到sizeof 'abcd'为 4。
===========================================================================================================阅读全文
首先打开两个shell终端;
一个shell下输入如下命令:
[root@MagicLinux ~]# echo -e "at \r" >/dev/ttyS0 //{echo -e可以发送回车等特殊字符;}
这个是发送字符"at "到/dev/ttyS0即串口0;
另一个shell下输入如下命令:
[root@MagicLinux ~]# cat /dev/ttyS0
这个是接收来自串口0的字符;
一个shell下输入如下命令:
[root@MagicLinux ~]# echo -e "at \r" >/dev/ttyS0 //{echo -e可以发送回车等特殊字符;}
这个是发送字符"at <CR>"到/dev/ttyS0即串口0;
另一个shell下输入如下命令:
[root@MagicLinux ~]# cat /dev/ttyS0
这个是接收来自串口0的字符;
求助shell echo “HEX字符串” 到串口ttyUSB0的方法
发送字符到串口
echo -n “abc” > /dev/ttyUSB0 #这个正常
串口接受到 61 62 63 即abc
但是我想echo 到串口直接发送FE 01 02 的HEX值
echo -n “FE 01 02” /dev/ttyUSB0 #这里该怎么写呢?
不知道描述的清楚否 请教大神~解惑
echo -n -e "\xFE\x01\x02"
来自:http://www.right.com.cn/forum/forum.php?mod=viewthread&tid=147778&highlight=ttyUSB0
http://bbs.chinaunix.net/thread-4057939-1-1.html
http://blog.csdn.net/sidely/article/details/40181463
http://blog.chinaunix.net/uid-7491192-id-2051154.html
一个shell下输入如下命令:
[root@MagicLinux ~]# echo -e "at \r" >/dev/ttyS0 //{echo -e可以发送回车等特殊字符;}
这个是发送字符"at "到/dev/ttyS0即串口0;
另一个shell下输入如下命令:
[root@MagicLinux ~]# cat /dev/ttyS0
这个是接收来自串口0的字符;
一个shell下输入如下命令:
[root@MagicLinux ~]# echo -e "at \r" >/dev/ttyS0 //{echo -e可以发送回车等特殊字符;}
这个是发送字符"at <CR>"到/dev/ttyS0即串口0;
另一个shell下输入如下命令:
[root@MagicLinux ~]# cat /dev/ttyS0
这个是接收来自串口0的字符;
求助shell echo “HEX字符串” 到串口ttyUSB0的方法
发送字符到串口
echo -n “abc” > /dev/ttyUSB0 #这个正常
串口接受到 61 62 63 即abc
但是我想echo 到串口直接发送FE 01 02 的HEX值
echo -n “FE 01 02” /dev/ttyUSB0 #这里该怎么写呢?
不知道描述的清楚否 请教大神~解惑
echo -n -e "\xFE\x01\x02"
来自:http://www.right.com.cn/forum/forum.php?mod=viewthread&tid=147778&highlight=ttyUSB0
http://bbs.chinaunix.net/thread-4057939-1-1.html
http://blog.csdn.net/sidely/article/details/40181463
http://blog.chinaunix.net/uid-7491192-id-2051154.html
dmidecode -t 1 #Manufacturer,Product Name判断是否是虚拟机还是实体机。
根据这个NF5280M2,能查出更多信息机房和机架信息罢?
dmidecode在 Linux 系统下获取有关硬件方面的信息。dmidecode 遵循 SMBIOS/DMI 标准,以一种可读的方式dump出机器的DMI(Desktop Management Interface)信息, 其输出的信息包括 BIOS、系统、主板、处理器、内存、缓存等等, 既可以得到当前的配置,也可以得到系统支持的最大配置,比如说支持的最大内存数等。
1、查看内存槽数、那个槽位插了内存,大小是多少
dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range
2、查看最大支持内存数
dmidecode|grep -P 'Maximum\s+Capacity'
3、查看槽位上内存的速率,没插就是unknown。
dmidecode|grep -A16 "Memory Device"|grep 'Speed'
dmidecode|grep -A16 "Memory Device"|grep 'Speed'
来自:http://www.ttlsa.com/linux/the-linux-dmidecode-command-to-get-the-hardware-information/
Linux---查看内存型号:
sudo dmidecode -t memory
简单点
1. 查看物理CPU的个数
#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
2. 查看逻辑CPU的个数
#cat /proc/cpuinfo |grep "processor"|wc -l
3. 查看CPU是几核
#cat /proc/cpuinfo |grep "cores"|uniq
4. 查看CPU的主频
#cat /proc/cpuinfo |grep MHz|uniq
来自:http://ldbjakyo.iteye.com/blog/785745
http://jingyan.baidu.com/article/63acb44a81001361fcc17e21.html
RSS -- 进程本身的内存占用
VSZ -- 算上共享库的总占用
ps -eo pid,user,comm,args,%cpu,%mem,rss,vsz,sz
查看内存、CPU
ps -fewL|grep face_svr
ps -fp $(pgrep -d, face_svr)
top c
VIRT 使用的虚拟内存总量, VIRT=SWAP+RES
RES 使用的、未被换出的物理内存大小, RES=CODE+DATA
SWAP 使用的虚拟内存中被换出的大小
SHR 共享内存大小
CODE 可执行代码占用的物理内存大小
DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小
%MEM 使用的物理内存百分比, =RES/总共内存大小
示例:
ps -eo pid,user,comm,args,%cpu,%mem,rss,vsz,sz
PID USER COMMAND COMMAND %CPU %MEM RSS VSZ SZ
1 root init /sbin/init 0.0 0.3 1236 2900 725
注释:
RSS -- 进程本身的内存占用
VSZ -- 算上共享库的总占用
linux基本操作
passwd修改密码
如果忘记密码,进single模式直接设置新密码(e-à+single-àb)。
查看系统版本:
[root@localhost ~]# lsb_release -a阅读全文
根据这个NF5280M2,能查出更多信息机房和机架信息罢?
dmidecode在 Linux 系统下获取有关硬件方面的信息。dmidecode 遵循 SMBIOS/DMI 标准,以一种可读的方式dump出机器的DMI(Desktop Management Interface)信息, 其输出的信息包括 BIOS、系统、主板、处理器、内存、缓存等等, 既可以得到当前的配置,也可以得到系统支持的最大配置,比如说支持的最大内存数等。
1、查看内存槽数、那个槽位插了内存,大小是多少
dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range
2、查看最大支持内存数
dmidecode|grep -P 'Maximum\s+Capacity'
3、查看槽位上内存的速率,没插就是unknown。
dmidecode|grep -A16 "Memory Device"|grep 'Speed'
dmidecode|grep -A16 "Memory Device"|grep 'Speed'
来自:http://www.ttlsa.com/linux/the-linux-dmidecode-command-to-get-the-hardware-information/
Linux---查看内存型号:
sudo dmidecode -t memory
简单点
1. 查看物理CPU的个数
#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
2. 查看逻辑CPU的个数
#cat /proc/cpuinfo |grep "processor"|wc -l
3. 查看CPU是几核
#cat /proc/cpuinfo |grep "cores"|uniq
4. 查看CPU的主频
#cat /proc/cpuinfo |grep MHz|uniq
来自:http://ldbjakyo.iteye.com/blog/785745
http://jingyan.baidu.com/article/63acb44a81001361fcc17e21.html
RSS -- 进程本身的内存占用
VSZ -- 算上共享库的总占用
ps -eo pid,user,comm,args,%cpu,%mem,rss,vsz,sz
查看内存、CPU
ps -fewL|grep face_svr
ps -fp $(pgrep -d, face_svr)
top c
VIRT 使用的虚拟内存总量, VIRT=SWAP+RES
RES 使用的、未被换出的物理内存大小, RES=CODE+DATA
SWAP 使用的虚拟内存中被换出的大小
SHR 共享内存大小
CODE 可执行代码占用的物理内存大小
DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小
%MEM 使用的物理内存百分比, =RES/总共内存大小
示例:
ps -eo pid,user,comm,args,%cpu,%mem,rss,vsz,sz
PID USER COMMAND COMMAND %CPU %MEM RSS VSZ SZ
1 root init /sbin/init 0.0 0.3 1236 2900 725
注释:
RSS -- 进程本身的内存占用
VSZ -- 算上共享库的总占用
linux基本操作
passwd修改密码
如果忘记密码,进single模式直接设置新密码(e-à+single-àb)。
查看系统版本:
[root@localhost ~]# lsb_release -a阅读全文
根本办法:
Options-〉“Document Options”-〉在“File filter” 里边加上*.cc
或者
Options-〉Preferences-〉Languages-〉点选C++ Language,然后点击右边“Doc Types”按钮弹出-〉“Document Options”-〉在“File filter” 里边加上*.cc
Options-〉“Document Options”-〉在“File filter” 里边加上*.cc
或者
Options-〉Preferences-〉Languages-〉点选C++ Language,然后点击右边“Doc Types”按钮弹出-〉“Document Options”-〉在“File filter” 里边加上*.cc
post.php
<?php
$cfg = array (
// 用户名
name=>"xdy108@126.com",
// 密码
pass=>"001002",
cookie_file=>"cookie.txt"
);
include("httpd.php");
$c = new http("login.kaixin.com", "/Login.do", "POST");
$c->set_val("email", $cfg["name"]);
$c->set_val("password", $cfg["pass"]);
$c->set_val("login_type", "1000");
$c->set_val("autoLogin", "true");
$c->set_val("origURL", "http://www.kaixin.com/SysHome.do");
$c->send();
$source = $c->get_cnt(true);
$s_regex = '@(societyguester=\w+;)@s';
$a_matches = array ();
preg_match_all($s_regex, $source, $a_matches);
$cookie_login_key = $a_matches[1][1];//cookie放入这个变量
$c2 = new http("gf.kaixin.com", "/bank.do", "POST", 80, $cookie_login_key);
$c2->send();
$source = $c2->get_cnt();
echo $source;
exit;
?>
httpd.php阅读全文
<?php
$cfg = array (
// 用户名
name=>"xdy108@126.com",
// 密码
pass=>"001002",
cookie_file=>"cookie.txt"
);
include("httpd.php");
$c = new http("login.kaixin.com", "/Login.do", "POST");
$c->set_val("email", $cfg["name"]);
$c->set_val("password", $cfg["pass"]);
$c->set_val("login_type", "1000");
$c->set_val("autoLogin", "true");
$c->set_val("origURL", "http://www.kaixin.com/SysHome.do");
$c->send();
$source = $c->get_cnt(true);
$s_regex = '@(societyguester=\w+;)@s';
$a_matches = array ();
preg_match_all($s_regex, $source, $a_matches);
$cookie_login_key = $a_matches[1][1];//cookie放入这个变量
$c2 = new http("gf.kaixin.com", "/bank.do", "POST", 80, $cookie_login_key);
$c2->send();
$source = $c2->get_cnt();
echo $source;
exit;
?>
httpd.php阅读全文
用一片DS18B20构成测温系统,测量的温度精度达到0.1度,测量的温度的范围在-20度到+100度之间,用8位数码管显示出来。
阅读全文
阅读全文
While thinking about a programming language deficiency, I rediscovered polymorphism. Overloading a function allows a function call to behave differently when passed variables of different type. I was trying to devise a method of simulating function overloading, because PHP does not support it. I considered implementing a function with an if-else statement ladder that tests the type of the actual argument and executes statements that correspond to the argument’s type. This technique may ultimately result in a monolithic function or a function implementation that is too knowledgeable of multiple class hierarchies. Rethinking a problem that I was hoping to solve with function overloading allowed me to accept the lack of this language feature and think of other techniques.
There are two problems that arise from the if-else statement ladder approach. The implementation of such a function would require the function to have knowledge of every data type to be used with it. This problem can be extended to knowing class hierarchies, if subclassing is involved. This means that an introduction of a new data type to be processed by the function would require the function to be modified, which creates the possibility that the modification will break other existing code that relies on the function. The second problem is having the function’s maintainer think about how the function should operate on the different data types that can be passed to it. This responsibility is better placed on the people who maintain the different data types.
One solution that deals with the problems in the if-else statement ladder is polymorphism. Polymorphism allows a set of heterogeneous elements to be treated identically. It is achieved through inheritance. In PHP, interface inheritance and implementation inheritance can be written explicitly through the use of interfaces and class extensions, respectively. Interfaces specify a class interface without providing an implementation. Classes from different class hierarchies can implement an interface, and in this way, it can be seen as different from abstract classes. When a class is defined to implement an interface, the language enforces a rule that the class implements all features of the interface. A method that operates on an interface will accept an object of any class that implements the interface, and it will function correctly.
Here is a toy example of interface inheritance, polymorphism, and PHP type hinting:
Type hints help the PHP interpreter enforce the restriction that outputArea() operates only on objects of data types that implement the HasArea interface. Rectangle and Territory are from unrelated class hierarchies. outputArea() can operate on these classes, since these classes implement the HasArea interface.
The explored method accomplishes only some of the features offered by function overloading. In the above example, outputArea() was restricted to one argument. In some programming languages, a function can be overloaded on the number of arguments along with the types of those arguments and the order that those types appear in the argument list. This method, however, was useful in a problem I considered solving with function overloading.
http://www.phpchina.com/html/10/10-3496.html
There are two problems that arise from the if-else statement ladder approach. The implementation of such a function would require the function to have knowledge of every data type to be used with it. This problem can be extended to knowing class hierarchies, if subclassing is involved. This means that an introduction of a new data type to be processed by the function would require the function to be modified, which creates the possibility that the modification will break other existing code that relies on the function. The second problem is having the function’s maintainer think about how the function should operate on the different data types that can be passed to it. This responsibility is better placed on the people who maintain the different data types.
One solution that deals with the problems in the if-else statement ladder is polymorphism. Polymorphism allows a set of heterogeneous elements to be treated identically. It is achieved through inheritance. In PHP, interface inheritance and implementation inheritance can be written explicitly through the use of interfaces and class extensions, respectively. Interfaces specify a class interface without providing an implementation. Classes from different class hierarchies can implement an interface, and in this way, it can be seen as different from abstract classes. When a class is defined to implement an interface, the language enforces a rule that the class implements all features of the interface. A method that operates on an interface will accept an object of any class that implements the interface, and it will function correctly.
Here is a toy example of interface inheritance, polymorphism, and PHP type hinting:
<?
interface HasArea
{
public function area();
public function areaUnit();
}
abstract class Shape
{
private $color;
public function __construct( $color )
{
$this->color = $color;
}
public function getColor()
{
return $this->color;
}
}
class Rectangle extends Shape implements HasArea
{
private $w;
private $h;
public function __construct( $color, $w, $h )
{
parent::__construct($color);
$this->w = $w;
$this->h = $h;
}
public function area()
{
return ($this->w * $this->h);
}
public function areaUnit()
{
if( $this->area() > 1 )
return "square meters";
else
return "square meter";
}
}
class Territory implements HasArea
{
private $r;
public function __construct()
{
$this->r = $r;
}
public function area()
{
return 5;
}
public function areaUnit()
{
return "cities";
}
}
function outputArea( HasArea $ha )
{
echo "The area is: "
. " {$ha->area()} {$ha->areaUnit()}\n";
}
$HAs = array(
new Rectangle("red",2,3),
new Territory()
);
foreach( $HAs as $HA )
{
outputArea( $HA );
}
?>
interface HasArea
{
public function area();
public function areaUnit();
}
abstract class Shape
{
private $color;
public function __construct( $color )
{
$this->color = $color;
}
public function getColor()
{
return $this->color;
}
}
class Rectangle extends Shape implements HasArea
{
private $w;
private $h;
public function __construct( $color, $w, $h )
{
parent::__construct($color);
$this->w = $w;
$this->h = $h;
}
public function area()
{
return ($this->w * $this->h);
}
public function areaUnit()
{
if( $this->area() > 1 )
return "square meters";
else
return "square meter";
}
}
class Territory implements HasArea
{
private $r;
public function __construct()
{
$this->r = $r;
}
public function area()
{
return 5;
}
public function areaUnit()
{
return "cities";
}
}
function outputArea( HasArea $ha )
{
echo "The area is: "
. " {$ha->area()} {$ha->areaUnit()}\n";
}
$HAs = array(
new Rectangle("red",2,3),
new Territory()
);
foreach( $HAs as $HA )
{
outputArea( $HA );
}
?>
Type hints help the PHP interpreter enforce the restriction that outputArea() operates only on objects of data types that implement the HasArea interface. Rectangle and Territory are from unrelated class hierarchies. outputArea() can operate on these classes, since these classes implement the HasArea interface.
The explored method accomplishes only some of the features offered by function overloading. In the above example, outputArea() was restricted to one argument. In some programming languages, a function can be overloaded on the number of arguments along with the types of those arguments and the order that those types appear in the argument list. This method, however, was useful in a problem I considered solving with function overloading.
http://www.phpchina.com/html/10/10-3496.html
原理
一般,有2种方法可以导出doc文档,一种是使用com,并且作为php的一个扩展库安装到服务器上,然后创建一个com,调用它的方法。安装过 office的服务器可以调用一个叫word.application的com,可以生成word文档,不过这种方式我不推荐,因为执行效率比较低(我测试了一下,在执行代码的时候,服务器会真的去打开一个word客户端)。理想的com应该是没有界面的,在后台进行数据转换,这样效果会比较好,但是这些扩展一般需要收费。
第2种方法,就是用PHP将我们的doc文档内容直接写入一个后缀为doc的文件中即可。使用这种方法不需要依赖第三方扩展,而且执行效率较高。
word本身的功能还是很强大的,它可以打开html格式的文件,并且能够保留格式,即使后缀为doc,它也能识别正常打开。这就为我们提供了方便。但是有一个问题,html格式的文件中的图片只有一个地址,真正的图片是保存在其他地方的,也就是说,如果将HTML格式写入doc中,那么doc中将不能包含图片。那我们如何创建包含图片的doc文档呢?我们可以使用和html很接近的mht格式。
mht格式和html很类似,只不过在mht格式中,外部链接进来的文件,比如图片、Javascript、CSS会被base64进行编码存储。因此,单个mht文件就可以保存一个网页中的所有资源,当然,相比html,它的尺寸也会比较大。
mht格式能被word识别吗?我将一个网页保存成mht,然后修改后缀名为doc,再用word打开,OK,word也可以识别mht文件,并且可以显示图片。
好了,既然doc可以识别mht,下面就是考虑如何将图片放入mht了。由于html代码中的图片的地址都是写在img标签的src属性中,因此,只要提取html代码中的src属性值,就可以获得图片地址。当然,有可能您获取到的是相对路径,没关系,加上URL的前缀,改成绝对路径就可以了。有了图片地址,我们就可以通过file_get_content函数获取到图片文件的具体内容,然后调用base64_encode函数将文件内容编码成 base64编码,最后插入到mht文件的合适位置即可。
最后,我们有两种方法将文件发送给客户端,一种是先在服务器端生成一个doc文档,然后将这个doc文档的地址记录下来,最后,通过 header("location:xx.doc");就可以让客户端下载这个doc。还有一种是直接发送html请求,修改HTML协议的header 部分,将它的content-type设置为application/doc,将content-disposition设置为attachment,后面跟上文件名,发送完html协议以后,直接将文件内容发送给客户端,也可以让客户端下载到这个doc文档。
阅读全文
一般,有2种方法可以导出doc文档,一种是使用com,并且作为php的一个扩展库安装到服务器上,然后创建一个com,调用它的方法。安装过 office的服务器可以调用一个叫word.application的com,可以生成word文档,不过这种方式我不推荐,因为执行效率比较低(我测试了一下,在执行代码的时候,服务器会真的去打开一个word客户端)。理想的com应该是没有界面的,在后台进行数据转换,这样效果会比较好,但是这些扩展一般需要收费。
第2种方法,就是用PHP将我们的doc文档内容直接写入一个后缀为doc的文件中即可。使用这种方法不需要依赖第三方扩展,而且执行效率较高。
word本身的功能还是很强大的,它可以打开html格式的文件,并且能够保留格式,即使后缀为doc,它也能识别正常打开。这就为我们提供了方便。但是有一个问题,html格式的文件中的图片只有一个地址,真正的图片是保存在其他地方的,也就是说,如果将HTML格式写入doc中,那么doc中将不能包含图片。那我们如何创建包含图片的doc文档呢?我们可以使用和html很接近的mht格式。
mht格式和html很类似,只不过在mht格式中,外部链接进来的文件,比如图片、Javascript、CSS会被base64进行编码存储。因此,单个mht文件就可以保存一个网页中的所有资源,当然,相比html,它的尺寸也会比较大。
mht格式能被word识别吗?我将一个网页保存成mht,然后修改后缀名为doc,再用word打开,OK,word也可以识别mht文件,并且可以显示图片。
好了,既然doc可以识别mht,下面就是考虑如何将图片放入mht了。由于html代码中的图片的地址都是写在img标签的src属性中,因此,只要提取html代码中的src属性值,就可以获得图片地址。当然,有可能您获取到的是相对路径,没关系,加上URL的前缀,改成绝对路径就可以了。有了图片地址,我们就可以通过file_get_content函数获取到图片文件的具体内容,然后调用base64_encode函数将文件内容编码成 base64编码,最后插入到mht文件的合适位置即可。
最后,我们有两种方法将文件发送给客户端,一种是先在服务器端生成一个doc文档,然后将这个doc文档的地址记录下来,最后,通过 header("location:xx.doc");就可以让客户端下载这个doc。还有一种是直接发送html请求,修改HTML协议的header 部分,将它的content-type设置为application/doc,将content-disposition设置为attachment,后面跟上文件名,发送完html协议以后,直接将文件内容发送给客户端,也可以让客户端下载到这个doc文档。
阅读全文
一、基础篇
HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。
1、通用头域
通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer- Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个在UPnP消息中使用的通用头域。
Cache-Control头域
Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no- store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、 private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、 max-age。各个消息中的指令含义如下:
Public指示响应可被任何缓存区缓存。
Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache指示请求或响应消息不能缓存
no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
Date头域
Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。
Pragma头域
Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。
2、请求消息
请求消息的第一行为下面的格式:
Method SP Request-URI SP HTTP-Version CRLF
Method表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、 DELETE、TRACE。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。GET方法取回由Request- URI标识的信息。HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。
SP表示空格。
Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。
HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。
CRLF表示换行回车符。
请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信息。请求头域可能包含下列字段Accept、Accept-Charset、Accept - Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If- Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、 Proxy-Authorization、Range、Referer、User-Agent。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。阅读全文
HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。
1、通用头域
通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer- Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个在UPnP消息中使用的通用头域。
Cache-Control头域
Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no- store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、 private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、 max-age。各个消息中的指令含义如下:
Public指示响应可被任何缓存区缓存。
Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache指示请求或响应消息不能缓存
no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
Date头域
Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。
Pragma头域
Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。
2、请求消息
请求消息的第一行为下面的格式:
Method SP Request-URI SP HTTP-Version CRLF
Method表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、 DELETE、TRACE。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。GET方法取回由Request- URI标识的信息。HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。
SP表示空格。
Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。
HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。
CRLF表示换行回车符。
请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信息。请求头域可能包含下列字段Accept、Accept-Charset、Accept - Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If- Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、 Proxy-Authorization、Range、Referer、User-Agent。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。阅读全文
让我们算一算有多少种方法
处理诸如 PHP 之类的现代编程语言的乐趣之一就是有大量的选项可用。PHP 可以轻松地赢得 Perl 的座右铭“There's more than one way to do it”(并非只有一种方法可做这件事),尤其是在文件处理上。但是在这么多可用的选项中,哪一种是完成作业的最佳工具?当然,实际答案取决于解析文件的目标,因此值得花时间探究所有选项。
传统的 fopen 方法
fopen 方法可能是以前的 C 和 C++ 程序员最熟悉的,因为如果您使用过这些语言,那么它们或多或少都是您已掌握多年的工具。对于这些方法中的任何一种,通过使用 fopen(用于读取数据的函数)的标准方法打开文件,然后使用 fclose 关闭文件,如清单 1 所示。
清单 1. 用 fgets 打开并读取文件
$file_handle = fopen("myfile", "r");
while (!feof($file_handle)) {
$line = fgets($file_handle);
echo $line;
}
fclose($file_handle);
阅读全文
处理诸如 PHP 之类的现代编程语言的乐趣之一就是有大量的选项可用。PHP 可以轻松地赢得 Perl 的座右铭“There's more than one way to do it”(并非只有一种方法可做这件事),尤其是在文件处理上。但是在这么多可用的选项中,哪一种是完成作业的最佳工具?当然,实际答案取决于解析文件的目标,因此值得花时间探究所有选项。
传统的 fopen 方法
fopen 方法可能是以前的 C 和 C++ 程序员最熟悉的,因为如果您使用过这些语言,那么它们或多或少都是您已掌握多年的工具。对于这些方法中的任何一种,通过使用 fopen(用于读取数据的函数)的标准方法打开文件,然后使用 fclose 关闭文件,如清单 1 所示。
清单 1. 用 fgets 打开并读取文件
$file_handle = fopen("myfile", "r");
while (!feof($file_handle)) {
$line = fgets($file_handle);
echo $line;
}
fclose($file_handle);
阅读全文
1不写注释
2不使用可以提高生产效率的IDE工具
3不使用版本控制
4不按照编程规范写代码
5不使用统一的方法
6编码前不去思考和计划
7在执行sql前不执行编码和安全检测
8不使用测试驱动开发
9编码时不打开自动报错(error_reporting)
10不使用一种好的调试工具
11不重构你的代码(refactor)
12不采用MVC这样的分层结构
13不知道以下等等概念:KISS,DRY,MVC,OOP,REST
14在函数或者类里直接用print或者echo输出东西而不是返回(return)
15不使用也不去了解单元测试
16返回HTMl而不是data,strings,objects等类型
17糟糕的代码和配置参数(hard code messages and configuration parameters)
18不优化sql查询
19不使用__autoload
20不支持自动错误操作(应该是智能纠错)
21使用$_GET替代$_POST去进行危险的参数传递(记得这40条都是错误的东西)
22不知道怎样使用正则表达式
23从未听说过sql注入和跨站脚本(安全方面,应该了解下这两个东西的英文:sql injection,cross-site scripting)
24不支持简单配置,传递参数给类的构造函数,set/get方法,定义常量
25不能理解OOP的优缺点
26无论要做的东西有多小,都使用OOP
27认为做可复用的软件就是OOP
28不使用缺省值(don't choose intelligent defaults)
29不使用单一配置文件
30不想让别人看到代码,却使用.inc替换掉.php
31不使用数据库抽象层(持久层)
32开发时不DRY(Dont repeat yourself). (就是总开发重复的东西)
33不开发可以重复使用的类或者方法.
34不使用抽象类或者接口类,继承,多态,封装.
35不使用已有的设计模式优化你的程序.
36不允许使用者定义基础目录(这点好象PHP不太适合,毕竟不是基于操作系统的开发)
37错误的使用命名空间,使用大家都普遍使用的单词作为前缀.(这样以后别人使用会造成冲突.,例如自己定义一个function 叫 array_push())
38使用数据库时不使用表前缀(这个很重要...)
39不使用或者使用一个陌生的模板引擎(方便团队开发,大家要使用常见的模板)
40不去看PHP的框架(大多数框架中都包含优秀的代码和先进的概念.值得我们学习)
2不使用可以提高生产效率的IDE工具
3不使用版本控制
4不按照编程规范写代码
5不使用统一的方法
6编码前不去思考和计划
7在执行sql前不执行编码和安全检测
8不使用测试驱动开发
9编码时不打开自动报错(error_reporting)
10不使用一种好的调试工具
11不重构你的代码(refactor)
12不采用MVC这样的分层结构
13不知道以下等等概念:KISS,DRY,MVC,OOP,REST
14在函数或者类里直接用print或者echo输出东西而不是返回(return)
15不使用也不去了解单元测试
16返回HTMl而不是data,strings,objects等类型
17糟糕的代码和配置参数(hard code messages and configuration parameters)
18不优化sql查询
19不使用__autoload
20不支持自动错误操作(应该是智能纠错)
21使用$_GET替代$_POST去进行危险的参数传递(记得这40条都是错误的东西)
22不知道怎样使用正则表达式
23从未听说过sql注入和跨站脚本(安全方面,应该了解下这两个东西的英文:sql injection,cross-site scripting)
24不支持简单配置,传递参数给类的构造函数,set/get方法,定义常量
25不能理解OOP的优缺点
26无论要做的东西有多小,都使用OOP
27认为做可复用的软件就是OOP
28不使用缺省值(don't choose intelligent defaults)
29不使用单一配置文件
30不想让别人看到代码,却使用.inc替换掉.php
31不使用数据库抽象层(持久层)
32开发时不DRY(Dont repeat yourself). (就是总开发重复的东西)
33不开发可以重复使用的类或者方法.
34不使用抽象类或者接口类,继承,多态,封装.
35不使用已有的设计模式优化你的程序.
36不允许使用者定义基础目录(这点好象PHP不太适合,毕竟不是基于操作系统的开发)
37错误的使用命名空间,使用大家都普遍使用的单词作为前缀.(这样以后别人使用会造成冲突.,例如自己定义一个function 叫 array_push())
38使用数据库时不使用表前缀(这个很重要...)
39不使用或者使用一个陌生的模板引擎(方便团队开发,大家要使用常见的模板)
40不去看PHP的框架(大多数框架中都包含优秀的代码和先进的概念.值得我们学习)
简介
英文版权归Reinhold Weber所有,中译文作者yangyang(aka davidkoree)。双语版可用于非商业传播,但须注明英文版作者、版权信息,以及中译文作者。翻译水平有限,请广大PHPer指正。
40个迹象表明你还是PHP菜鸟阅读全文
英文版权归Reinhold Weber所有,中译文作者yangyang(aka davidkoree)。双语版可用于非商业传播,但须注明英文版作者、版权信息,以及中译文作者。翻译水平有限,请广大PHPer指正。
40个迹象表明你还是PHP菜鸟阅读全文
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行
匹配HTML标记的正则表达式: <(\S*?)[^>]*>.*? ¦ <.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
匹配首尾空白字符的正则表达式:^\s* ¦\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
评注:表单验证时很实用
匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用
匹配国内电话号码:\d{3}-\d{8} ¦\d{4}-\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822
匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始
匹配中国邮政编码:[1-9]\d{5}(?!\d)
评注:中国邮政编码为6位数字
匹配身份证:\d{15} ¦\d{18}
评注:中国的身份证为15位或18位
匹配ip地址:\d+\.\d+\.\d+\.\d+
评注:提取ip地址时有用
匹配特定数字:
^[1-9]\d*$ //匹配正整数
^-[1-9]\d*$ //匹配负整数
^-?[1-9]\d*$ //匹配整数
^[1-9]\d* ¦0$ //匹配非负整数(正整数 + 0)
^-[1-9]\d* ¦0$ //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d* ¦0\.\d*[1-9]\d*$ //匹配正浮点数
^-([1-9]\d*\.\d* ¦0\.\d*[1-9]\d*)$ //匹配负浮点数
^-?([1-9]\d*\.\d* ¦0\.\d*[1-9]\d* ¦0?\.0+ ¦0)$ //匹配浮点数
^[1-9]\d*\.\d* ¦0\.\d*[1-9]\d* ¦0?\.0+ ¦0$ //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d* ¦0\.\d*[1-9]\d*)) ¦0?\.0+ ¦0$ //匹配非正浮点数(负浮点数 + 0) 阅读全文
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行
匹配HTML标记的正则表达式: <(\S*?)[^>]*>.*? ¦ <.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
匹配首尾空白字符的正则表达式:^\s* ¦\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
评注:表单验证时很实用
匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用
匹配国内电话号码:\d{3}-\d{8} ¦\d{4}-\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822
匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始
匹配中国邮政编码:[1-9]\d{5}(?!\d)
评注:中国邮政编码为6位数字
匹配身份证:\d{15} ¦\d{18}
评注:中国的身份证为15位或18位
匹配ip地址:\d+\.\d+\.\d+\.\d+
评注:提取ip地址时有用
匹配特定数字:
^[1-9]\d*$ //匹配正整数
^-[1-9]\d*$ //匹配负整数
^-?[1-9]\d*$ //匹配整数
^[1-9]\d* ¦0$ //匹配非负整数(正整数 + 0)
^-[1-9]\d* ¦0$ //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d* ¦0\.\d*[1-9]\d*$ //匹配正浮点数
^-([1-9]\d*\.\d* ¦0\.\d*[1-9]\d*)$ //匹配负浮点数
^-?([1-9]\d*\.\d* ¦0\.\d*[1-9]\d* ¦0?\.0+ ¦0)$ //匹配浮点数
^[1-9]\d*\.\d* ¦0\.\d*[1-9]\d* ¦0?\.0+ ¦0$ //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d* ¦0\.\d*[1-9]\d*)) ¦0?\.0+ ¦0$ //匹配非正浮点数(负浮点数 + 0) 阅读全文
php不用COM生成excel文件
最近因为工作需要,要用php来写点东西,边学边用,搜集点资料,留下来备用 [点击图片可在新窗口打开]
其实在做真正的应用的时候,大家可以将数据从数据库中取出,然后按照每一列数据结束后加\t,每一行数据结束后加\n的方法echo出来,在php的开头用header("Content-type:application/vnd.ms-excel");表示输出的是excel文件,用 header("Content-Disposition:filename=test.xls");表示输出的文件名为text.xls。这样就ok 了。
我们更可以修改header让他输出更多格式的文件,这样php在处理各种类型文件方面就更加方便了,例如:
#header("Content-type:application/vnd.ms-word");
#header("Content-Disposition:filename=xx.doc");
#header("Content-type:application/vnd.ms-excel");
#header("Content-Disposition:filename=xx.xls");
#header("Content-type:application/vnd.ms-PowerPoint");
#header("Content-Disposition:filename=xx.ppt");
最近因为工作需要,要用php来写点东西,边学边用,搜集点资料,留下来备用 [点击图片可在新窗口打开]
<?
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:filename=test.xls");
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
?>
在php环境运行上面的代码,大家就可以看到浏览器询问用户是否下载excel文档,点击保存,硬盘上就多了一个excel的文件,使用excel打开就会看到最终的结果,怎么样不错吧。header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:filename=test.xls");
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
?>
其实在做真正的应用的时候,大家可以将数据从数据库中取出,然后按照每一列数据结束后加\t,每一行数据结束后加\n的方法echo出来,在php的开头用header("Content-type:application/vnd.ms-excel");表示输出的是excel文件,用 header("Content-Disposition:filename=test.xls");表示输出的文件名为text.xls。这样就ok 了。
我们更可以修改header让他输出更多格式的文件,这样php在处理各种类型文件方面就更加方便了,例如:
#header("Content-type:application/vnd.ms-word");
#header("Content-Disposition:filename=xx.doc");
#header("Content-type:application/vnd.ms-excel");
#header("Content-Disposition:filename=xx.xls");
#header("Content-type:application/vnd.ms-PowerPoint");
#header("Content-Disposition:filename=xx.ppt");
http://ks.lupaworld.com/upload/manual/other/Embedded%20FreeBSD%20Cookbook.pdf
背景:为何要用nc,nc比telnet相对有优势一点,可以作探测之用,hack常用工具,特别是有时路由抽风(为嘛抽风?技术中心基础运维的事儿,走专线,路由没配置好,或是专线满了没有人管,于是队列日志一堆一堆的全是失败信息,满了,磁盘也满了,这是业务问题?),北京到XX有两条路由,一条走专线,一条走VPN,我们这里回指的路由是从专线走的,之前你们的服务器应该也是走的专线,可能你们修改了服务器以后,他有时候匹配到了专线的路由,有时候匹配到了VPN的路由,造成丢包,看看你们那边是不是绑定策略能从专线过来?这种问题怎么从应用层来排查到是网路抽风呢?用netcat加循环设置看现象卡不卡了,无其它办法,如基础运维说没问题,我们也就蔫了,呵呵。
——————————————————————————————————————————————————————————
netcat简称:
[root@localhost ~]# type -a nc
nc is /usr/bin/nc
$ nc -w 10 localhost 2389
该连接将在 10 秒后中断。
注意: 不要在服务器端同时使用 -w 和 -l 参数,因为 -w 参数将在服务器端无效果。
一、循环连接多次:
实践如下:
二、有时候设置值设置不进去,设置一下值:
三、一行shell解决设置memcacheq的键值存起来,方便第一里面的循环:
四、保存为shell如,a.sh,循环设置测试:
上面这样得用vi去复制粘贴多行,于是有下面的简单一行实现循环的语句:
来自:http://www.2cto.com/os/201401/272319.html
阅读全文