Submitted by gouki on 2010, May 18, 10:01 AM
想知道磁盘空间有多大,其实还是有算法的,下面的就是从网络搜索而来,当然我是从http://xinsync.xju.edu.cn/index.php/archives/5137COPY过来的。仅仅作为一个资料查看一下
硬盘一般有255磁头,63扇区,故每柱面大小为:512byte x 255 x 63=8225280bytes =7.84423828125 MB
如果要分40GB,那么要40×1024MB=40960MB
需要柱面数为40960÷7.84423828125=5221.66
取整数既为5222个柱面,应分M数为5222×7.84423828125=40962.6123046875MB
不管小数点后面几位都进1,也就是40963MB,windows就认为是40GB了。
这个方法NTFS和FAT32通用。
下面附10GB到200GB整10GB递增的精确计算结果:
10GB = 10245MB
20GB = 20482MB
30GB = 30726MB
40GB = 40963MB
50GB = 51208MB
60GB = 61444MB
70GB = 71681MB
80GB = 81926MB
90GB = 92162MB
100GB = 102407MB
110GB = 112644MB
120GB = 122888MB
130GB = 133125MB
140GB = 143362MB
150GB = 153606MB
160GB = 163843MB
170GB = 174088MB
180GB = 184324MB
190GB = 194561MB
此精确分区结果,在管理工具-磁盘管理界面,和Windows资源管理器里面显示的是整数,10G就是10.00GB,20G就是 20.00GB,40G就是40.00GB。
Linux | 评论:0
| 阅读:15826
Submitted by gouki on 2010, May 17, 3:34 PM
话说,从PHP5开始,file_get_content已经支持context了(手册上写着:5.0.0 Added the context support. ),也就是说,从5.0开始,file_get_contents其实也可以POST数据,关于这个,我在通过file_get_contents来 Post数据的实例也有所介绍。
今天说的这篇是讲超时的,确实在跨服务器提交的时候,不可避免的会遇到超时的情况,这个时候怎么办?set_time_limit是没有用的,只有用context中的timeout时间来控制。相反,我们不是要抑止,而是要管理。比如在超时返回错误后,进行一次尝试,就象js中的settimeout那样,对函数重新处理。错误超过3次或者5次后,我们就确实的认为无法连接服务器而彻底放弃。这,是一个好办法,应该值得推荐使用。其实。不全是file_get_contents,只要支持context的都应该加上,避免超时浪费时间。这样可以被支持的函数大致有:fsocketopen(该函数的最后一个参数。好象比较推荐在读stream的时候,使用stream_time_out函数进行控制),fopen(也是从PHP5开始加入context支持),file(PHP5加入支持),curl(curl有自已的变量CURLOPT_TIMEOUT)等 。
下面开始看原文吧:http://xinsync.xju.edu.cn/index.php/archives/6840。
因为要用php去向我的虚拟主机管理系统发送开通空间等的请求,需要Post传值,由于开通空间过程很慢,同时需要延时处理。以下找到了一下 file_get_contents的超时处理,网上有人用2个方法解决:
在使用file_get_contents函数的时候,经常会出现超时的情况,在这里要通过查看一下错误提示,看看是哪种错误,比较常见的是读取超 时,这种情况大家可以通过一些方法来尽量的避免或者解决。这里就简单介绍两种:
一、增加超时的时间限制
这里需要注意:set_time_limit只是设置你的PHP程序的超时时间,而不是file_get_contents函数读取URL的超时时 间。
我一开始以为set_time_limit也能影响到file_get_contents,后来经测试,是无效的。真正的修改 file_get_contents延时可以用resource $context的timeout参数:
PHP代码
- $opts = array(
- 'http'=>array(
- 'method'=>"GET",
- 'timeout'=>60,
- )
- );
-
- $context = stream_context_create($opts);
-
- $html =file_get_contents('http://www.example.com', false, $context);
- fpassthru($fp);
二、一次有延时的话那就多试几次
有时候失败是因为网络等因素造成,没有解决办法,但是可以修改程序,失败时重试几次,仍然失败就放弃,因为file_get_contents()如果失 败将返回 FALSE,所以可以下面这样编写代码:
PHP代码
- $cnt=0;
- while($cnt < 3 && ($str=@file_get_contents('http...'))===FALSE) $cnt++;
以上方法对付超时已经OK了。那么Post呢?细心点有人发现了’method’=>”GET”, 对!是不是能设置成post呢?百度找了下相关资料,还真可以!而且有人写出了山寨版的post传值函数,如下:
PHP代码
- function Post($url, $post = null)
- {
- $context = array();
-
- if (is_array($post)) {
- ksort($post);
-
- $context['http'] = array (
- 'timeout'=>60,
- 'method' => 'POST',
- 'content' => http_build_query($post, '', '&'),
- );
- }
-
- return file_get_contents($url, false, stream_context_create($context));
- }
-
- $data = array (
- 'name' => 'test',
- 'email' => 'test@gmail.com',
- 'submit' => 'submit',
- );
-
- echo Post('http://www.example.com', $data);
OK , 上面函数完美了,既解决了超时控制又解决了Post传值。再配合康盛的改良版RC4加密解密算法,做一个安全性很高的webservice就简单多了。
通过以上函数的组合,终于实现了PHP和我的ASP版虚拟主机管理软件的通信。.net相信也很容易了,因为已经有了.net版本的 authcode类。未来再做一个java版的就天下大同了。
--EOF--
我只能说这样的处理好是好,只是还得注意文件头的Set_time_out,否则整个文件都得超时了。呵呵
Tags: settimelimit, timeout, filegetcontents, context
PHP | 评论:0
| 阅读:30767
Submitted by gouki on 2010, May 17, 8:51 AM
杯具啊,终于知道自己为什么会这么胖了,以前都不是特别了解,一直以为自己是缺乏锻炼啥的,但现在我才发现,原来还不止这一个原因,还有一个重要的原因就是。。。
春节的时候,家家户户都贴点门神,我们家也不例外的买了点贴一下,开始没注意,前几天的时候突然发现,原来这就是让我胖的原因,LOOK
一个福,一个发,多好的词啊,可是,反过来就成了“发福”。一下子傻掉了。
Tags: 发福, 门神
Misc | 评论:2
| 阅读:18520
Submitted by gouki on 2010, May 16, 2:05 PM
这篇 文章已经是07年的了,不过,我一直没有关注过drupal的db类,所以对于这方面我也根本 就没有在意过。8过,我在我的siterpc中,我也是采用了sprintf的写法,不是为了安全,而是为了格式化。因为在siterpc里我们几乎不接受外部变量,所有的变量都是由我们自己传入,所以对于安全方便忽略了很多。但还是用sprintf来格式化SQL语句了。
因此看到这篇drupal的db_query安全过滤,突然发现,可以让我的代码少写很多了。(参数可变时请使用vsprintf)
以下是原文 :
Drupal通过C风格的字符串输出格式实现了对sql语句的安全过滤。
使用方法:
PHP代码
- db_query("SELECT n.nid FROM {node} n WHERE n.type = '%s'", $type);
-
- db_query(sprintf("SELECT n.nid FROM {node} n WHERE n.type = '%s'", $type));
drupal db_query核心代码如下:
PHP代码
-
-
-
- define('DB_QUERY_REGEXP', '/(%d|%s|%%|%f|%b)/');
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- function db_query($query) {
- $args = func_get_args();
- array_shift($args);
- $query = db_prefix_tables($query);
- if (isset($args[0]) and is_array($args[0])) {
- $args = $args[0];
- }
- _db_query_callback($args, TRUE);
- $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);
- return _db_query($query);
- }
-
-
-
-
- function _db_query_callback($match, $init = FALSE) {
- static $args = NULL;
- if ($init) {
- $args = $match;
- return;
- }
-
- switch ($match[1]) {
- case '%d':
- return (int) array_shift($args);
- case '%s':
- return db_escape_string(array_shift($args));
- case '%%':
- return '%';
- case '%f':
- return (float) array_shift($args);
- case '%b':
- return db_encode_blob(array_shift($args));
- }
- }
简单的对一些输入做了处理。参考:
http://drupal.org/node/101496
原文来自于:http://www.luochunhui.com/id/315
Tags: drupal, php, escape_string
PHP | 评论:2
| 阅读:21451
Submitted by gouki on 2010, May 15, 9:22 PM
pea的活动除了这次外,我是真没有参加过,不过在与会的同时听文峰说也好多时间没办了,所以也没有感觉啥。这次的内容主讲是蛋定工作室www.jt-tech.net的echo,讲了xhprof ,cache,以及long-polling的一些应用及讲解,因为对xhprof以及long-polling有点兴趣,所以就参加了。当然还有另外的原因:echo在群里研究session的时候,非常透彻,也想看看他平时用啥工具之类的;另外就是想看看11爷、四爷以及逍遥等人长啥样。
好象以前在drupal研讨会的时候见过文峰,应该也是4年前了吧,那时候好象他非常胖,也曾经找过我让我谈谈有没有什么 经验可谈的。
值此今天这一课,发现我还是离专业差的很远,都是走的野路子啊。果然是人不学习就要退步,野路子能走一时,是走不了一世的。
看着echo(蛋定工作室)的PPT上那些工具,发现,我除了x-debug外,真是一个都没有用过。丢人,不过想想也没啥,在篱笆的时候性能啥的都扔给运维了,当然他们也没有查出啥问题来,可能还是篱笆的访问量不大的原因吧?现在想想那样垃圾的代码都没有跑出问题而java的一跑就嗝屁了,也真是意外。
谈了很多废话,还是讲讲今天的内容吧,比较有印象的当然也正是我想了解和关注的xhprof以及long-polling。web client cache这玩意还真没有什么 可讲的,对着yahoo的14条军规慢慢查,慢慢改吧。【后来变22条军规了】
xhprof,是facebook提交的pecl库(好象Echo是这么说的),可以在运行时候查看效率,这点其实才是我最关注的。echo说xhprof对于那些只针对某些人出现问题,而其他用户死活折腾不出、故障BUG无法重现的性能优化、log记录非常有用。在看了他给出的wikimedia的图片,以及他实际项目中的代码片段后,觉得果然是非常有意义。对于性能的影响好象也不是很大。
xhprof,在这里我就不多介绍了,google搜索的第一条就是老王的笔记:体验XHProf_老王的技术手册_百度空间,想看的可以移步去参观一下,过两天我也会转到博客上来,毕竟这东西确实值得试一下,特别是想用在wordpress上,看看性能瓶颈到底在哪里,是否可以进行优化。
这张图真的很吸引我,可以让我检查页面中哪些地方消耗的资源最大:
long-polling,对于做WEB的人来说,特别是SNS的人,用的地方就多了。目前最多的用途可能就是用来检测是否有系统消息提示,如果一直用ajax,那么你会发现定期polling的时候,很耗资源。如果不信,你可以看一下thinksns,他取信息等 资料就是这样的处理。但其实long-polling也能算是用ajax在获取信息,但他连接后并不能算是断开,由服务器一直在while(true)循环。echo也给了一些测试代码。当然,其实这方面很早就研究和接触过,不过仅限于表面,因为我没有理解当并发非常大时候,这个性能如何处理。echo是说通过ulimit -n 来调整最大用户数和最大进程数来增加,因为理论上都是根据内存大小和利用率来控制,说白了,你没内存,代码再好也经不起折腾。并发也永远上不去。
很多东西,一时间可能用语言无法表达,但总算是有收获,最后抽奖的时候,报数时,号码是13,哦,原来我还是可以装 13的。over
看下一次是否再有收获。上大课确实不如上小课,有时候人多了并不一定能够讲得出话。
听说echo要把PPT放出来,到时候可以看看。
最后说一下web client cache。关于这个玩意,对于if-modified这东西等等,现在用的真是少了,以前在做垃圾网站时,都是强行指定e-tag,内容页的e-tag永远不变,首页、列表表的e-tag一天变一次,以保证性能的最大体现。其实,抛开用户登录,如果内容页是ajax的widget,那真的是可能永远不变的。不过现在都是为了更好的吸引用户,在cms中的相关文章、推荐文章、推广文章等 都是实时更新的,所以效率也相对下降一点点喽。不过,可以考虑e-tag为一天,这样对于当天频繁访问的用户速度会明显增加,但,不知道对搜索引擎会怎么样。
杂谈而己
Tags: phpchina, pea, xhprof, cache, long-polling
PHP | 评论:0
| 阅读:18734