Posts Tagged ‘php’

关于PHP教和学的一些感想

星期三, 5月 12th, 2010

最近在写一本PHP入门方面的书,面向初学者,估计8月份付梓。对我来说,写一本PHP编程方面的教程可能要比物理实验或者网页配色方面的图书难度要小很多。毕竟这么多年一直在做相关的开发和教学工作,去年还做了一个PHP的教学视频,手头的资料积累了很多,短期内完工应该不成问题。所谓厚积薄发,如何能把这本书写好是我要考虑的问题。

但稍一转念,这本教材并不如想象的那么容易。早有行内的朋友劝我只要快点写完拿稿费就ok了。道理明摆着:PHP入门教程太多了,加上PHP普遍给人适合自学的印象——想要凭借己力,写出不一样的东西,着实不易。

这么多年来,PHP从面向个人开发业余网站的工具,到全球广泛使用的主流语言,一直也没有摆脱“野路子”。比如很多人是这样学习PHP的:首先学习dreamweaver,顺便学习一下html和css,接下来学习PHP的标签嵌套和函数的编写,然后明白可以用include将函数库集中在若干个文件重用;接下来就是数据库操作,MySQL和PHPMyAdmin,MySQL连接,SQL语句;最后结合表单做几个实例,基本上就可以宣称会PHP了。然后呢,这种选手就应聘到各式公司搞开发去了。如果他去的是一家小公司,比如做企业建站这样的小项目,没有问题。这样的公司很多,可以包容很多PHP“程序员”。可是,做企业建站,需要程序员么?答案是不需要。大马路上一块砖头下去打到十个人,有九个摆弄过CMS,他们都是程序员么?你可以管自己叫站长、网页设计师、前端开发工程师什么的,但千万不要自称程序员。

其实在复杂程度上,PHP和其它语言并没有太大的不同,只是长期的面向过程的编程惯例给人以PHP容易入门的误解。其实不过是PHP既可以这样、又可以那样,从本质上说要比其它语言灵活而不易掌握。比如asp.net,初学就直接要面向“面向对象”了,面向过程的asp.net根本不予考虑,所以学习的时候只要选定了语言种类,其它的事情,像ide的选择,应用平台的选择,数据库的选择,都不用你考虑了。而且vs又是比较容易入门的 ide,可以用拼积木的方法三下五除二完成一个简单应用。从这个角度看,.net的学习甚至要比php简单一些。因而PHP的优势不在于易学,对于web项目来说,免费、敏捷、灵活的开发成了最重要的特性,而PHP在这写方面占尽了优势。这才是PHP流行的原因。

所谓学习成本的高低,实际上是衡量学习目标的标准,和容不容易学关系不大。如果你想成为一个业余的PHP程序员,那么尽可以读《21天学会PHP》,但如果真想“21天学会PHP”,恐怕也还要学到老再穿越回来。同样,如果你要成为一个业余级的.net程序员,自然也可以学几个控件就实现你的目标了。只是比较而言,学习PHP的人数远没有学习.net的多,所以PHP的入门级程序员可以找到工作,.net就只能学习到更高的程度了。这也解释了为什么很多CTO认为多数PHP程序员不专业的原因。PHP的优势和遭受的批评,归根到底,在于PHP的教育,而不在于PHP本身。

主观上很多人认为PHP就是短平快,根本不需要用高级特性;然而随着PHP5面向对象特性的广泛应用和大量框架的涌现,PHP的架构越来越复杂,又导致了初学者的迷茫。因此.net和java比起PHP的优势,除了在平台上的之外,最主要的就是教学过程都要比PHP清晰和系统。中华读书报就评论说:如果非要让我选择一个Java图书在Web开发方面胜出的原因,我想这与Java技术在大学里得到了更好推广有关系。

顺便说一句,中华读书报09年4月解释榜单上唯一的PHP书籍时还说PHP老态呈现,而8月份就说PHP与Java类图书打成了平手,11月份则专门写了一篇名为《 PHP崛起的势力有多强》的评论,而今年则“把PHP类图书列入第二等的崛起者” 。我倒不认为中华读书报出尔反尔朝三暮四,毕竟PHP去年的进步的确有些出人意料。关键是大家已经承认PHP的崛起了,下面就要看这把火能烧到多高,烧到什么时候!

在博客显示我的Twitter记录

星期三, 11月 25th, 2009

写twitter的时候,总有一丝陌生感,一方面来自对饭否的怀念,另一方面来自GFW的阻挡。毕竟,大多数中国人在技术层面上看不到我的twitter。所以心血来潮,在博客上开个页面,用 twitter api 显示我的twitter记录。当然,这样做的前提是,博客要在墙外才行。

大体过程如下:

1.到 http://github.com/jdp/twitterlibphp 下载PHP类库 twitter.lib.php,上传到wordpress的主题路径下。

2.在wordpress的主题里新建一个页面模板,代码如下:

  1. <?php
  2. /*
  3. Template Name: Twitter
  4. */
  5. include(twitter.lib.php);//包含类库
  6.  
  7. $user = username;//twitter账号
  8. $pw = password;//twitter密码
  9.  
  10. $twitter = new Twitter($user,$pw);
  11.  
  12. $statuses = json_decode($twitter->getUserTimeline(array(),json));
  13. //将数据以json格式取出,并用php函数 json_decode 转成对象。其实可以用xml或者rss,但在html中使用的,还是json比较方便。
  14.  
  15. die(print_r($statuses));
  16. //测试一下数据结构,接下来的自己看着办吧。

站长年会流水账

星期一, 5月 18th, 2009
  1. 16日早6点到北京,同行为长春日报集团新媒体部于浩。
  2. 乘地铁到中关村附近的上地,约见了我上一本书的编辑顼宇峰,聊了一个上午。
  3. 下午到中国大酒店(国贸附近)约见原tom副总裁刘炳海。
  4. 16日晚16:00左右到会场,入住如家快捷宾馆。
  5. 和周曙光、胡泳通电话,可惜都没有机会见面。
  6. 17日早7:30入会场。和郑经理、lorna等人汇合进入会场。
  7. 8:30,会议开始。9:45分做为长春站长联络员介绍长春互联网情况。
  8. 下午分会场都很挤,于是在会场外面和同行们交流。巧遇王炜栋、客宾等朋友。
  9. 和PHPChina的李明、刘昊、李超等在场外聊了聊,具体的内容可能会再写一个专题短文。
  10. 再次相遇才知道,早上和我同台的天津站长联络员吴津津就是大名鼎鼎的白菜。
  11. 见到了thinkPHP的流年和王青龙等朋友。虽然自己不是thinkPHP深度用户,但还是有很多共同语言。
  12. 返程车上把座让给了抱小孩的,几个哥们或站或坐、天南海北聊了一宿。

后太阳时代的猜想

星期四, 4月 23rd, 2009

甲骨文经营着最强大的数据库产品,太阳则经营着世界上最流行的编程语言。同时别忘了,太阳刚刚收购mysql——最流行的数据库产品。加上双方的软件产品和服务器产品,这样的阵营,堪比微软!不同的是,微软现在还没有染指硬件,而甲骨文在操作系统方面也还没有竞争力。

硬件方面的老大IBM,正由蓝色巨人向蓝色神秘人转变。相对其它大公司的高调,IBM虽显得从容淡定,但掩饰不了老本越吃越少的尴尬。有趣的是,IBM有的,正是微软所没有的。吞下太阳的甲骨文一定会给微软带来压力。在互联网方面发展不断受挫的微软,如果有意转向硬件的话,那么收购IBM应该是一个值得考虑的选择。虽然百足之虫死而不僵,但收购IBM的一部分业务还是有可能的,正如当年区区联想所做的一样。私以为以微软的气概,恐怕是要一口吞下。

反观甲骨文和太阳双强联合,万事俱备,只欠操作系统。其实甲骨文并非没有自己的Linux版本,但要想进一步和Windows竞争还需要做更多的努力。如果埃利森希望走走捷径,恐怕Ubuntu应该有资格走进他的收购计划。

再说说PHP。比起青梅竹马的MySQL来,PHP在这场收购大战中显得有些落寞,小两口日渐疏远。不过在行业大帝微软的垂青下,PHP也不是没有可能新上个台阶的。以往微软在开源问题上深受诟病, 欲辩无词。为了摆脱垄断和闭源带来的指责,近来微软不断的朝开源招手甚至飞吻,其中最实质的动作就是和zend增进了合作。无论开源世界带着什么样的感情看待微软,微软都是最有实力拯救开源的第三者。目前看,PHP有可能进入微软开发套件Studio的部署,而且一定是以开源的姿态进入, 并作为微软快速开发WEB初级应用的主打产品。为了不让PHP感到孤单,微软会收购一个开源数据库(比如本来就和PHP眉目传情的SQLlite)给PHP当新娘,加上zend正在做的服务器套 件,一整套看似独立的开源方案就完成了。他们将作为免费的,低于.net的入门产品进入市场,以填补历史上asp留下的市场空白。如果真的这样发展,那么zend除了要牺牲PHP企业应用方面的发展,避免了和java的正面交锋外,没有什么别的损失了。

用PHP生成Getdropbox公开下载目录文件列表

星期二, 4月 21st, 2009

getdropbox总能给人带来惊喜。本以为public下的文件只能通过下载方式发布(多数web服务器都能够做到限制浏览),然而今天才发现,其中的html页面和jpg等图片格式的文件,进而包括所有前端文件,竟然都能通过web直接浏览。这样getdropbox又多了一个用处:方便、免费、最大5G的静态网页空间!(关于getdropbox的介绍:同步存储服务 DropBox 免费奖励扩容最大5G

当然getdropbox的public文件夹主要是用来共享文件的。冗长如 dl.getdropbox.com/u/**** 这样的网址也不太适合发布网站。但我们可以为在public中的文件做一个web索引,帮助使用者快速检索。纯粹的静态开发肯定是不合适的,所以我写了个php脚本,寥寥40行,两个函数用于递归遍历目录和生成索引文件,前端有个用于指定路径的表单。可以为服务端的任意目录生成索引。将生成的文件放到public文件夹下就是这样的:http://dl.getdropbox.com/u/142189/index.htm。当然这个程序稍微修改一下也适合ftp或者本地非服务端目录的检索。

目前我的public不多,慢慢积累中。本期强烈推荐一本电子图书:《100个人的10年(冯骥才)》。小镇村夫对此亦有贡献。

代码如下:

  1. <?php
  2. function get_index ($directory, $i=0) //输出文件列表的html代码
  3. {
  4.     global $file_list;
  5.     $handle = opendir( $directory ); //打开目录
  6.     while ( $file = readdir($handle) ) //遍历循环文件和目录
  7.     {
  8.         $bdir = $directory . / .$file;
  9.         if ($file <> . && $file <> .. && is_dir($bdir)) //如果不是.和 ..并且$bdir是个目录
  10.         {
  11.             get_index($directory ./. $file, $i); //递归
  12.         }
  13.         else if ( $file <> . && $file <> ..) 
  14.         {
  15.             $file_list.= <li><a href=" . substr(substr($directory, $i) ./. $file, 1) . "> . substr(substr($directory, $i) ./. $file, 1) . </a></li>;
  16.         }
  17.     }
  18.     closedir( $handle ); //关闭目录
  19.     return $file_list;
  20. }
  21.  
  22. function make_file($content, $filename=index.htm) //生成列表文件
  23. {
  24.     $fp = fopen($filename,w);
  25.     fwrite($fp, $content);
  26.     fclose($fp);
  27.     header(location: . $filename);
  28. }
  29.  
  30. if($_GET['action']==make)
  31. {
  32.     $dir=$_POST['dir']?$_POST['dir']:dirname(__FILE__); //指定路径
  33.     make_file(get_index($dir,strlen($dir))); //生成文件
  34. }
  35.  
  36. echo 
  37.     <form method="post" action="?action=make">
  38.     输入路径:<input type="text" name="dir" />
  39.     <input type="submit" value="确定" />
  40.     </form>
  41. ;

也可以到这里直接下载文件,嗯,PHP文件当然必须是可以直接下载的。