统计项目代码行数

切换到你项目的根目录下,执行下面的命令,会逐行显示每个文件的行数,和累加值。

wc -l `find ./ |grep .php | grep -v .svn`

这里是统计PHP代码,对所有类型的文件分别执行这个命令,把结果加起来就可以了。

注意,这种方式把注释和换行都算作代码内容了,是粗略的统计。

IE 盒模型

很多网站在写HTML的时候,没有指定DTD,也就是没有设置DOCTYPE。

上学的时候,老师说,DreamWeaver 生成的页面,头部的DOCTYPE都是垃圾信息,应该直接写成<html>。

学院派真是误人子弟……

W3C标准是要制定DOCTYPE的,最显著的区别,我认为就是IE显示Div等元素时采用的盒模型问题。

也就是说,对margin、border等样式所占的面积,是算在Div内部还是外部?

在设定DOCTYPE之前和之后,显示方式是完全不同的。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<style type="text/css">
#box    {
  width:720px;!important;    /* For Modern Browsers */
  width:704px;            /* For IE */
}
</style>

可以在

http://leakon.googlecode.com/svn/trunk/leakon/html/ie_box/

看到源码。

通过设置dtd参数,可以看到在两种DOCTYPE下显示方式的不同。

但在Firefox等现代浏览器下,两种显示方式是一样的。

Symfony 温故而知新

使用Symfony的同学,连接数据库时,如果想指定编码,需要在得到数据库Connection的时候发送一条SET NAMES UTF-8语句,以保证统一。

针对这个问题,我以前写过2篇Blog,地址:

里面是通过修改Creole的源码,symfony/vendor/creole/Creole.php,加入一个setUTF8方法。

这个方式管用,但不是最好。

这两天看了Symfony的 Code snippets ,发现很多Symfony的运行机制,看到一个FilterChains,可以由用户添加一个Filter到调用链中,可以在系统初始化时自动运行。

利用这个特点,把设置连接编码的语句,添加到一个filter中,每次自动运行:

<?php
// 首次执行时,设置数据库连接编码为 GBK
class FilterGBK extends sfFilter {
    
public function execute($filterChain) {
        
// execute this filter only once
        
// 这里确保了这几行代码只执行一次
        
if ($this->isFirstCall()) {
            
$connection = Propel::getConnection();
            
$query = 'SET NAMES gbk';
            
$statement = $connection->prepareStatement($query);
            
$statement->executeQuery();
        
}
        
// execute next filter
        
$filterChain->execute();
    
}
}

再编辑 apps/front/config/filters.yml 文件,在开头加入:

FilterGBK:
  class: FilterGBK

这样就可以达到目的,而以前的实现方式需要修改插件源码,无法在一个系统中运行多个Symfony项目。

随着逐渐深入Symfony,并反复查看文档和代码,可以学到很多Web开发的经验和技巧。

这回,深刻体会到了“温故而知新”的内涵。

Symfony Apache Url Rewrite

今天在服务器上新装了apache,把用Symfony开发的后台程序部署到服务器上,发现生产版本的环境无法使用,居然报404 Not Found。

刚开始没想到是什么原因,反复翻文档,检查虚拟主机的配置,和目录权限,以及.htaccess文件,都正确无误。

在自己的Windows环境是好好的,但在服务器上却不行。

后来就拿.htaccess开刀,因为受到一点Apache手册的启发,就是在.htaccess中添加一些错误代码,以检查.htaccess是否正确运行。

其实本来就应该能想到这样做的,只是觉得问题可能出现在其他地方。

果不其然,就是.htaccess中的<IfModule mod_rewrite.c>,在这个分支里面随便写任何东西,都不会起作用。

看来Apache没有正确安装mod_rewrite.so。

一时也不知道如何验证,后来在网上查了半天才查到。

先列一串命令吧:

  • apache/bin/httpd -l
    列出当前环境中安装了哪些module
  • apache2/bin/apxs -c mod_rewrite.c -lgdbm
    在Apache源码路径的modules/mappers/中,可以找到mod_rewrite.c等所有模块的源码,在这个路径执行apache2/bin/apxs(注意,这里的apxs是apache安装的绝对路径),就会自动编译这个模块,生成.so文件到modules/mappers/.libs/,刚才那个mod_rewrite.so就生成在这里
  • apache2/bin/apxs -i -A -n rewrite mod_rewrite.so
    在modules/mappers/.libs/这个目录下执行上面的命令,会在apache2/conf/httpd.conf中加入一行
    #LoadModule rewrite_module     modules/mod_rewrite.so
    注意前面是带#的
  • apache2/bin/apachectl configtest
    检查当前的配置文件语法是否正确,不用等restart不成功再去检查错误了

通过这样几步,检查没问题后,重启apache,mod_rewrite模块就安装完成了。

再打开Symfony的后台,所有页面都可以正确打开。

我通常都在自己的笔记本上开发程序,用xampp套件,很多常用模块都是默认安装好的,使用之前只要把httpd.conf文件中相应模块前面的#去掉就可以了,一下子把程序部署到服务器,很多模块都没装,还真是不适应。

2008 新年快乐

看着秒针跨过12点的刻度,在向2007道别的同时,迎来了2008。

时间不会停止,不会留恋,只会不停地向前走。

祝福大家新年快乐!

Google

Google
LAMP-Linux-redhat LAMP-Apache LAMP-MySQL LAMP-Php Leakon-Wiki Leakon-BBS XueBaoBao Xyoyou