某种意义上,尽管绝大多数人不愿意承认,他们的所谓“友谊”实际上只不过是“交换关系”。可是,如果自己拥有的资源不够多不够好,那么就更可能变成“索取方”,做不到“公平交换”,最终成为对方的负担。这样的时候,所谓的“友谊”就会慢·漫无疾而终。也有持续下去的时候,但更可能是另外一方在耐心等待下一次交换,以便实现“公平”。电影《教父》里,棺材铺的老板亚美利哥。勃纳瑟拉决心找教父考利昂替他出气并为自己的女儿讨回公道的时候,亚美利哥就是“索取方”。许多年后,教父考利昂终于在一个深夜敲开了亚美利哥的门……
阅读全文
阅读全文
[实践OK]DD命令复制磁盘文件,服务器磁盘坏块检查,Linux下分割、合并文件——dd和cat,linux dd指令用法中参数bs,count,linux dd磁盘坏块修复。
Unix/LinuxC技术 jackxiang 2013-4-18 17:15
DD命令复制磁盘文件:
linux下使用dd命令复制磁盘
# dd if=/dev/sdc of=/dev/sdd bs=2M status=progress
服务器磁盘坏块检查:
badblocks -s -v /dev/sdb
实践如下:
====================================================
linux dd指令用法中参数bs,count:
bs=600 count=1,备份第一块为600个字节的区域
若显示0+0,表示备份的空间不到一块指定大小的区域.(大小默认好象为512个字节)
bs=512 count=2,备份前2块总共为1024个字节的区域
屏幕上显示2+1,表示备份了2个块,1表示文件被整个备份了
屏幕上显示2+0,表示备份了2个块,0表示文件没被整个备份
cat /tmp/sdbbadblocks.log
774968152 774968153 774968154 774968155 774968900 774968901 774968902 774968903 774969648 774969649 774969650 774969651 774970396 774970397 774970398 774970399 774971144 774971145 774971146 774971147 774971892 774971893 774971894 774971895 774973516 774973517 774973518 774973519
写入:
badblocks -w -f /dev/sda 774968152 774968153 774968154 774968155 774968900 774968901 774968902 774968903 774969648 774969649 774969650 774969651 774970396 774970397 774970398 774970399 774971144 774971145 774971146 774971147 774971892 774971893 774971894 774971895 774973516 774973517 774973518 774973519
badblocks是Linux下常用的坏道修复工具。当你觉得硬盘上可能有坏道,或者是SMART数据显示有坏道的时候,都可以用badblocks来检查一下。
假设我们要检查的硬盘是/dev/sdb
$sudo badblocks -s -v -o sdbbadblocks.log /dev/sdb
这样就可以对硬盘进行只读扫描,自动获取硬盘块数目并扫描全部块,将扫描日志输出到屏幕同时记录在sdbbadblocks.log文件中。
由于扫描速度比较低,一次不一定能扫完,可以分多次进行。
sudo badblocks -s -v -o sdbbadblocks.log /dev/sdb END START
将END和START换成结束和开始的块的编号就可以了。
如果找到了坏道,可以进行写入扫描进行修复。写入扫描遇到坏道的时候会自动重映射。写入扫描会覆盖原有数据,所以请先备份。写入扫描速度很低,所以应该只扫描只读扫描时候发现错误的部分。
$sudo badblocks -w -s /dev/sdb END START
背景:Unix上传文件如果是分块断点上传,需要合并文件,如果是想做测试,需要分割文件。
我們得到了一个文件/root/sdb.bad :
16435904
sdb 有1个坏块
先用dd尽量备份坏块
6.dd if=/dev/sdb bs=4096 skip=16435904 of=/tmp/15435904.dat count=1
如果显示读取字节数是0就多试几次, 不行就可能丢失此块数据, 倒是不用担心,一般不会有太大问题.
用badblocks的写测试功能,对这些坏块进行重写(注意! -w写测试会覆盖数据):
7.badblocks -w -f /dev/sdb2 16435904 16435904
如果前面的操作有成功的备份/tmp/15435904.dat, 就把它写回:
8.dd if=/tmp/15435904.dat of=/dev/sdb seek=15435904 bs=4096 count=1
其实我们不需要等待badblocks扫描完成, 就可以进行修复。
badblocks是对块设备进行处理, 所以可以实现对挂载中的系统进行处理。
在修复前后,利用smartctl 对磁盘进行long测试
# smartctl -l selftest /dev/sdb
阅读全文
linux下使用dd命令复制磁盘
# dd if=/dev/sdc of=/dev/sdd bs=2M status=progress
服务器磁盘坏块检查:
badblocks -s -v /dev/sdb
实践如下:
====================================================
linux dd指令用法中参数bs,count:
bs=600 count=1,备份第一块为600个字节的区域
若显示0+0,表示备份的空间不到一块指定大小的区域.(大小默认好象为512个字节)
bs=512 count=2,备份前2块总共为1024个字节的区域
屏幕上显示2+1,表示备份了2个块,1表示文件被整个备份了
屏幕上显示2+0,表示备份了2个块,0表示文件没被整个备份
cat /tmp/sdbbadblocks.log
774968152 774968153 774968154 774968155 774968900 774968901 774968902 774968903 774969648 774969649 774969650 774969651 774970396 774970397 774970398 774970399 774971144 774971145 774971146 774971147 774971892 774971893 774971894 774971895 774973516 774973517 774973518 774973519
写入:
badblocks -w -f /dev/sda 774968152 774968153 774968154 774968155 774968900 774968901 774968902 774968903 774969648 774969649 774969650 774969651 774970396 774970397 774970398 774970399 774971144 774971145 774971146 774971147 774971892 774971893 774971894 774971895 774973516 774973517 774973518 774973519
badblocks是Linux下常用的坏道修复工具。当你觉得硬盘上可能有坏道,或者是SMART数据显示有坏道的时候,都可以用badblocks来检查一下。
假设我们要检查的硬盘是/dev/sdb
$sudo badblocks -s -v -o sdbbadblocks.log /dev/sdb
这样就可以对硬盘进行只读扫描,自动获取硬盘块数目并扫描全部块,将扫描日志输出到屏幕同时记录在sdbbadblocks.log文件中。
由于扫描速度比较低,一次不一定能扫完,可以分多次进行。
sudo badblocks -s -v -o sdbbadblocks.log /dev/sdb END START
将END和START换成结束和开始的块的编号就可以了。
如果找到了坏道,可以进行写入扫描进行修复。写入扫描遇到坏道的时候会自动重映射。写入扫描会覆盖原有数据,所以请先备份。写入扫描速度很低,所以应该只扫描只读扫描时候发现错误的部分。
$sudo badblocks -w -s /dev/sdb END START
背景:Unix上传文件如果是分块断点上传,需要合并文件,如果是想做测试,需要分割文件。
我們得到了一个文件/root/sdb.bad :
16435904
sdb 有1个坏块
先用dd尽量备份坏块
6.dd if=/dev/sdb bs=4096 skip=16435904 of=/tmp/15435904.dat count=1
如果显示读取字节数是0就多试几次, 不行就可能丢失此块数据, 倒是不用担心,一般不会有太大问题.
用badblocks的写测试功能,对这些坏块进行重写(注意! -w写测试会覆盖数据):
7.badblocks -w -f /dev/sdb2 16435904 16435904
如果前面的操作有成功的备份/tmp/15435904.dat, 就把它写回:
8.dd if=/tmp/15435904.dat of=/dev/sdb seek=15435904 bs=4096 count=1
其实我们不需要等待badblocks扫描完成, 就可以进行修复。
badblocks是对块设备进行处理, 所以可以实现对挂载中的系统进行处理。
在修复前后,利用smartctl 对磁盘进行long测试
# smartctl -l selftest /dev/sdb
阅读全文
php通过sudo执行root权限的程序
Php/Js/Shell/Go jackxiang 2013-4-18 11:47
最近公司需要通过web界面修改squid.conf,然后保存配置文件的同时重启动squid,web服务器是nginx+php,文件用户和组都是www。
首先编辑 /etc/sudoers 使用 visudo来编辑
/etc/sudoers的权限是440:
-r–r—– 1 root root 3248 Oct 18 23:47 /etc/sudoers
需要chmod u+w /etc/sudoers
修改完毕之后再chmod -w /etc/sudoers
因为如果/etc/sudoers的权限不是440,那么sudo会报错:
[root@hn ~]# sudo
sudo: /etc/sudoers is mode 0640, should be 0440
sudo: no valid sudoers sources found, quitting
在最下面添加一行
nobody ALL=NOPASSWD:/usr/local/squid/sbin/squid -k reconfigure
然后注释掉文件中的Defaults requiretty这行
否则会出现sudo: sorry, you must have a tty to run sudo的错误
保存退出即可
测试
写一个php文件,内容如下
来自:http://tunps.com/php-sudo-root-privilege-program
首先编辑 /etc/sudoers 使用 visudo来编辑
/etc/sudoers的权限是440:
-r–r—– 1 root root 3248 Oct 18 23:47 /etc/sudoers
需要chmod u+w /etc/sudoers
修改完毕之后再chmod -w /etc/sudoers
因为如果/etc/sudoers的权限不是440,那么sudo会报错:
[root@hn ~]# sudo
sudo: /etc/sudoers is mode 0640, should be 0440
sudo: no valid sudoers sources found, quitting
在最下面添加一行
nobody ALL=NOPASSWD:/usr/local/squid/sbin/squid -k reconfigure
然后注释掉文件中的Defaults requiretty这行
否则会出现sudo: sorry, you must have a tty to run sudo的错误
保存退出即可
测试
写一个php文件,内容如下
来自:http://tunps.com/php-sudo-root-privilege-program
背景:把Nginx用来代理apache的svn,在传一个psd时出现:Server sent unexpected return value (413 Request Entity Too Large) in respon。
Nginx上传文件出现一个错误:413 Request Entity Too Large,百度了一下,原来是文件太大了。
原因上传文件超过最大值,修改nginx.conf的值就可以解决了。
client_max_body_size 2M
改为
client_max_body_size 50M;
Nginx上传文件出现一个错误:413 Request Entity Too Large,百度了一下,原来是文件太大了。
原因上传文件超过最大值,修改nginx.conf的值就可以解决了。
client_max_body_size 2M
改为
client_max_body_size 50M;
做门户网站的时候 启动用了大量二级域名:
有资料说明,IE在网页载入过程中,在同1时刻,对同1域名并行加的HTTP请求数 量最高为2个,如果网页需要加载的文件数量超过2个(通常远远超过..),要加快网页访问速度,最好将文件分布到多个域名,例如19楼,其js文件采用独 立的域名,据说百度的图片服务器数量在20台以上,当然,2级域名 也行。
有资料说明,IE在网页载入过程中,在同1时刻,对同1域名并行加的HTTP请求数 量最高为2个,如果网页需要加载的文件数量超过2个(通常远远超过..),要加快网页访问速度,最好将文件分布到多个域名,例如19楼,其js文件采用独 立的域名,据说百度的图片服务器数量在20台以上,当然,2级域名 也行。
背景:
对于Nginx的上传模块,在内存上可能会有不少的缩减和PHP的相比,在性能上也就是上传的速度可能要快2,3倍,但这个模块对认证的配置没有,也就是如有某cookie才能上传等,它仅仅就是一个模块,也就是说这一块还有待hack或作者本人去实现,我看网上也有其它兄弟想用并去试着实现这一块。因为是http里的rfc协议的支持,它也就支持断点续传了,这有一篇文章讲述到这一块,于是做出转载之举动,文章如下:
阅读全文
对于Nginx的上传模块,在内存上可能会有不少的缩减和PHP的相比,在性能上也就是上传的速度可能要快2,3倍,但这个模块对认证的配置没有,也就是如有某cookie才能上传等,它仅仅就是一个模块,也就是说这一块还有待hack或作者本人去实现,我看网上也有其它兄弟想用并去试着实现这一块。因为是http里的rfc协议的支持,它也就支持断点续传了,这有一篇文章讲述到这一块,于是做出转载之举动,文章如下:
阅读全文
[实践OK]PHP在经Nginx上传模块上传后的移动文件之rename函数问题的备查。
Php/Js/Shell/Go jackxiang 2013-4-16 17:21
背景:PHP 5.1.6,我这儿有一个需求用Nginx上传模块上传,但是发现用rename有些问题,于是修改为了:copy又可以了。
打听了一下:说是那个移动到的目标的磁盘是挂载的。
Download:
http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gz
configure and make :
在 PHP 4.3.3 之前,linux系统下rename()是无法跨分区操作的。
有人出现:
而如果在不同的分区,就会失败。不过从其它分区rename()至/tmp/临时目录可以成功,但是再rename()回来就直接提示失败。
网上也没有找到比较合适的解释与解决方案。
其中虽然有效但是感觉不太完美的是将rename()函数替换为 system("mv ".$src." ".$Dest)
这个我编写了PHP的测试脚本验证过,利用PHP内置的chmod()函数将对应的目录的权限设置为0777后,再执行rename(),错误依旧。chown()没有测试。
并且ls -al 察看对应路径的属性,已经被成功修改了。
应该可以确认是有chmod()的权限的。
实践如下:
后来,经实际测试rename不行,于是改用copy函数,并删除掉源,估计和该环境是挂载的目标磁盘有关,后发现是权限问题加上:755权限可以,究竟是什么问题无法得知:
修改为:
Ps:nginx和php都是ww权限在运行。
再试:
再加上:
move_upload_file无法移动文件。
打开错误:
问题根本原因想到想不到滴:
我都说这个rename函数怎么好像有问题哩,原来是这样:
这个rename的目标目录有一个另外的转码的程序在看护是一个daemon,一发现我这边有一个文件上传后rename过去就给转走了,于是给我测试造成一种rename函数有问题有时有(当时这个程序没有取走),有时无(一上传到这个目录刚好被这个程序给取走了),于是觉得这个rename不靠谱,实际上就是这个视频转码的程序。
有一个思路上的问题:
视频转码,我思想上是要是视频文件才转,后来才发现不用是视频文件的后缀,只要在上传时插入数据库后,所有放到那边的文件都给移走了,如果转失败也是在转码那边删除,造成这个目录不可能有一个文件存在,就是.exe的.dll的也会移走,问题得到了解决。
害我找了一上午看这个问题,不过收获到的非PHP的知识,更多的是一种排查问题的思路,EOF。
后记:
Rango 下午 02:37:50
有nginx么?
可以用nginx的上传模块
那个比较强
回忆未来-向东-Jàck 下午 02:38:51
是么,我也用,你有那个的生产环境的配置么?
我感觉那个好像上传时是一点一点的写,它是先把上传的文件内容放内存缓冲么?
Rango 下午 02:39:15
是的。
先到缓存,缓存满了,就写文件
这样效率非常高
文件上传完了,再通知PHp
打听了一下:说是那个移动到的目标的磁盘是挂载的。
Download:
http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gz
configure and make :
在 PHP 4.3.3 之前,linux系统下rename()是无法跨分区操作的。
有人出现:
而如果在不同的分区,就会失败。不过从其它分区rename()至/tmp/临时目录可以成功,但是再rename()回来就直接提示失败。
网上也没有找到比较合适的解释与解决方案。
其中虽然有效但是感觉不太完美的是将rename()函数替换为 system("mv ".$src." ".$Dest)
这个我编写了PHP的测试脚本验证过,利用PHP内置的chmod()函数将对应的目录的权限设置为0777后,再执行rename(),错误依旧。chown()没有测试。
并且ls -al 察看对应路径的属性,已经被成功修改了。
应该可以确认是有chmod()的权限的。
实践如下:
后来,经实际测试rename不行,于是改用copy函数,并删除掉源,估计和该环境是挂载的目标磁盘有关,后发现是权限问题加上:755权限可以,究竟是什么问题无法得知:
修改为:
Ps:nginx和php都是ww权限在运行。
再试:
再加上:
move_upload_file无法移动文件。
打开错误:
问题根本原因想到想不到滴:
我都说这个rename函数怎么好像有问题哩,原来是这样:
这个rename的目标目录有一个另外的转码的程序在看护是一个daemon,一发现我这边有一个文件上传后rename过去就给转走了,于是给我测试造成一种rename函数有问题有时有(当时这个程序没有取走),有时无(一上传到这个目录刚好被这个程序给取走了),于是觉得这个rename不靠谱,实际上就是这个视频转码的程序。
有一个思路上的问题:
视频转码,我思想上是要是视频文件才转,后来才发现不用是视频文件的后缀,只要在上传时插入数据库后,所有放到那边的文件都给移走了,如果转失败也是在转码那边删除,造成这个目录不可能有一个文件存在,就是.exe的.dll的也会移走,问题得到了解决。
害我找了一上午看这个问题,不过收获到的非PHP的知识,更多的是一种排查问题的思路,EOF。
后记:
Rango 下午 02:37:50
有nginx么?
可以用nginx的上传模块
那个比较强
回忆未来-向东-Jàck 下午 02:38:51
是么,我也用,你有那个的生产环境的配置么?
我感觉那个好像上传时是一点一点的写,它是先把上传的文件内容放内存缓冲么?
Rango 下午 02:39:15
是的。
先到缓存,缓存满了,就写文件
这样效率非常高
文件上传完了,再通知PHp
Firefox上的Flash调试工具——FlashFirebug
Php/Js/Shell/Go jackxiang 2013-4-16 11:48
背景:想调试一下Flash的上传,用Firebug抓包上传的Url抓不到,于是找了下其他的插件,如下。
DownLoad Url:http://www.o-minds.com/payment/flashfirebug?m=1
FlashFirebug是一款可以让开发者在浏览器中直接调试Flash程序的Firefox扩展。通过这款扩展,开发人员可以像在浏览器中调试HTML/JS/CSS那样来直观的进行AS3的调试,操作界面则与Firebug一致。通过这款扩展,Firebug可以覆盖几乎全部的Web开发人员调试需求。
使用Flashfirebug需要安装firefox(当然!)、firebug以及debug版本的flash播放器.
FlashFirebug下载地址:https://addons.mozilla.org/en-US/firefox/addon/161670/
官方网站/使用帮助:http://www.o-minds.com/products/flashfirebug
本文来自:http://blog.sina.com.cn/s/blog_532751d90100r189.html
在adobe的网站上,有几种debug版本
http://www.adobe.com/support/flashplayer/downloads.html
第一个是IE的插件,
Download the Windows Flash Player 10.2 ActiveX control content debugger (for IE) (EXE, 2.99MB)
第二个是firefox的插件,
Download the Windows Flash Player 10.2 Plugin content debugger (for Netscape-compatible browsers) (EXE, 2.95MB)
安装了以上2个插件后,便可以用IE和firefox调试了。
第三个应该是桌面版本
Download the Windows Flash Player 10.2 Projector content debugger (EXE, 6.36MB)
到底是用IE还是firefox可以在window-> preference ->General->Web Browser 里选择合适的浏览。
我安装了chrome firefox ie,但选择里面没有chrome。但要用chrome来调试swf,也需要安装 for Netscape-compatible browsers 这个插件就行了。
C:/Program Files/Mozilla Firefox/plugins/NPSWF32.dll
Flash Builder cannot locate the required debugger version of Adobe Flash Player. You might need to install the debugger version of the Flash Player or reinstall Flash Builder.
来自:http://blog.csdn.net/lijiecong/article/details/6312382
DownLoad Url:http://www.o-minds.com/payment/flashfirebug?m=1
FlashFirebug是一款可以让开发者在浏览器中直接调试Flash程序的Firefox扩展。通过这款扩展,开发人员可以像在浏览器中调试HTML/JS/CSS那样来直观的进行AS3的调试,操作界面则与Firebug一致。通过这款扩展,Firebug可以覆盖几乎全部的Web开发人员调试需求。
使用Flashfirebug需要安装firefox(当然!)、firebug以及debug版本的flash播放器.
FlashFirebug下载地址:https://addons.mozilla.org/en-US/firefox/addon/161670/
官方网站/使用帮助:http://www.o-minds.com/products/flashfirebug
本文来自:http://blog.sina.com.cn/s/blog_532751d90100r189.html
在adobe的网站上,有几种debug版本
http://www.adobe.com/support/flashplayer/downloads.html
第一个是IE的插件,
Download the Windows Flash Player 10.2 ActiveX control content debugger (for IE) (EXE, 2.99MB)
第二个是firefox的插件,
Download the Windows Flash Player 10.2 Plugin content debugger (for Netscape-compatible browsers) (EXE, 2.95MB)
安装了以上2个插件后,便可以用IE和firefox调试了。
第三个应该是桌面版本
Download the Windows Flash Player 10.2 Projector content debugger (EXE, 6.36MB)
到底是用IE还是firefox可以在window-> preference ->General->Web Browser 里选择合适的浏览。
我安装了chrome firefox ie,但选择里面没有chrome。但要用chrome来调试swf,也需要安装 for Netscape-compatible browsers 这个插件就行了。
C:/Program Files/Mozilla Firefox/plugins/NPSWF32.dll
Flash Builder cannot locate the required debugger version of Adobe Flash Player. You might need to install the debugger version of the Flash Player or reinstall Flash Builder.
来自:http://blog.csdn.net/lijiecong/article/details/6312382
1.系统管理--》常用设置--》选项--》Accept remote API calls 启用。
2.继续是左侧栏: 'System' -> 'Plugins' ,插件管理找到 'RPC JIRA Plugins' ,确保 'System SOAP Services' 及 'System XML-RPC Services' 处于可用状态。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在使用Mylyn连接JIRA的时候发现一个错误,大概意思是JIRA的RPC服务未开启。
以下提供JIRA开启RPC的方法,方法很简单:
1. 进入JIRA管理的页面,在左侧栏中找到:'Global Settings' -> 'General Configuration' ,将右侧的 'Option' 中的 'Accept remote API calls' 设为 'ON'
2. 继续是左侧栏: 'System' -> 'Plugins' ,找到 'RPC JIRA Plugins' ,确保 'System SOAP Services' 及 'System XML-RPC Services' 处于可用状态。
这是Mylyn已经可以连接JIRA了。
提示:
如果在第二步中没有找到对应的两个项目,可以在http://repository.atlassian.com/atlassian-jira-rpc-plugin/jars/中下载插件并且放入JIRA发布包的WEB-INF/lib中。
参考文章:http://confluence.atlassian.com/display/JIRA/Enabling+the+RPC+plugin
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
JiraRMI 是一个 JIRA 的插件,用来提供可通过 Java RMI 远程方法调用方式来访问 JIRA 的一些功能,类似于 JIRA RPC (SOAP) 插件,提供更高效和丰富的功能。
主页:http://sourceforge.net/projects/jirarmi/
下载:http://sourceforge.net/projects/jirarmi/files/
来自:http://www.linuxdiyf.com/viewarticle.php?id=310266
参考调用:http://www.cnblogs.com/likwo/archive/2009/12/21/1629221.html
http://zhb1208.iteye.com/blog/761918
2.继续是左侧栏: 'System' -> 'Plugins' ,插件管理找到 'RPC JIRA Plugins' ,确保 'System SOAP Services' 及 'System XML-RPC Services' 处于可用状态。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在使用Mylyn连接JIRA的时候发现一个错误,大概意思是JIRA的RPC服务未开启。
以下提供JIRA开启RPC的方法,方法很简单:
1. 进入JIRA管理的页面,在左侧栏中找到:'Global Settings' -> 'General Configuration' ,将右侧的 'Option' 中的 'Accept remote API calls' 设为 'ON'
2. 继续是左侧栏: 'System' -> 'Plugins' ,找到 'RPC JIRA Plugins' ,确保 'System SOAP Services' 及 'System XML-RPC Services' 处于可用状态。
这是Mylyn已经可以连接JIRA了。
提示:
如果在第二步中没有找到对应的两个项目,可以在http://repository.atlassian.com/atlassian-jira-rpc-plugin/jars/中下载插件并且放入JIRA发布包的WEB-INF/lib中。
参考文章:http://confluence.atlassian.com/display/JIRA/Enabling+the+RPC+plugin
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
JiraRMI 是一个 JIRA 的插件,用来提供可通过 Java RMI 远程方法调用方式来访问 JIRA 的一些功能,类似于 JIRA RPC (SOAP) 插件,提供更高效和丰富的功能。
主页:http://sourceforge.net/projects/jirarmi/
下载:http://sourceforge.net/projects/jirarmi/files/
来自:http://www.linuxdiyf.com/viewarticle.php?id=310266
参考调用:http://www.cnblogs.com/likwo/archive/2009/12/21/1629221.html
http://zhb1208.iteye.com/blog/761918
Zend Optimizer 源代码开源
年前 Zend 公司称有意将 Zend Optimizer 开源(详情),而 Zend 已经将源码提交到 Github 上,网址是
https://github.com/zend-dev/ZendOptimizerPlus/
目前正在开发阶段的 PHP 5.5 将集成 Zend Optimizer+。
这个消息是由 Zend 公司的 CTO Zeev Suraski 宣布的。Zend Optimizer+ 是代码缓存优化工具,以前是收费产品 Zend Server 的一部分,最近开源了。通过对 PHP 文件生成的字节码的优化,Zend Optimizer+ 能提高解释器的性能。同时,它也能在共享的内存中保存预编译的字节码。
年前 Zend 公司称有意将 Zend Optimizer 开源(详情),而 Zend 已经将源码提交到 Github 上,网址是
https://github.com/zend-dev/ZendOptimizerPlus/
目前正在开发阶段的 PHP 5.5 将集成 Zend Optimizer+。
这个消息是由 Zend 公司的 CTO Zeev Suraski 宣布的。Zend Optimizer+ 是代码缓存优化工具,以前是收费产品 Zend Server 的一部分,最近开源了。通过对 PHP 文件生成的字节码的优化,Zend Optimizer+ 能提高解释器的性能。同时,它也能在共享的内存中保存预编译的字节码。
HTTP断点续传的基本原理
断点续传是我们现在经常接触的概念,那么HTTP协议是如何支持断点续传的呢。我们先从一个例子来看看。
下面是一个断点续传的例子:(使用Net Vampire得到)
I 01-7-12 19:19:23 ------------------------- Attempt 1 -------------------------
P 01-7-12 19:19:24 Connecting to 127.0.0.3 ...
P 01-7-12 19:19:24 Connected to 127.0.0.3 [127.0.0.3]
S 01-7-12 19:19:24 GET /VS0515AI.EXE HTTP/1.1
S 01-7-12 19:19:24 Connection: close
S 01-7-12 19:19:24 Host: 127.0.0.3
S 01-7-12 19:19:24 Accept: */*
S 01-7-12 19:19:24 Pragma: no-cache
S 01-7-12 19:19:24 Cache-Control: no-cache
S 01-7-12 19:19:24 Referer: http://127.0.0.3/
S 01-7-12 19:19:24 User-Agent: Mozilla/4.04 [en] (Win95; I ;Nav)
S 01-7-12 19:19:24
R 01-7-12 19:19:24 HTTP/1.1 200 OK
R 01-7-12 19:19:24 Server: Zero Http Server/1.0
R 01-7-12 19:19:24 Date: Thu, 12 Jul 2001 11:19:24 GMT
R 01-7-12 19:19:24 Cache-Control: no-cache
R 01-7-12 19:19:24 Last-Modified: Tue, 30 Jan 2001 13:11:30 GMT
R 01-7-12 19:19:24 Content-Type: application/octet-stream
R 01-7-12 19:19:24 Content-Length: 15143086
R 01-7-12 19:19:24 Connection: close
R 01-7-12 19:19:24
P 01-7-12 19:19:25 Data transfer started
I 01-7-12 19:19:32 Job Stopped by user
I 01-7-12 19:19:33 Received 5 275 648 bytes in 0:00:07 (691 435 bytes/s)
I 01-7-12 19:19:40 ------------------------- Attempt 2 -------------------------
P 01-7-12 19:19:40 Connecting to 127.0.0.3 ...
P 01-7-12 19:19:40 Connected to 127.0.0.3 [127.0.0.3]
S 01-7-12 19:19:40 GET /VS0515AI.EXE HTTP/1.1
S 01-7-12 19:19:40 Connection: close
S 01-7-12 19:19:40 Host: 127.0.0.3
S 01-7-12 19:19:40 Accept: */*
S 01-7-12 19:19:40 Pragma: no-cache
S 01-7-12 19:19:40 Cache-Control: no-cache
S 01-7-12 19:19:40 Referer: http://127.0.0.3/
S 01-7-12 19:19:40 User-Agent: Mozilla/4.04 [en] (Win95; I ;Nav)
S 01-7-12 19:19:40 Range: bytes=5275648-
S 01-7-12 19:19:40
R 01-7-12 19:19:40 HTTP/1.1 206 Partial Content
R 01-7-12 19:19:40 Server: Zero Http Server/1.0
R 01-7-12 19:19:40 Date: Thu, 12 Jul 2001 11:19:40 GMT
R 01-7-12 19:19:40 Cache-Control: no-cache
R 01-7-12 19:19:40 Last-Modified: Tue, 30 Jan 2001 13:11:30 GMT
R 01-7-12 19:19:40 Content-Type: application/octet-stream
R 01-7-12 19:19:40 Content-Range: bytes 5275648-15143085/15143086
R 01-7-12 19:19:40 Content-Length: 9867438
R 01-7-12 19:19:40 Connection: close
R 01-7-12 19:19:40
P 01-7-12 19:19:40 Data transfer started
I 01-7-12 19:19:41 Job Stopped by user
I 01-7-12 19:19:41 Received 1 124 756 bytes in 0:00:01 (969 617 bytes/s)
第一次是普通的传输;第二次由于没有传完全,就发出了Range这个头部,从5275648字节开始传输(默认是按字节算),回应使用206状态值,表示现在开始部分传输,回复Content-Length头部,表示传输的部分,用字节记,然后就与普通传输没有区别了。
来自:http://blog.csdn.net/sendy888/article/details/1719105
c语言实现HTTP断点续传:
断点续传大致分了三个步骤。
1、寻找文件已经下载到的指针位置。
long FileLocate(char* path) /*传入文件位置,返回值为0,则为需要新建下载,大于0则续传 */
{
FILE *fp; long last;
if((fp=fopen(path,"ab+"))==NULL)
{
printf("can not open %s\n",path);
return 0;
}
else
{
fseek(fp,0L,SEEK_END);
last=ftell(fp);
fclose(fp);
return last;
}
}
这里唯一要注意的就是打开方式,不要用wb打开,这样会清空前面已经下载好的数据,而且下载完成后文件的大小是正确的,但是文件数据前端就会丢失掉。
2、将文件下载的位置传输到header里面。
header里面有这个参数 Range,通过设置这个参数可以让服务器给你返回你文件指定位置的数据
Range:bytes=512000- 这个意思就是从 512000这个位置开始下载。
服务器正常返回的状态码再此时就应该是:206
还有就是把你要下载的文件的指针位置设置成要传输的位置,然后就开始准备下了。
3、从服务器返回的body里面读取数据,将读出来的数据写入到续传的那个文件中就可以了。
也希望有兴趣的朋友一块来探讨
来自:http://alloxa.blog.51cto.com/1427286/412451
背景:Lua在游戏行业比较火,不少公司在用它。
最近公司在考虑做openapi的proxy服务器,公司主营网游,旗下多款游戏的用户登陆,充值等等有很多接口,想聚合分散的接口统一走一个通道,所以都要走这上面,压力不小。
在语言和平台上主要在nodejs和ngx_lua中选择,当然最后还是选择了ngx_lua放弃了nodejs的方案,主要原因:
1、主要考虑公司会nodejs的人貌似就我一个,会累死我的
2、对于ngx的运维和配置相对比nodejs来说更加熟悉和有经验
3、从各种性能测试来说ngx_lua似乎在CPU和内存上更胜一筹
我在研究一阵子ngx_lua之后发现lua语法和js真的很像,同时ngx_lua模型也是单线程的异步的事件驱动的,工作原理和nodejs相同,代码甚至比nodejs的异步回调更好写一些。
性能测试,100并发
php:17400
nodejs:31197
ngx_lua:32628
单纯做http代理服务器加上一些简单的逻辑,似乎ngx_lua的方案更加合适,同时ngx_lua还支持redis、mysql等数据库的支持。
最后附上PHP vs Node.js vs Nginx-Lua性能测试,转载的
http://bluehua.org/demo/php.node.lua.html
最近公司在考虑做openapi的proxy服务器,公司主营网游,旗下多款游戏的用户登陆,充值等等有很多接口,想聚合分散的接口统一走一个通道,所以都要走这上面,压力不小。
在语言和平台上主要在nodejs和ngx_lua中选择,当然最后还是选择了ngx_lua放弃了nodejs的方案,主要原因:
1、主要考虑公司会nodejs的人貌似就我一个,会累死我的
2、对于ngx的运维和配置相对比nodejs来说更加熟悉和有经验
3、从各种性能测试来说ngx_lua似乎在CPU和内存上更胜一筹
我在研究一阵子ngx_lua之后发现lua语法和js真的很像,同时ngx_lua模型也是单线程的异步的事件驱动的,工作原理和nodejs相同,代码甚至比nodejs的异步回调更好写一些。
性能测试,100并发
php:17400
nodejs:31197
ngx_lua:32628
单纯做http代理服务器加上一些简单的逻辑,似乎ngx_lua的方案更加合适,同时ngx_lua还支持redis、mysql等数据库的支持。
最后附上PHP vs Node.js vs Nginx-Lua性能测试,转载的
http://bluehua.org/demo/php.node.lua.html
df -hT
-T, --print-type print file system type
-h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)
-H, --si likewise, but use powers of 1000 not 1024
一、看分区的格式:
root@192.168.137.159:~# df -hT
文件系统 类型 容量 已用 可用 已用%% 挂载点
/dev/mapper/VolGroup-lv_root
ext4 29G 23G 4.0G 86% /
tmpfs tmpfs 250M 0 250M 0% /dev/shm
/dev/sda1 ext4 485M 38M 422M 9% /boot
.host:/ vmhgfs 100G 94G 5.6G 95% /mnt/hgfs
.host:/ vmhgfs 100G 94G 5.6G 95% /mnt/hgfs
二、加上-H显示用了多少:
[root@ZWCLC6X-7198 /]# df -hTH
文件系统 类型 容量 已用 可用 已用%% 挂载点
/dev/sda3 ext4 15G 3.2G 11G 24% /
tmpfs tmpfs 3.1G 0 3.1G 0% /dev/shm
/dev/sda1 ext4 529M 45M 457M 9% /boot
/dev/sdb ext4 101G 197M 96G 1% /data
三、ext4减少inode,mkfs.ext4格式化大容量磁盘:
减小inode总数,可以减小inode占用的磁盘空间,减少磁盘浪费。
例如:指定1m空间分配一个inode来格式化2TB磁盘
mkfs.ext4 -i 1048576 -n /dev/sdc #1024*1024=1048576
mkfs.ext4有参数-i,可以指定:多大磁盘空间分配一个inode
man mkfs.ext4
-i bytes-per-inode
Specify the bytes/inode ratio.
mke2fs creates an inode for every bytes-per-inode bytes of space on the disk.
The larger the bytes-per-inode ratio, the fewer inodes will be created.
This value generally shouldn’t be smaller than the blocksize of the filesystem,
since in that case more inodes would be made than can ever be used.
Be warned that it is not possible to expand
the number of inodes on a filesystem after it is created,
so be careful deciding the correct value for this parameter.
From:https://www.cnblogs.com/micmouse521/p/8064568.html
-T, --print-type print file system type
-h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)
-H, --si likewise, but use powers of 1000 not 1024
一、看分区的格式:
root@192.168.137.159:~# df -hT
文件系统 类型 容量 已用 可用 已用%% 挂载点
/dev/mapper/VolGroup-lv_root
ext4 29G 23G 4.0G 86% /
tmpfs tmpfs 250M 0 250M 0% /dev/shm
/dev/sda1 ext4 485M 38M 422M 9% /boot
.host:/ vmhgfs 100G 94G 5.6G 95% /mnt/hgfs
.host:/ vmhgfs 100G 94G 5.6G 95% /mnt/hgfs
二、加上-H显示用了多少:
[root@ZWCLC6X-7198 /]# df -hTH
文件系统 类型 容量 已用 可用 已用%% 挂载点
/dev/sda3 ext4 15G 3.2G 11G 24% /
tmpfs tmpfs 3.1G 0 3.1G 0% /dev/shm
/dev/sda1 ext4 529M 45M 457M 9% /boot
/dev/sdb ext4 101G 197M 96G 1% /data
三、ext4减少inode,mkfs.ext4格式化大容量磁盘:
减小inode总数,可以减小inode占用的磁盘空间,减少磁盘浪费。
例如:指定1m空间分配一个inode来格式化2TB磁盘
mkfs.ext4 -i 1048576 -n /dev/sdc #1024*1024=1048576
mkfs.ext4有参数-i,可以指定:多大磁盘空间分配一个inode
man mkfs.ext4
-i bytes-per-inode
Specify the bytes/inode ratio.
mke2fs creates an inode for every bytes-per-inode bytes of space on the disk.
The larger the bytes-per-inode ratio, the fewer inodes will be created.
This value generally shouldn’t be smaller than the blocksize of the filesystem,
since in that case more inodes would be made than can ever be used.
Be warned that it is not possible to expand
the number of inodes on a filesystem after it is created,
so be careful deciding the correct value for this parameter.
From:https://www.cnblogs.com/micmouse521/p/8064568.html
LAMP或LNMP一键安装包
Php/Js/Shell/Go jackxiang 2013-4-13 13:27
网上有很多LNMP/LAMP一键安装脚本,编译安装参数还要修改脚本,此脚本整合了LAMP和LNMP,在任何一台有网络的Red hat 或者centos 服务器上自动配置LNMP或者LAMP,用户可以自定义编译参数也可以使用此脚本默认的参数编译安装。还可以单独安装mysql、nginx、apache、php。
使用方法:将下面代码保存一个文件,例如inst_lanmp.sh 上传到服务器上执行。
此脚本在CentOS 6.0 X864环境下通过:使用效果如下:
代码如下:阅读全文
使用方法:将下面代码保存一个文件,例如inst_lanmp.sh 上传到服务器上执行。
此脚本在CentOS 6.0 X864环境下通过:使用效果如下:
代码如下:阅读全文
洋葱路由(Onion Routing)是在一个计算机网络上的匿名通信技术,由David Goldschlag, Michael Reed, 和 PaulSyverson发展。洋葱路由(OR)的目标是保护一条信息发送者和接受者的隐私,同时当它在网络中转换时也提供对信息内容的保护。洋葱路由根据Chaum的混合瀑布原理完成这个:信息从源地出发经过一个代理序列(洋葱路由器)到达目的地,当重路由信息在一个不可预知的路径时。为了保护敌手偷听信息内容,信息被在路由器之间加密。洋葱路由的优点(一般是混合串联)是不必要去相信每个合作路由器;如果一个或多个路由器是不安全的、匿名通信仍然可以被完成。
Linux下windows都有:黑客x档案2011年1月刊。
Linux下windows都有:黑客x档案2011年1月刊。
[非常实用]简单的Mysql数据库搬家
Php/Js/Shell/Go jackxiang 2013-4-12 22:14
方法一:
一般个人Blog博客难免会碰到要搬家或者换空间的事情,Blog搬家其实是件非常简单的事情,可能你没搬过空间,如果你安装这个方法搬空间,你会觉得Blog搬家没想象那么难。
Blog博客搬家最主要的就两点,一个是网站的文件,一个是网站的数据,那么Blog换空间只要搞定这两步就OK了,现在就开始搬家。
第一步:把Blog原来的所以文件全部下载到本地,通过FTP或者登录空间进行在线下载都可以;
第二步:把下载好的文件全部文件全部上传到新空间制定文件夹;
第三步:下载原来数据库,进入旧网站的phpmyadmin管理界面下载全部的数据,方法是登录phpmyadmin,点击数据库,会出现一个界面,如图:
选择全部,然后把所以的数据导出到本地,保存成.sql格式,保存到本地后是个txt格式,如下图:
第四步:下载好之后,登录新空间的phpmyadmin数据库管理界面,把刚才下载好的.sql导入到新的数据库;
第五步:把网站的ip解析到新的空间上,这样Blog搬家就搞定了。
网络上关于Blog博客搬家的教程很多,基本上所以的搬家方法都是按照这样的做,只要空间没问题的话,一般不会出问题,如果出问题的话,按照个Blog搬家方法一定可以,祝你搬家成功。
方法二:
使用phpmyadmin同步功能迁移mysql数据库:
估计很多人都有在用,但是可能很多人都没有注意到phpmyadmin的同步功能。
其实这个同步功能非常简单、好用,可以实现单个数据表或整个数据库的同步功能,非常不错哦。
首先,需要登录phpmyadmin,然后在页面右上角找到“同步”,接下来,同步页面中会显示数据库和目标数据库,需要设置一下源数据库的IP、用户名及密码,然后选择一下本地数据库名称。这里注意一点,源数据库指的是你要导出的数据库,目标数据库指的是你要导入的数据库,所以,源数据库要选择“远程服务器”,目标数据库就要选择“当前服务器”了。配置好源数据库和目标数据库后,点击右下角的“执行”。一般来说,从源数据库同步到目标数据库,是不需要在目标数据库建表的,phpmyadmin的同步功能会自动建立数据表,所以我们只需要建立数据库就可以了,不需要其他设置、操作。
然后再点击右下角的“同步数据库”。如果当前目标数据库中存在数据,先勾选左下角的“你希望删除当前目标表中的所有数据吗?”-> 再点击右边“应用选中的修改”之后再选择“同步数据库”。
OK,接下来就等着吧,完成之后会有相应提示“已根据源数据库同步目标数据库”
注意:同步功能默认只有localhost,不能修改,这里需要在 config.inc.php里添加一个参数:
$cfg['AllowArbitraryServer'] = true;
这样就可以输入目标地址了。
转载请说明来自:jackxiang.com网站。
一般个人Blog博客难免会碰到要搬家或者换空间的事情,Blog搬家其实是件非常简单的事情,可能你没搬过空间,如果你安装这个方法搬空间,你会觉得Blog搬家没想象那么难。
Blog博客搬家最主要的就两点,一个是网站的文件,一个是网站的数据,那么Blog换空间只要搞定这两步就OK了,现在就开始搬家。
第一步:把Blog原来的所以文件全部下载到本地,通过FTP或者登录空间进行在线下载都可以;
第二步:把下载好的文件全部文件全部上传到新空间制定文件夹;
第三步:下载原来数据库,进入旧网站的phpmyadmin管理界面下载全部的数据,方法是登录phpmyadmin,点击数据库,会出现一个界面,如图:
选择全部,然后把所以的数据导出到本地,保存成.sql格式,保存到本地后是个txt格式,如下图:
第四步:下载好之后,登录新空间的phpmyadmin数据库管理界面,把刚才下载好的.sql导入到新的数据库;
第五步:把网站的ip解析到新的空间上,这样Blog搬家就搞定了。
网络上关于Blog博客搬家的教程很多,基本上所以的搬家方法都是按照这样的做,只要空间没问题的话,一般不会出问题,如果出问题的话,按照个Blog搬家方法一定可以,祝你搬家成功。
方法二:
使用phpmyadmin同步功能迁移mysql数据库:
估计很多人都有在用,但是可能很多人都没有注意到phpmyadmin的同步功能。
其实这个同步功能非常简单、好用,可以实现单个数据表或整个数据库的同步功能,非常不错哦。
首先,需要登录phpmyadmin,然后在页面右上角找到“同步”,接下来,同步页面中会显示数据库和目标数据库,需要设置一下源数据库的IP、用户名及密码,然后选择一下本地数据库名称。这里注意一点,源数据库指的是你要导出的数据库,目标数据库指的是你要导入的数据库,所以,源数据库要选择“远程服务器”,目标数据库就要选择“当前服务器”了。配置好源数据库和目标数据库后,点击右下角的“执行”。一般来说,从源数据库同步到目标数据库,是不需要在目标数据库建表的,phpmyadmin的同步功能会自动建立数据表,所以我们只需要建立数据库就可以了,不需要其他设置、操作。
然后再点击右下角的“同步数据库”。如果当前目标数据库中存在数据,先勾选左下角的“你希望删除当前目标表中的所有数据吗?”-> 再点击右边“应用选中的修改”之后再选择“同步数据库”。
OK,接下来就等着吧,完成之后会有相应提示“已根据源数据库同步目标数据库”
注意:同步功能默认只有localhost,不能修改,这里需要在 config.inc.php里添加一个参数:
$cfg['AllowArbitraryServer'] = true;
这样就可以输入目标地址了。
转载请说明来自:jackxiang.com网站。