背景:近来对Nginx的上传模块这一块,Flash上传时进度条都过了,但是那个文件还没有出现,一会儿后才出现那个文件,并慢慢增大,我用的是Nginx的上传插件,这种问题怎么去查?我刚用了strace,我在想它是把上传的东东放在哪儿去了呢?
http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gz
Rango 上午 11:56:57
用apache来做吧,apache是交给php来处理的,
回忆未来-向东-Jàck 下午 12:01:57
嗯,我再看看,兄弟觉得Apache下的PHP比起Nginx的PHP在上传一块有更高的效率是么?
Rango 下午 12:02:23
都差不多吧
apache比较成熟
=================================================================================
Rango 下午 01:45:42
你看下 man pwrite
回忆未来-向东-Jàck 下午 01:55:19
好看到了,这个PHP上传大文件和Nginx上传大文件,是先接进来放到内存后,在写到文件里吧?
Rango 下午 01:55:30
嗯,是的,都是这样做了
pwrite就是相当于 fseek + fwrite
回忆未来-向东-Jàck 下午 01:56:55
至于内存里放在什么时候开始写,那应该是由nginx程序里的配置来实现的吧?
如果我猜测没错的话
=================================================================================
upload_buffer_size 上传缓冲区大小
upload_max_file_size 指定上传文件最大大小,软限制。client_max_body_size硬限制。
upload_limit_rate 上传限速,如果设置为0则表示不限制。
upload_pass_args 是否转发参数。
=============================================================================
=============================================================================
ack 1460:
第一个报文的TCP头里通过MSS这个可选项告知对方本端能够接收的最大报文(当然,这个大小是TCP净荷的大小),以太网上这个值一般设置成1460,因为1460Byte净荷+20Byte TCP头+20Byte IP头 = 1500字节,正好符合链路层最大报文的要求。
http://wenku.baidu.com/view/d77645d533d4b14e84246800.html
strace -p 7269 -o s.log
Nginx太多了进程:
[root@test tmp]# cat strace.sh
都是读4096个字符一次写,pwrite64和这个相当应该:
ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);
原型 char * fgets(char * s, int n,FILE *stream);
参数:
s: 字符型指针,指向存储读入数据的缓冲区的地址。
n: 从流中读入n-1个字符
stream : 指向读取的流。
函数原型
ssize_t pwrite(intfd, const void *buf, size_tcount, off_toffset);
编辑本段
用法
返回值:成功,返回写入到文件中的字节数;失败,返回-1;
参数:
(1) fd:要写入数据的文件描述符
(2) buf:数据缓存区指针,存放要写入文件中的数据
(3) count:写入文件中的数据的字节数
(4) offset:写入起始地址的偏移量,写入地址=文件开始+offset。注意,执行后,文件偏移指针不变
什么是字节,字节数相关学习备案:
字节(Byte 发音:/‘bait/):字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位。在ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小 。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值:0 最大值:255 。如一个ASCII码就是一个字节,此类单位的换算为: 1KB(Kilobyte 千字节)=1024B,1MB(Megabyte 兆字节 简称“兆”)=1024KB,1GB(Gigabyte 吉字节 又称“千兆”)=1024MB,
数据包是信息在通行通道上传递的形式~~
字节是信息的单位~~一字节等于8个比特位!
wc - c 统计字节数:
[root@test ~]# cat a.txt |wc -c
2 [里面写:a的字节数]
[root@test ~]# vi a.txt
[root@test ~]# cat a.txt |wc -c
8 [里面写:a向东 的字节数]
比特(bit)即一个二进制位 例如100011就是6比特
字节(byte)这是计算机中数据类型最基本的单位了,8bit 组成1byte
字(word)两个byte称为一个word,所以字大小应该是16位bit,共两字节。(Shell里的)
双字(double word 简写为DWORD)见名知意,两个字,四个字节,32bit。
C语言:char 字符型 占1byte 即8位,一个char型数据(例如:a、#、!之类的)用了1个字节来存储:
root@192.168.137.128:~# ./a.out
size of char a=1
size of char =1
中间断开测试,浏览器突然断开:
accept4(5, {sa_family=AF_INET, sin_port=htons(58438), sin_addr=inet_addr("192.168.137.1")}, [16], SOCK_NONBLOCK) = 3
epoll_ctl(13, EPOLL_CTL_ADD, 3, {EPOLLIN|EPOLLET, {u32=3039736117, u64=722997274181808437}}) = 0
epoll_wait(13, {{EPOLLIN, {u32=3039736117, u64=722997274181808437}}}, 512, 60000) = 1
gettimeofday({1368072732, 443326}, NULL) = 0
recv(3, "POST /upload HTTP/1.1\r\nHost: tes"..., 32768, 0) = 32768
recv(3, "\0\1\0\0*0\0\0\0\2\0\0\0\0\0\0\0\1\0\0*0\0\0\0\2\0\0\0\0\0\0"..., 8192, 0) = 8192
epoll_wait(13, {{EPOLLIN, {u32=3039736117, u64=722997274181808437}}}, 512, 7) = 1
gettimeofday({1368072732, 446037}, NULL) = 0
epoll_wait(13, {}, 512, 4) = 0
gettimeofday({1368072732, 451445}, NULL) = 0
open("/data/app/test.local/upload_tmp/0000000005", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0600) = 4
pwrite64(4, "\0\0\0\24ftypisom\0\0\0\1isom\0\rx\373moov\0\0\0l"..., 4096, 0) = 4096
pwrite64(4, "\0\2\0\0\0\0\0\0\0\3\0\0\16\20\0\0\0\1\0\0*0\0\0\0\2\0\0\0\0\0\0"..., 4096, 4096) = 4096
pwrite64(4, "\0\1\0\0*0\0\0\0\2\0\0\0\0\0\0\0\1\0\0*0\0\0\0\2\0\0\0\0\0\0"..., 4096, 8192) = 4096
.........................................
pwrite64(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096, 7622656) = 4096
pwrite64(4, "e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\5\343\t\240\335d\t@\327d\t\240.\341\t"..., 4096, 7626752) = 4096
recv(3, 0xa0a9048, 8192, 0) = -1 EAGAIN (Resource temporarily unavailable)
epoll_wait(13, {{EPOLLIN|EPOLLERR|EPOLLHUP, {u32=3039736117, u64=722997274181808437}}}, 512, 60000) = 1
gettimeofday({1368072745, 256485}, NULL) = 0
recv(3, 0xa0a9048, 8192, 0) = -1 ECONNRESET (Connection reset by peer)
pwrite64(4, "s\0i\0t\0o\0r\0y\0\0\0\0\0\36\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0"..., 2800, 7630848) = 2800
close(4) = 0
unlink("/data/app/test.local/upload_tmp/0000000005") = 0
write(9, "2013/05/09 12:12:25 [alert] 7269"..., 240) = 240
close(3) = 0
epoll_wait(13, <unfinished ...>
阅读全文
http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gz
Rango 上午 11:56:57
用apache来做吧,apache是交给php来处理的,
回忆未来-向东-Jàck 下午 12:01:57
嗯,我再看看,兄弟觉得Apache下的PHP比起Nginx的PHP在上传一块有更高的效率是么?
Rango 下午 12:02:23
都差不多吧
apache比较成熟
=================================================================================
Rango 下午 01:45:42
你看下 man pwrite
回忆未来-向东-Jàck 下午 01:55:19
好看到了,这个PHP上传大文件和Nginx上传大文件,是先接进来放到内存后,在写到文件里吧?
Rango 下午 01:55:30
嗯,是的,都是这样做了
pwrite就是相当于 fseek + fwrite
回忆未来-向东-Jàck 下午 01:56:55
至于内存里放在什么时候开始写,那应该是由nginx程序里的配置来实现的吧?
如果我猜测没错的话
=================================================================================
upload_buffer_size 上传缓冲区大小
upload_max_file_size 指定上传文件最大大小,软限制。client_max_body_size硬限制。
upload_limit_rate 上传限速,如果设置为0则表示不限制。
upload_pass_args 是否转发参数。
=============================================================================
=============================================================================
ack 1460:
第一个报文的TCP头里通过MSS这个可选项告知对方本端能够接收的最大报文(当然,这个大小是TCP净荷的大小),以太网上这个值一般设置成1460,因为1460Byte净荷+20Byte TCP头+20Byte IP头 = 1500字节,正好符合链路层最大报文的要求。
http://wenku.baidu.com/view/d77645d533d4b14e84246800.html
strace -p 7269 -o s.log
Nginx太多了进程:
[root@test tmp]# cat strace.sh
都是读4096个字符一次写,pwrite64和这个相当应该:
ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);
原型 char * fgets(char * s, int n,FILE *stream);
参数:
s: 字符型指针,指向存储读入数据的缓冲区的地址。
n: 从流中读入n-1个字符
stream : 指向读取的流。
函数原型
ssize_t pwrite(intfd, const void *buf, size_tcount, off_toffset);
编辑本段
用法
返回值:成功,返回写入到文件中的字节数;失败,返回-1;
参数:
(1) fd:要写入数据的文件描述符
(2) buf:数据缓存区指针,存放要写入文件中的数据
(3) count:写入文件中的数据的字节数
(4) offset:写入起始地址的偏移量,写入地址=文件开始+offset。注意,执行后,文件偏移指针不变
什么是字节,字节数相关学习备案:
字节(Byte 发音:/‘bait/):字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位。在ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小 。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值:0 最大值:255 。如一个ASCII码就是一个字节,此类单位的换算为: 1KB(Kilobyte 千字节)=1024B,1MB(Megabyte 兆字节 简称“兆”)=1024KB,1GB(Gigabyte 吉字节 又称“千兆”)=1024MB,
数据包是信息在通行通道上传递的形式~~
字节是信息的单位~~一字节等于8个比特位!
wc - c 统计字节数:
[root@test ~]# cat a.txt |wc -c
2 [里面写:a的字节数]
[root@test ~]# vi a.txt
[root@test ~]# cat a.txt |wc -c
8 [里面写:a向东 的字节数]
比特(bit)即一个二进制位 例如100011就是6比特
字节(byte)这是计算机中数据类型最基本的单位了,8bit 组成1byte
字(word)两个byte称为一个word,所以字大小应该是16位bit,共两字节。(Shell里的)
双字(double word 简写为DWORD)见名知意,两个字,四个字节,32bit。
C语言:char 字符型 占1byte 即8位,一个char型数据(例如:a、#、!之类的)用了1个字节来存储:
root@192.168.137.128:~# ./a.out
size of char a=1
size of char =1
中间断开测试,浏览器突然断开:
accept4(5, {sa_family=AF_INET, sin_port=htons(58438), sin_addr=inet_addr("192.168.137.1")}, [16], SOCK_NONBLOCK) = 3
epoll_ctl(13, EPOLL_CTL_ADD, 3, {EPOLLIN|EPOLLET, {u32=3039736117, u64=722997274181808437}}) = 0
epoll_wait(13, {{EPOLLIN, {u32=3039736117, u64=722997274181808437}}}, 512, 60000) = 1
gettimeofday({1368072732, 443326}, NULL) = 0
recv(3, "POST /upload HTTP/1.1\r\nHost: tes"..., 32768, 0) = 32768
recv(3, "\0\1\0\0*0\0\0\0\2\0\0\0\0\0\0\0\1\0\0*0\0\0\0\2\0\0\0\0\0\0"..., 8192, 0) = 8192
epoll_wait(13, {{EPOLLIN, {u32=3039736117, u64=722997274181808437}}}, 512, 7) = 1
gettimeofday({1368072732, 446037}, NULL) = 0
epoll_wait(13, {}, 512, 4) = 0
gettimeofday({1368072732, 451445}, NULL) = 0
open("/data/app/test.local/upload_tmp/0000000005", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0600) = 4
pwrite64(4, "\0\0\0\24ftypisom\0\0\0\1isom\0\rx\373moov\0\0\0l"..., 4096, 0) = 4096
pwrite64(4, "\0\2\0\0\0\0\0\0\0\3\0\0\16\20\0\0\0\1\0\0*0\0\0\0\2\0\0\0\0\0\0"..., 4096, 4096) = 4096
pwrite64(4, "\0\1\0\0*0\0\0\0\2\0\0\0\0\0\0\0\1\0\0*0\0\0\0\2\0\0\0\0\0\0"..., 4096, 8192) = 4096
.........................................
pwrite64(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096, 7622656) = 4096
pwrite64(4, "e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\5\343\t\240\335d\t@\327d\t\240.\341\t"..., 4096, 7626752) = 4096
recv(3, 0xa0a9048, 8192, 0) = -1 EAGAIN (Resource temporarily unavailable)
epoll_wait(13, {{EPOLLIN|EPOLLERR|EPOLLHUP, {u32=3039736117, u64=722997274181808437}}}, 512, 60000) = 1
gettimeofday({1368072745, 256485}, NULL) = 0
recv(3, 0xa0a9048, 8192, 0) = -1 ECONNRESET (Connection reset by peer)
pwrite64(4, "s\0i\0t\0o\0r\0y\0\0\0\0\0\36\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0"..., 2800, 7630848) = 2800
close(4) = 0
unlink("/data/app/test.local/upload_tmp/0000000005") = 0
write(9, "2013/05/09 12:12:25 [alert] 7269"..., 240) = 240
close(3) = 0
epoll_wait(13, <unfinished ...>
阅读全文
背景: 我也想升级一把,如果直接上6.4,以前6.3里面的vim配置,服务器等重新安,太麻烦了。
-------------------------------------------------------------------------------------------------------------------------------
最后,发现我的那个已经升级了,不用去修改grub,参考:http://tieba.baidu.com/p/2249307319
阅读全文
-------------------------------------------------------------------------------------------------------------------------------
最后,发现我的那个已经升级了,不用去修改grub,参考:http://tieba.baidu.com/p/2249307319
阅读全文
背景:搞游戏的相关公司要用这个玩意儿,但怎么用的不了解,先写这儿作下Mark。
阅读全文
阅读全文
背景:前些日子有一外面抓视频的,用那个时间来查20条(大于某个时间Limit 20),因存的是这样的:2013-08-08 21:50:00 ,这样在Mysql数据量大,且没有建立索引(也不好建立索引的情况下),很容易把数据库拖死,其实应该用Unix的时间整数来进行查就快多了,因为这样建立起来的索引的势就高(老外好像是这样说的),查询就快,但现在就是存的时间了,查询时还得以时间来查,前端是输入的Unix时间戳(Unix timestamp),后面还得转一次。
涉及到:js unix时间戳转换 ,PHP时间戳转为Unix时间戳。
阅读全文
涉及到:js unix时间戳转换 ,PHP时间戳转为Unix时间戳。
阅读全文
背景:前些日子有一外面抓视频的,用那个时间来查20条(大于某个时间Limit 20),因存的是这样的:2013-08-08 21:50:00 ,这样在Mysql数据量大,且没有建立索引(也不好建立索引的情况下),很容易把数据库拖死,其实应该用Unix的时间整数来进行查就快多了,因为这样建立起来的索引的势就高(老外好像是这样说的),查询就快,但现在就是存的时间了,查询时还得以时间来查,前端是输入的Unix时间戳(Unix timestamp),后面还得转一次。
涉及到:js unix时间戳转换 ,PHP时间戳转为Unix时间戳。
阅读全文
涉及到:js unix时间戳转换 ,PHP时间戳转为Unix时间戳。
阅读全文
对于nginx+php的一些网站,上传文件大小会受到多个方面的限制,一个是nginx本身的限制,限制了客户端上传文件的大小,一个是php.ini文件中默认了多个地方的设置。所以为了解决上传文件大小限定的问题必须要做出多处修改。以下整理了几个地方。
1、修改/usr/local/nginx/conf/nginx.conf 文件,查找 client_max_body_size 将后面的值设置为你想设置的值。比如:
附录:Nginx有一个Upload组件:
上传速率,上传Body大小,也就是上传文件时可能较大?
client_max_body_size 1024M
upload_limit_rate 158k
如下:
2、修改php.ini
在php.ini里面查看如下行:
默认允许HTTP文件上传,此选项不能设置为OFF。
upload_tmp_dir =/tmp/www
在上传大文件时,你会有上传速度慢的感觉,当超过一定的时间,会报脚本执行超过30秒的错误,这是因为在php.ini配置文件中max_execution_time配置选项在作怪,其表示每个脚本最大允许执行时间(秒),0 表示没有限制。你可以适当调整max_execution_time的值,不推荐设定为0。
参考文章:
PHP.INI配置:文件上传功能配置教程:http://www.leapsoul.cn/?p=488
1、修改/usr/local/nginx/conf/nginx.conf 文件,查找 client_max_body_size 将后面的值设置为你想设置的值。比如:
附录:Nginx有一个Upload组件:
上传速率,上传Body大小,也就是上传文件时可能较大?
client_max_body_size 1024M
upload_limit_rate 158k
如下:
2、修改php.ini
在php.ini里面查看如下行:
默认允许HTTP文件上传,此选项不能设置为OFF。
upload_tmp_dir =/tmp/www
在上传大文件时,你会有上传速度慢的感觉,当超过一定的时间,会报脚本执行超过30秒的错误,这是因为在php.ini配置文件中max_execution_time配置选项在作怪,其表示每个脚本最大允许执行时间(秒),0 表示没有限制。你可以适当调整max_execution_time的值,不推荐设定为0。
参考文章:
PHP.INI配置:文件上传功能配置教程:http://www.leapsoul.cn/?p=488
RocketDock是什么?
你是否曾经透过那些苹果机用户的肩头瞥见过他们屏幕下方那个漂亮的图标栏?这就是著名的”Dock”. 对那些没有看到过Dock的人来说,Dock就是位于你屏幕下方可以设置背景和图标的的工具栏.这个工具栏的作用就是将你的应用程序和各种图标有机的组织起来,从而把你从杂乱的桌面中解脱出来.
特性
最小化窗口到Dock Vista系统中实时的窗口预览 正在运行的程序的指示器 简单的拖曳界面 支持多监视器系统 支持alpha效果PNG和ICO图标 图标的平滑缩放效果 自动隐藏 鼠标滑过自动弹出 位置和图层设置 完全个性化设置 支持ObjectDock插件(Docklet) 兼容MobyDock, ObjectDock, RK Launcher, 和 Y’z Dock皮肤 在低配置电脑上运行流畅 支持统一字符编码标准
多语种支持,可以方便的翻译成各种文字版本
官方下载地址:http://www.rocketdock.info/wp-content/upload/RocketDock1-3-5.rar
设置:http://wenku.baidu.com/view/53542ec69ec3d5bbfd0a7457.html
官网下载:http://rocketdock.com/DOWNLOAD
我的印象中Mac的界面就是这个样子的吧?
RocketDock 窗口特效[图] | 小众软件感觉很流畅的样子,RocketDock让你在使用Windows更加的动感,它用极少的内存以及CPU资源,让你就算使用着旧计算机,也不会感到计算机变慢。内建多种面板模式,以及一组的图标,如果觉得面板模式太少或是图标太少,还可以自行选用自己喜欢的图标。而且图标的可不是只能用ICO,PNG图片格式,它一样能够支持,让你的图标看起来更加的漂亮。而且还支持使用拖曳的方式来自订要启动的程序,或是资料夹,让你自己打造一个动感味十足,界面漂亮,占用极少资源的个人专属快捷工具栏。
对于喜欢花哨的用户来说,在好不过了,不过像我这样力求简洁实用的来说,就有些多余了。哈哈,因为我用WIN+R
你是否曾经透过那些苹果机用户的肩头瞥见过他们屏幕下方那个漂亮的图标栏?这就是著名的”Dock”. 对那些没有看到过Dock的人来说,Dock就是位于你屏幕下方可以设置背景和图标的的工具栏.这个工具栏的作用就是将你的应用程序和各种图标有机的组织起来,从而把你从杂乱的桌面中解脱出来.
特性
最小化窗口到Dock Vista系统中实时的窗口预览 正在运行的程序的指示器 简单的拖曳界面 支持多监视器系统 支持alpha效果PNG和ICO图标 图标的平滑缩放效果 自动隐藏 鼠标滑过自动弹出 位置和图层设置 完全个性化设置 支持ObjectDock插件(Docklet) 兼容MobyDock, ObjectDock, RK Launcher, 和 Y’z Dock皮肤 在低配置电脑上运行流畅 支持统一字符编码标准
多语种支持,可以方便的翻译成各种文字版本
官方下载地址:http://www.rocketdock.info/wp-content/upload/RocketDock1-3-5.rar
设置:http://wenku.baidu.com/view/53542ec69ec3d5bbfd0a7457.html
官网下载:http://rocketdock.com/DOWNLOAD
我的印象中Mac的界面就是这个样子的吧?
RocketDock 窗口特效[图] | 小众软件感觉很流畅的样子,RocketDock让你在使用Windows更加的动感,它用极少的内存以及CPU资源,让你就算使用着旧计算机,也不会感到计算机变慢。内建多种面板模式,以及一组的图标,如果觉得面板模式太少或是图标太少,还可以自行选用自己喜欢的图标。而且图标的可不是只能用ICO,PNG图片格式,它一样能够支持,让你的图标看起来更加的漂亮。而且还支持使用拖曳的方式来自订要启动的程序,或是资料夹,让你自己打造一个动感味十足,界面漂亮,占用极少资源的个人专属快捷工具栏。
对于喜欢花哨的用户来说,在好不过了,不过像我这样力求简洁实用的来说,就有些多余了。哈哈,因为我用WIN+R
解决办法:http://see.sl088.com/wiki/Explicit_defaults_for_timestamp
解决
进入/etc/my.cnf,增加一项设置
# seem 5.6 need this
explicit_defaults_for_timestamp = 1
阅读全文
解决
进入/etc/my.cnf,增加一项设置
# seem 5.6 need this
explicit_defaults_for_timestamp = 1
阅读全文
背景:现在很少有用C实现文件上传了,有Nginx的上传模块,用CGI实现文件上传在这里作下备案。
后加参考:http://hi.baidu.com/davidgabriel/item/58fec40b4c2f49803c42e290
用C语言库(CGIC)编写CGI,实现文件上传:
http://hi.baidu.com/rszlatkfoxbalqd/item/62bb3a4e04e89c0fc0161326
使用C语言的CGI库“CGIC”完成Web开发的各种要求 :
http://blog.sina.com.cn/s/blog_75a8cfac0100p9es.html
add Time:2014-01-14
阅读全文
后加参考:http://hi.baidu.com/davidgabriel/item/58fec40b4c2f49803c42e290
用C语言库(CGIC)编写CGI,实现文件上传:
http://hi.baidu.com/rszlatkfoxbalqd/item/62bb3a4e04e89c0fc0161326
使用C语言的CGI库“CGIC”完成Web开发的各种要求 :
http://blog.sina.com.cn/s/blog_75a8cfac0100p9es.html
add Time:2014-01-14
阅读全文
PHPer的水平区分
Php/Js/Shell/Go jack 2013-5-4 18:41
发现PHP 5.4.14有如下扩展不兼容,是不是该升级了呢?考虑中。
Php/Js/Shell/Go jack 2013-4-28 18:11
PHP abstract 和 interface的区别
Php/Js/Shell/Go jack 2013-4-28 10:40
1.php 接口类:interface
其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候php接口类就起到作用了,当我们定义了一个接口类时,它里面的方式是下面的子类必须实现的,比如 :
我声明一个shop接口类,定义了三个方法:买(buy),卖(sell),看(view),那么继承此类的所有子类都必须实现这3个方法少一个都 不行,如果子类没有实现这些话,就无法运行。实际上接口类说白了,就是一个类的模板,一个类的规定,如果你属于这类,你就必须遵循我的规定,少一个都不 行,但是具体你怎么去做,我不管,那是你的事,如:
你想想,在一个多人合作的大项目里面,有了接口类是多么的方便,这样你就不用去问别人,你的某某功能的方法名是什么了,当然如果你们喜欢这样我也没有办法。
结论 : 接口类就是一个类的领导者,指明方向,子类必须完成它指定方法。
2.php 抽象类 : abstract
其实抽象类和接口类有一部分很像,记得在哪里看见这样一句话,抽象类就把类像的部分抽出来,这句看上去很搞笑,其实它说出了抽象类的真理,抽象类的 作用是,当你发现你的很多类里面用很多方法你不断的在重复写,那你就可以考虑使用抽象类了,你可能会说“我不是可以重写一个类每个公共类我个实例化一个这 个公共类,调用相同的方法就可以了”,这里是可以,实际上抽象类做的工作也就是这个,不过他省去了你实例化的这个步骤,让你就像直接调用本类方法一样方 便,而且你还可以重载这个方法。如:
这里是一个例子,想上面一样我定义了一个商店类,抽出了它所有像的部分,买(buy),卖(sell),看(view),并且抽象类里都实现了这些方法,那么继承它的子类就自动获得了这些方法,子类就做它自己独特的东西,介绍代码的重复,提高复用性。
结论: 抽象类就是一个类的服务提供商,拥有众多服务,你不用必须用,当需要的时候你来用就可以,如果你觉得不提供服务不满意,你还可以自己来做。而abstract function 方法和interface有些相似,就是父类中生声明的方法,子类中必须实现,但是没有用abstract声明的方法将成为子类的公共方法,没有必要在子类中必须实现
转自:http://blog.csdn.net/hyholine/article/details/7270392
其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候php接口类就起到作用了,当我们定义了一个接口类时,它里面的方式是下面的子类必须实现的,比如 :
我声明一个shop接口类,定义了三个方法:买(buy),卖(sell),看(view),那么继承此类的所有子类都必须实现这3个方法少一个都 不行,如果子类没有实现这些话,就无法运行。实际上接口类说白了,就是一个类的模板,一个类的规定,如果你属于这类,你就必须遵循我的规定,少一个都不 行,但是具体你怎么去做,我不管,那是你的事,如:
你想想,在一个多人合作的大项目里面,有了接口类是多么的方便,这样你就不用去问别人,你的某某功能的方法名是什么了,当然如果你们喜欢这样我也没有办法。
结论 : 接口类就是一个类的领导者,指明方向,子类必须完成它指定方法。
2.php 抽象类 : abstract
其实抽象类和接口类有一部分很像,记得在哪里看见这样一句话,抽象类就把类像的部分抽出来,这句看上去很搞笑,其实它说出了抽象类的真理,抽象类的 作用是,当你发现你的很多类里面用很多方法你不断的在重复写,那你就可以考虑使用抽象类了,你可能会说“我不是可以重写一个类每个公共类我个实例化一个这 个公共类,调用相同的方法就可以了”,这里是可以,实际上抽象类做的工作也就是这个,不过他省去了你实例化的这个步骤,让你就像直接调用本类方法一样方 便,而且你还可以重载这个方法。如:
这里是一个例子,想上面一样我定义了一个商店类,抽出了它所有像的部分,买(buy),卖(sell),看(view),并且抽象类里都实现了这些方法,那么继承它的子类就自动获得了这些方法,子类就做它自己独特的东西,介绍代码的重复,提高复用性。
结论: 抽象类就是一个类的服务提供商,拥有众多服务,你不用必须用,当需要的时候你来用就可以,如果你觉得不提供服务不满意,你还可以自己来做。而abstract function 方法和interface有些相似,就是父类中生声明的方法,子类中必须实现,但是没有用abstract声明的方法将成为子类的公共方法,没有必要在子类中必须实现
转自:http://blog.csdn.net/hyholine/article/details/7270392
首先需要确定你用的用宽任务栏,确认的方法是在任务栏空白区域右键——属性——确认你没有勾选“使用小图标”(我就是勾选了小图标一直就只显示上午几点几点,没有日期)
如果你没有勾选的话,那你的年月日一般默认就显示了,下面就看怎么显示星期了,下面是简单的步骤:
1、在显示时间的区域右键——【调整日期/时间(A)】
2、在弹出的窗口中选择“调整日期和时间”
在日期和时间设置界面,点击“更改日历设置”
在日期选项卡中,分别在短时间和长日期后加上“ dddd”
TIPS:dddd前面有个空格,大家别忘掉了
设置完成后,确认即可看到效果。
详细参考:http://wenku.baidu.com/view/1a45d9513c1ec5da50e27052.html
WIN7旗舰版为什么右下角只显示时间而不显示日期:
你的任务栏是用的小图标吗?小图标就是只显示时间
改大图标方法:右键任务栏-》属性-》任务栏外观项把使用小图标前的勾去掉。
建议:把任务栏按钮,始终合并,这样更节省空间。
如果你没有勾选的话,那你的年月日一般默认就显示了,下面就看怎么显示星期了,下面是简单的步骤:
1、在显示时间的区域右键——【调整日期/时间(A)】
2、在弹出的窗口中选择“调整日期和时间”
在日期和时间设置界面,点击“更改日历设置”
在日期选项卡中,分别在短时间和长日期后加上“ dddd”
TIPS:dddd前面有个空格,大家别忘掉了
设置完成后,确认即可看到效果。
详细参考:http://wenku.baidu.com/view/1a45d9513c1ec5da50e27052.html
WIN7旗舰版为什么右下角只显示时间而不显示日期:
你的任务栏是用的小图标吗?小图标就是只显示时间
改大图标方法:右键任务栏-》属性-》任务栏外观项把使用小图标前的勾去掉。
建议:把任务栏按钮,始终合并,这样更节省空间。
http://oldboy.blog.51cto.com/2561410/1180894
http://liangxiao.blog.51cto.com/3626612/1183268
http://tywangpanpan.blog.51cto.com/6264315/1182927
http://sethfeng.blog.51cto.com/2769379/1183715
http://wiki.postgresql.org/wiki/PGStrom?utm_source=feedly
http://liangxiao.blog.51cto.com/3626612/1183268
http://tywangpanpan.blog.51cto.com/6264315/1182927
http://sethfeng.blog.51cto.com/2769379/1183715
http://wiki.postgresql.org/wiki/PGStrom?utm_source=feedly
Raspberry Pi的流行吸引了越来越多的公司进入到廉价单板计算机市场。25美元和35美元型号的Raspberry Pi共售出了120万。由德州仪器雇员创建的BeagleBoard推出了45美元的BeagleBone Black,硬件规格高于Raspberry Pi,采用 1GHz Sitara AM335x ARM Cortex-A8处理器, 512MB DDR3L内存,2GB储存空间,预装Ångström Linux,支持Ubuntu或 Android操作系统,支持连接到3D打印机、盖革计数器、遥控潜艇和LCD触摸屏等。类似的单板Linux PC并不少见,如69美元的ODROID-U配备了1.4Ghz Prime Cortex-A9四核处理器,Mali-400 Quad Core 400MHz,1GB内存;89美元的ODROID-U2配备了 1.7GHz四核处理器,2GB内存,支持Android 4.x和Ubuntu 12.10。
[实践OK]SecureCRT 自动登录脚本和直接界面设置登录到跳板机的方法备案,解决普通用户ssh连接linux服务器是总是提示:ulimit: open files: cannot modify limit: Operation not permitted。
Unix/LinuxC技术 jack 2013-4-24 16:52
cat /proc/361/limits |grep files
Max open files 1024 4096 files
一:SecureCRT 自动登录脚本:
常常会登录跳板机,里面的一些用户名和密码每次要重新输入,于是否,这就需要用一些捕获电脑输出(如输入用户名后会提示输入密码)的脚本,如果是自己先在跳板机会,执行脚本也成,这样用快捷键:alt+s R 参数后找到编辑好的脚本后,就可以自动登录到外网,还可以sudo成root等,但这个快捷命令有它的好处,如外面有多台,这时可以把多个自动登陆脚本放到不同文件,用上面的快捷键进行多次,但是只有一台时,用快捷键就有些麻烦,于是否,secureCRT有一个界面供我们使用,如下:
alt + B找到跳板机的那个IP,后在上面点右键,后连接下面有一个登陆动作->选 自动登录,选 上发送初始回车,下面有一行:
预期 发送 隐藏
[xiangdong@localhost ~] ssh -l xiangdong 192.168.109.8 可勾选/不勾选也成
xiangdong@192.168.109.8's password: xiangdong
[xiangdong@test ~] sudo -s
Password: xiangdong
以上就实现了如果登录跳板机,上面的脚本就会执行并自动登陆到外网那一台机器并sudo成root权限。这样一登录跳板机就上了外面的配置机器,极其方便,如果你在全局设置里->常规->默认会话->使用自动会话,添加这个跳板机为打开SecureCRT就自动登录后,更灰常的方便喽,嘿嘿。
注意:在登录xiangdong后有可能会有shell提示:
-bash: ulimit: open files: cannot modify limit: Operation not permitted
-bash: ulimit: open files: cannot modify limit: Operation not permitted
[xiangdong@test ~]
是因为:
vi /etc/profile里有一行:ulimit -n 200000 ,这个句柄权限是不能让我这个权限设置的,于是否,提示权限不够。
这里因java需要大量的句柄,所以修改大了很多,在此点特别备注,后面要捕获的,还是那个:[xiangdong@test ~],即可。
特别注意:这个脚本如果没有捕获到会一直捕获,直到捕获到,或这个shell终端挂掉,否则,再想运行其它脚本时选脚本时会变灰,没法再选。
二、解决普通用户ssh连接linux服务器是总是提示:ulimit: open files: cannot modify limit: Operation not permitted
vi /etc/profile //这个文件每个用户都会执行它
ulimit -S -c 0 > /dev/null 2>&1 //实践发现这个放在/etc/profile里不会报
//下面这样的如果不以root去执行肯定会报:cannot modify limit: Operation not permitted
ulimit -n 200000
ulimit -HSn 65536
ulimit -HSn 65536
ulimit -n 200000
su 普通用户后:
[xiangdong@localhost ~]$ source /etc/profile
-bash: ulimit: open files: cannot modify limit: Operation not permitted
去掉后就OK了,当时有两个,发现去了还是有,一查才是跳板机上还有一样的问题,再次去掉就好了。
特别注意:有时会有定时脚本会往这个/etc/profile里写,如再次出现得查一下是从哪儿写过来的。
Max open files 1024 4096 files
一:SecureCRT 自动登录脚本:
常常会登录跳板机,里面的一些用户名和密码每次要重新输入,于是否,这就需要用一些捕获电脑输出(如输入用户名后会提示输入密码)的脚本,如果是自己先在跳板机会,执行脚本也成,这样用快捷键:alt+s R 参数后找到编辑好的脚本后,就可以自动登录到外网,还可以sudo成root等,但这个快捷命令有它的好处,如外面有多台,这时可以把多个自动登陆脚本放到不同文件,用上面的快捷键进行多次,但是只有一台时,用快捷键就有些麻烦,于是否,secureCRT有一个界面供我们使用,如下:
alt + B找到跳板机的那个IP,后在上面点右键,后连接下面有一个登陆动作->选 自动登录,选 上发送初始回车,下面有一行:
预期 发送 隐藏
[xiangdong@localhost ~] ssh -l xiangdong 192.168.109.8 可勾选/不勾选也成
xiangdong@192.168.109.8's password: xiangdong
[xiangdong@test ~] sudo -s
Password: xiangdong
以上就实现了如果登录跳板机,上面的脚本就会执行并自动登陆到外网那一台机器并sudo成root权限。这样一登录跳板机就上了外面的配置机器,极其方便,如果你在全局设置里->常规->默认会话->使用自动会话,添加这个跳板机为打开SecureCRT就自动登录后,更灰常的方便喽,嘿嘿。
注意:在登录xiangdong后有可能会有shell提示:
-bash: ulimit: open files: cannot modify limit: Operation not permitted
-bash: ulimit: open files: cannot modify limit: Operation not permitted
[xiangdong@test ~]
是因为:
vi /etc/profile里有一行:ulimit -n 200000 ,这个句柄权限是不能让我这个权限设置的,于是否,提示权限不够。
这里因java需要大量的句柄,所以修改大了很多,在此点特别备注,后面要捕获的,还是那个:[xiangdong@test ~],即可。
特别注意:这个脚本如果没有捕获到会一直捕获,直到捕获到,或这个shell终端挂掉,否则,再想运行其它脚本时选脚本时会变灰,没法再选。
二、解决普通用户ssh连接linux服务器是总是提示:ulimit: open files: cannot modify limit: Operation not permitted
vi /etc/profile //这个文件每个用户都会执行它
ulimit -S -c 0 > /dev/null 2>&1 //实践发现这个放在/etc/profile里不会报
//下面这样的如果不以root去执行肯定会报:cannot modify limit: Operation not permitted
ulimit -n 200000
ulimit -HSn 65536
ulimit -HSn 65536
ulimit -n 200000
su 普通用户后:
[xiangdong@localhost ~]$ source /etc/profile
-bash: ulimit: open files: cannot modify limit: Operation not permitted
去掉后就OK了,当时有两个,发现去了还是有,一查才是跳板机上还有一样的问题,再次去掉就好了。
特别注意:有时会有定时脚本会往这个/etc/profile里写,如再次出现得查一下是从哪儿写过来的。




