利用Curl、socket、file_get_contents POST数据 05月16日

 /**
* Socket版本
* 使用方法:
* $post_string = "app=socket&version=beta";
* request_by_socket('facebook.cn','/restServer.php',$post_string);
*/
function request_by_socket($remote_server,$remote_path,$post_string,$port = 80,$timeout = 30){
$socket = fsockopen($remote_server,$port,$errno,$errstr,$timeout);
if (!$socket) die("$errstr($errno)");
fwrite($socket,"POST $remote_path HTTP/1.0");
fwrite($socket,"User-Agent: Socket Example");
fwrite($socket,"HOST: $remote_server");
fwrite($socket,"Content-type: application/x-www-form-urlencoded");
fwrite($socket,"Content-length: ".strlen($post_string)+8."");
fwrite($socket,"Accept:*/*");
fwrite($socket,"");
fwrite($socket,"mypost=$post_string");
fwrite($socket,"");
$header = "";
while ($str = trim(fgets($socket,4096))) {
$header.=$str;
}


$data = "";
while (!feof($socket)) {
$data .= fgets($socket,4096);
}
return $data;
}
 /**
* Curl版本
* 使用方法:
* $post_string = "app=request&version=beta";
* request_by_curl('http://facebook.cn/restServer.php',$post_string);
*/
function request_by_curl($remote_server,$post_string){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$remote_server);
curl_setopt($ch,CURLOPT_POSTFIELDS,'mypost='.$post_string);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_USERAGENT,"Jimmy's CURL Example beta");
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
?>
 /**
* 其它版本
* 使用方法:
* $post_string = "app=request&version=beta";
* request_by_other('http://facebook.cn/restServer.php',$post_string);
*/
function request_by_other($remote_server,$post_string){
$context = array(
'http'=>array(
'method'=>'POST',
'header'=>'Content-type: application/x-www-form-urlencoded'."".
'User-Agent : Jimmy's POST Example beta'."".
'Content-length: '.strlen($post_string)+8,
'content'=>'mypost='.$post_string)
);
$stream_context = stream_context_create($context);
$data = file_get_contents($remote_server,FALSE,$stream_context);
return $data;
}
?>

汶川三周年 05月11日

汶川三周年

三年来,一直没有敢回去到汶川看一看,我害怕,害怕看见荧幕上真实的场景。 有人说经历过生死才会有豁达的胸襟,我没 [...]

技术与工作 05月09日

技术与工作最理想的状态是——自己能学习到新的技术,这些技术能应用到工作中;工作的内容有不那么枯燥,都那么具有挑战性。

但是突然想起一句名言——工作,它之所以成为工作,是因为你只需要工作而不需要思考。也许,工作,就是人和机器之间的中间层,等到某一天机器人有这种功能了,人自然就不用工作了。

突然想写这篇文章是我感觉国内的技术永远都是那么的扯淡,可能是因为我先扯淡吧,感觉所有的程序员都在忙碌着一些东西,到最后,问他,今年他做了什么,他回答,他妈的天天加班干活,哪有时间做啥啊。

程序员的工作是富有挑战性的,但是这个是在国外,在国内,很少真的有程序员,能做到程序结伴,不断挑战新的高度。大多数是年轻的时候努力奋斗了几年,到后来,因为本方向的发展空间不是很大了,但是又不能跳转到其他的方向,怎么办呢,带几个新人吧,这样也有点领导的性质了。但是,有没有想过,大学研究生读了这么多年,工作写了这么多代码,突然有一天不写了,转做项目管理了。这也就是中国的IT的现状,工作几年之后大家都痛苦地抛弃了代码,抛弃了自己以前的很多代码积累。

我可能太落后了,可能太年轻了,不知道此中的利害,也许,每一个程序员在开始的时候都想过要写出非常牛逼的程序,直到有一天,他发现他的代码并不能改变世界的时候,他才知道原来在中国,每一个程序员都成不了bill gates。

夜深了,胡乱写….

php技术大会2011 05月08日

php技术大会2011

2011-05-07,在北京长城饭店参加完了2011年php技术大会,这个算是中国php的最高技术论坛吧,到场的人大概有1000多,当然,百度、腾讯、淘宝、新浪等大公司来的人应该超过了一半。php,这个顶着中国70%左右的互联网流量的编程语言,神奇的把大家聚合在了一起。

负载均衡《构建高性能web站点》 05月04日

由于单机性能是有限的,不管机器多么牛逼,最后都会受限于一些硬件和一些软件,在这个时候web的水平扩展变得非常重要。

常见的负载均衡的方式:

1.程序重定向

2.dns的A记录或者CNAME进行负载均衡

3.七层http反向代理负载均衡,也就是常见的nginx、HAProxy、varnish

4.四层负载均衡,在IP层实现的负载均衡 (更多…)

mysqlreport——MySQL 效能监控工具【转】 05月04日

MySQL 效能监控工具–mysqlreport

管理 MySQL 最让人困扰的就是如何有效的掌握 MySQL 的健康状况,因为 MySQL 虽然有提供许多系统变量值供您参考,但这些零散的数据若要手动搜集与过滤将会是一件十分没有效率的事情(除非您写 Scripts 去分析)。而接下来要介绍的这套 “工具” 其实是由 hackmysql.com 的站长所撰写的 Perl Scritps,旨在协助 MySQL DBA 搜集与分析 MySQL 的运作状况。

官方网站: http://hackmysql.com/

软件下载: http://hackmysql.com/mysqlreport

这份文件有很大部份是参考 Daniel Nichter 的 mysqlreportGuide(http://hackmysql.com/mysqlreportguide),但不完全是翻译,里面加入了一些我觉得可能会对读者有帮助的数据,并删除了部份我认为会对读者产生混淆的信息。小弟的功力不足,也许会有所错误,若是您发现我有地方写错了也请您不吝指正,谢谢。 (更多…)

《构建高性能web站点》分布式缓存 05月02日

分布式缓存这个应该算是目前互联网技术上最热的地方,因为现在的网站,越来越偏向于全动态话,但是数据库不可能能抵抗住如此强悍的查询,所以不得不在db前面挡一层cache,这也便是目前互联网从业者最主要的设计点之一。

memory is another disk,这个是分布式缓存的最核心的地方,就是把数据放在内存里面。为什么放在内存里面,首先这个数据不能放在cpu以及及寄存器吧,其次磁盘太慢了,无法接受,就只能在这个中间的就是内存了,但是内存又一个天然的问题,就是宕机之后数据丢失,这个算是互联网架构师们最头疼的设计点之二。

当前最火web2.0 比如facebook、weibo,都采用了这种简单的架构,就是存储+cache+前端脚本的模式,而且,他们都不约而同地用了同一种技术memcached这种key-value的缓存方式。

key-value这种缓存方式最主要的好处就是它简单且高效,水平sharding非常容易,只要控制地好,啥问题都不会是大问题。

当前最主要的nosql 缓存开源软件,我的理解,nosql的东西,分两种,一种算数据库,一种算缓存,最大的区别就是是否把数据放到硬盘中,放到硬盘中就是数据库,否则就只能是cache。当然目前最流行的设计是数据库+cache,比如redis,就是自己维护一些内存的缓存,又写入的时候可选择定时写入硬盘或则事实写入硬盘。 (更多…)

《构建高性能web站点》web组件分离 05月02日

首先还是感叹一下http设计的牛逼之处,http是天然的分布式,它造就了互联网应用的扩展如此的容易,一个很小规模的应用可以很容易就扩展开来。

web组建分离就是把页面上的每个资源按照自己特有的属性分开,由不同的服务器来处理。分开的原因分服务器的原因和浏览器的原因,浏览器的原因是浏览器在统一个域名下并发请求数的限制,比如ie6是2,这个确实很2的,10年前设计自然跟不上现在的需求,服务器端主要资源的属性不一样,有的需要很多cpu计算,有的基本不用cpu,所以需要分开处理。 (更多…)

ubnutu下的工作 05月02日

ubnutu下的工作

以前切换过几次要用ubuntu,都以失败告终了,第一次应该是在大三的时候,那个时候对linux非常狂热,天天搞 [...]

程序员与文人 05月01日

我已经很少写纯文学方面的文章了,大学后少看了很多文学、历史方面的书,很多文学的东西,都在自己的脑海变得不那么清晰,以至于后来想驾驭自己文字的时候发现是异样的困难,我仿佛已经写不出我能控制的文字了。

在大学一年级以前,我一直都以为我会成为一个很有名的文人,因为初中高中的时候的我,遇到了太多的人生的波折,以至于那个时候的我能写出想“余秋雨散文体”那种哀历史、叹文学的文字。当时的我,看了很多文学的书,记忆最深刻的是“余秋雨全集”,图书馆很简陋, 书很少,每周都要无赖地去图书馆手动续借一下。在看完《山居笔记》、《行者无疆》、《千年一叹》…之后,我突然发现我的文章很像余秋雨那样,想写什么东西,就能找出一些莫名其妙的词语来,或许,这个就算是积累吧。

大学之后,慢慢地感觉到自己越来越无法和文学打交道了,因为文学离我的专业太远,而且从小山坡来的小孩连qq都不会打,自然很害怕落后太多,就拼命地学习计算机。到现在,发现自己又做出一个非常错误的决定。

如今的我,工作在计算机领域,职业为程序员,在任何地方我都告诉别人我是程序员,而不是职位上的xxx工程师,工程师这个名字,我担当不起,我还没有办法通过我的程序改变这个世界。

但是我依旧做着我的文学梦,文学依旧是整个社会的思想的核心,当500年后的后代看待我们的时候,技术上他们只会记住中国有四大发明,但是文学上,他们可以记住唐代的上万篇诗歌。文学,依旧是鲁迅时期的“药”,在治疗这人精神上的不不足。

时间有限的我,没有过多的时间去研究文学,唯独可以做的是,在不重要的的项目代码中,来一行代码的注释中写道“众里寻他千百度,蓦然回首bug就在注释处”,娱乐至上,程序如文学,工整而又措辞严谨。

还是发现自己的文字功底远远不如以前了,无法把自己的思想用中文表达出来,可能是程序写得太多,英语用的太多了,对中文突然又了相当的陌生感。