说说WordPress和Drupal

上次就想把Wordpress和Drupal做一个对比,这次补上。

WordPress和Drupal都是目前比较流行的开源CMS,用户数量也比较多。以下将从比较常用的几个方面进行比较。

  1. 平台支持
    作为典型的LAMP结构的应用软件,WP仅支持Mysql,而DP支持mysql和Pgsql两种数据库。从某种虽然像本站这样从pgsql迁移到mysql的平台几乎很少,而且国内很少有Pgsql的空间,作为一个开源项目,提供多个备选数据库还是不错的。 继续阅读“说说WordPress和Drupal”

WordPress的家

几次思想斗争以后,总算下了狠心将小站迁移到了wordpress

迁移的大致成绩如下:

  • 所有文章页全部迁移成功,文章标签只能后续手工做。
  • 评论迁移了大部分,部分评论由于格式问题无法被迁移。
  • 网站模板全部丢弃。
  • 其余的数据全部丢弃。
  • 原先的链接全部碎掉,需要小幅的hack。

之前的小站使用drupal,由于系统的数据库仅支持postgresql,Drupal似乎是唯一的选择。等到网站上线后,忽然间发觉再要移植数据库几乎是不可能的。postgresql并不是那么普遍,只是至少在国内没有几家能够提供这个平台,兼容性成了问题。

wordpress可以说是最近发展最快的系统,对于Ajax和SEO也支持的绝佳,种种优势不言而喻。

litrin本人经过这一段时间,CSS和PHP的功力大幅下降——糟糕的页面布局就是最好的例证:-)

最后,奉上转移脚本,希望能够给同样困扰的朋友些许帮助。
继续阅读“WordPress的家”

再谈PHP

说起来用PHP做程序开发已经将近7年多了,从php3一直到php5,开发工具也从记事本一直到了Zend Stdio。php的优点自然不必说,随便哪个PHP技术论坛上一抓一把,可这么多项目做完了,总感觉上缺点什么。我不是“种族主义者”,只是谈一下作为开发人员或者项目管理人员最渴望PHP的功能。

内置函数不统一,PHP的内置函数命名可谓是乱得可以了,大写的、小写的、驼峰的、并列的、AtoB的、下划的……几乎每种命名方式都能在php的内置函数中找到,够得上一个“函数命名方式博览会”的了 。很不利于开发人员记忆。

环境差异,看似PHP只存在版本差异,其实如果你在IDC那边的虚拟主机上部署PHP你就会发现,开不开Safe_mode就够弄半天的了,还有引用的这个库那个库的,如果是pear这样的库也就罢了,大不了自己重新include;拿GD库来讲,根本没有办法通过其他方法来代用。如果同时又有幸使用了Zend加密过的php代码……

模板问题,现在用的最多的就属smarty了,可smarty的功能实在太强,里面的循环、判断和自动转换格式的部分,真不知道是给美工做还是给开发人员做更合适。如果不用模板,直接把php嵌入html中,同样的问题。

数据库访问,有很多数据库的访问接口,但始终无法摆脱fetch的命运,不论怎么封包,复杂的SQL语句总归要成了程序开发中的重点和系统运行中的瓶颈。

对象访问,php的对象在不断的增强,但还是有待增强。虽然不会把php当作java来用。

层次,企业环境开发,最希望的是能把系统访问和应用访问分开,界面和程序分开(即MVC),这一点PHP需要很大的工作量才可以做到,于是大多开发人员不得不选择了不分开。所有的代码集中到了一起,逻辑上很乱,也没有办法实现代码重用。

调试环境,相比java的调试环境,Zend Studio还远远不够。

框架,市面上流行的几个PHP框架,例如ZF,无一例外的都是模仿了Struct或者.net,没有真正表现出PHP自己的特色,这似乎成了一个怪圈——如果别人用框架觉得好就可能从php转到struct或者.net,用得不好反而会得出php很烂的结论,从而转到其他语言。

总之,上面的牢骚只是希望php有所改善,并非是挑php的骨头。

 

用FreeBSD的ports安装apache+php+mysql·改

 正如我一贯习惯于规律性的工作和生活一样,昨天,我按照惯例在以往的时间,用电脑里的outlook软件收信——天热,纵然室内空调的温度已经远远低于官方标准的26度,人毕竟还是没有冷天来的那么清醒。如果从心理学的角度上讲,也许那时的我正处在“意识朦胧状态”。除了正如以往枯燥的工作E-mail之外,我收到了一封网友的E-mail。出乎意料的是,不同于往常访客在浏览了我的个人网页以后会在文章后面发表评论,这次却是发了mail。既然如此,我觉得mail一定是重要的,至少体现了相当一部分访客的心情吧。

那篇E-mail不长,在我的电脑上显示下来仅仅只有三行不到的样子,大抵的内容无非是说本站如何如何的帮了忙,我不免沾沾自喜起来——正如往常的沾沾自喜一样,mail的结尾处指出了小站的几个问题,最重要的是说很多文章过于流程化了,没有一点文字上的修饰和润色,言外之意是字里行间缺乏应有的优雅和细致。要指明的是,所谓优雅和细致,正是目前白领文学或者说白领文化所擅长的。说到白领文化的代表,我想村上春树的小说(或者说林少华翻译的日本小说)、伍佰的歌词、汪家卫的台词、小女人的blog绝对可以作为代表。作为我,从来没有当作自己是白领的一员——乏味的代码、吵闹的机房、灰尘遍布的机架,也许能跟这些词句联系上的只有“体力劳动”一个词了。我固然写不出优雅和细致,字里行间唯独只有王朔依稀的身影。于是我决定做一个尝试,既然有这样的需求,按照目前常说的一句话似乎叫做“需求第一”吧,我决定润色并重写本站访问量最高的那篇文章……

  继续阅读“用FreeBSD的ports安装apache+php+mysql·改”

PHP问题请教(Not Found)

我在Linux下安装并配置了apache2 tomcat5 mysql4.1.12
然后测试http://localhost 成功,但http://localhost/test.php
Not Found
the requested URL /test.php was not found on this server.
Apache/2.0.52(Red Hat)Server at localhost Port 80
查了资料,说是卸载旧版本,我也照做了,可是也不行。请各位高手指点一下。谢谢!

IP到实际地址的查询接口

上次曾经做过一个从IP到实际物理地址的PHP页面,现在我做了一个PHP的Class把这个接口开放。

其实也没有什么大的难度,大家可以看我附带的那个example.php

当然还希望大家不要太过分的调用。那边的服务器只是一个单CPU的Xeon2.8,每秒也只能查询700次以

基于虚拟主机的PHP配置

有个朋友想在我的主机上安置一个站点,PHP的。安置了以后才发现,他的系统默认是session.auto_start的。正好与我这个站点的设置有冲突,使用统一个PHP设置不太可能了。查看了官方的手册,找到了解决方案:

我用PHP5配置为:

打开服务器的AllowOverride 权限
AllowOverride All

<IfModule mod_php5.c>
php_value include_path ".:/usr/local/lib/php"
php_admin_flag safe_mode on
</IfModule>

PHP4的:

<IfModule mod_php4.c>
php_value include_path ".:/usr/local/lib/php"
php_admin_flag safe_mode on
</IfModule>

文物级的PHP3:
<IfModule mod_php3.c>
php3_include_path ".:/usr/local/lib/php"
php3_safe_mode on
</IfModule>

找到PHP.ini中的配置选项后替换掉上面例子中的配置就可以了。其中,php_admin_flag使用与“是非型”、“整数型”以及“浮点数型”的php配置;而php_value则对应了“字符型”。放置在<VirtualHost >之间就可以实现为每个虚拟主机设置不同的配置了。

最后还是提醒PHP的广大开发者:尽量使用PHP的默认配置作为基础环境,如果必须修改相关的设置参数,可以使用php的ini_set()函数来实现。

加固PHP环境

  PHP作为Apache的模块运行时,Apache本身的安全起主导作用,因此如果配置正确的话,PHP应该是一个十分安全的环境,但是如果PHP是以CGI方式来运行的话,就没有这么安全了。

  本文中提到的操作,对Unix和Windows都适用。

  一、作为Apache模块来运行

  因为一般说来,Apache会以“nobody”或者“www”来运行,所以,PHP作为模块是十分安全的。

  如果PHP在虚拟主机环境下,可能会产生用户能浏览其他用户文件的危险。一个简单的脚本如下:

  
  // 假定文档根位于 /usr/local/websites/mydomain

   $location = ../; // 到上一级目录
   $parent = dir( $location);

  // 显示当前目录: /usr/local/websites
  while( $entry =  $parent->read()) {
  echo  $entry .
;
  }
   $parent->close();
  ?>

  这样,只要修改 $location,用户就可以浏览虚拟主机上所有其他用户的文件了。为了减少这样的危险,我们需要看一下php.ini ,修改其中的safe_mode, doc_root和usr_dir 参数,把用户限制在他自己的虚拟主机环境下:

  safe_mode = On
  doc_root = /usr/local/apache/htdocs
  user_dir = /home/albertxu/htdocs

  二、作为CGI

  把PHP以CGI方式运行需要十分小心,可能会泄露你不想让人知道的信息。

  第一件事情要注意的就是一定要把执行文件放到文档根目录以外的地方。例如/usr/local/bin,因此所有的CGI文件开头必须带有:

  #!/usr/local/bin/php

  防止用户直接调用CGI的办法是在Apache中强迫CGI重定向:

  Action php-script /cgi-bin/php.cgi
  AddHandler php-script .php

  这会把下面的URL

  http://example.com/mywebdir/test.htm

  转换为:

  http://example.com/cgi-bin/php/mywebdir/test.htm

  在以CGI方式编译PHP时,最好采用下面的选项:

  –enable-force-cgi-redirect

GMT与UTC

0.时标

时标意指一种将时间分配到事件的制度。现时有两类时间标准广泛被采用。一种是基于天文学,另一种则以原子振动的频率作为依据。

1.视太阳时

视太阳时是一种源于太阳所见位置的时间标准。日晷可直接显示视太阳时。

2.UT0
由 于地球轨道并非圆形,其运行速度又随着地球与太阳的距离改变而出现变化,因此视太阳时欠缺均匀性。视太阳日的长度同时亦受到地球自转轴相对轨道面的倾斜度 所影响。为着要纠正上述的不均匀性,天文学家计算地球非圆形轨迹与极轴倾斜对视太阳时的效应。平太阳时就是指经修订后的视太阳时。在格林尼治子午线上的平 太阳时称为世界时(UT0),又叫格林尼治平时(GMT)。

3.UT1
UT1 与 UT2 是两种较 UT0 均匀的时标。随着较为精确的时钟面世,天文学家发现在不同地点量度的世界时出现差别。这种差别是由于地轴摆动而引起的。各地天文台详细测量了地轴摆动的影响后,制定了一种称为 UT1 的新时标将这种影响删除。

4.UT2
在时钟的精确度进一步改进后,又发现 UT1 具有周期性变化。这种变化是由地球自转率的季节性变动引起的。上述影响经修正后,得到一种更加均匀的时标称为 UT2。

5.国际原子时(TAI):

1967年的第13届国际度量衡会议上通过了一项决议,采纳以下定义代替秒的天文定义:一秒为铯-133原子基态两个超精细能级间跃迁辐射9,192,631,770周所持续的时间。国际原子时是根据以上秒的定义的一种国际参照时标,属国际单位制(SI)。

国际原子时标是一种连续性时标,由1958年1月1日0时0分0秒起,以日、时、分、秒计算。原子时标的准确度为每日数纳秒,而世界时的准确度则只为数毫秒。

6.协调世界时(UTC):
一 种称为协调世界时的折衷时标于1972年面世。为了确保协调世界时与世界时(UT1)相差不会超过0.9秒,有需要时便会在协调世界时内加上正或负闰秒。 因此协调世界时与国际原子时(TAI)之间会出现若干整数秒的差别。位于巴黎的国际地球自转事务中央局(IERS)负责决定何时加入闰秒。