Sunday, April 29, 2007

使用 js 获取网页 url 参数

使用 js 获取网页 url 参数,在 firefox 中很好用:

// get_url.js
String.prototype.getQuery = function(name)
{
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = this.substr(this.indexOf("\?")+1).match(reg);
if (r!=null) return unescape(r[2]); return null;
}

var url = location.search;

写一张页面,静态动态无所谓,加载文件 get_url.js,然后试着调用它:

window.alert("a"); // 获取 url 参数 a 的值
window.alert("b"); // 获取 url 参数 b 的值

Firefox 中书签可以使用命令行式方式,比如我有两个博客页,一个名为 m,一个名为 n。那么可以添加一个书签,参数照下面方式设置:
  • 名称:MDZ 的博客
  • 地址:file:///website/blog.html?blog=%s
  • 定制关键字:blog
然后写一个名为 blog.html 的页面放在 file:///website/ 目录下,具体看个人的设置。在页面的 script 标签中写入:

switch(url.getQuery("blog")) {
case "m":
window.location = "http://m.blogspot.com/";
break;
case "n":
window.location = "http://n.blogspot.com/";
break;
default:
document.write("Sorry, wrong parameter!");
}

以后就可以使用 firefox 的书签关键字加参数浏览我的博客啦:

blog m
blog n

声明:String.prototype.getQuery 函数来自于网络,谢谢这位网友!

Wednesday, April 25, 2007

Ubuntu 6.10 Edgy 下 Apache+PHP+MySQL+GD+MagickWand 的安装与配置

Author: MDZ(梅拯拯) Date: 2007-04-25

以前我安装 Apache+PHP+MySQL 都是来源于 Linux 软件库,安装起来非常方便:

$ sudo apt-get install apache2 mysql-server-5.0 php5 php5-common

等等,就可以使用了,根本不需要配置什么东西。不过现在遇到了 MagickWand,想轻松点都不行了。算了,自己重新安装配置 Apache + PHP 吧。


首先按照 http://www.supsite.net 上的一篇“Linux 下安装最新 Apache2.0.52 + PHP5 + GD2 + MySQL 等”文章所指示的下载下列软件包:

1. httpd-2.0.59.tar.bz2 (httpd-2.2.4.tar.bz2 应该也可以吧,我不敢下,因为在 Windows 下它与 PHP5 配合有问题)
2. php-5.2.1.tar.bz2
3. MySQL (我懒得下载和编译了,它又是那么庞大~~)
4. freetype-2.3.4.tar.gz (FreeType2 字体支持)
5. gd-2.0.34.tar.bz2 (GD2 库,不支持 gif。我用不到 gif,有需要的朋友可以下载非官方的支持 gif 的 gd2 库)
6. jpegsrc.v6b.tar.gz (JPEG 图像支持)
7. libpng-1.2.16.tar.gz (PNG 图像支持)
8. libxml2-2.6.28.tar.gz (XML 支持)
9. zlib-1.2.3.tar.gz (Zlib 库,许多东东都用得到它)
10. ImageMagick-6.3.3-10.tar.bz2 (ImageMagick,MagickWand 需要)
11. MagickWandForPHP-1.0.4.tar.bz2 (MagickWand 本身)
12. ZendOptimizer-3.2.6-linux-glibc21-i386.tar.gz (PHP 加速器,可要可不要)

另外要保证 gcc、lex/flex、yacc/bison 安装好并正常运行,编译过程中用得到它们。Linux 下一般安装的是 flex 和 bison,因为它们是自由的。

==========================

第一步、安装 MySQL

MySQL 相对独立,没有像 Apache 和 PHP 关联度那么密切,所以先安装它,在 Ubuntu 下很简单:

$ sudo apt-get install mysql-server-5.0

[Update]
再加入下句,否则配置 PHP 的过程中会提示找不到该有的 MySQL 头文件:
$ sudo apt-get install libmysqlclient15-dev

[/Update]


就可以安装上去了。在终端中可以使用

$ mysql -u root

测试是否能进入 MySQL 的交互式终端:"mysql>",可以的话,说明已经安装好并运行了。
启动和停止 MySQL 服务器可以使用下面的命令:

$ sudo /etc/init.d/mysql start # 启动 mysql
$ sudo /etc/init.d/mysql stop # 停止 mysql
$ sudo /etc/init.d/mysql restart # 重启 mysql

注意,Ubuntu 的 apt 源中的 MySQL 安装不是常规的,它把文件拆放在不同的目录下面。/usr/lib/mysql 目录下存放着 MySQL 的模块文件,我们待会儿用得着。

[Update]
MySQL 的手动安装(参考:http://www.itlearner.com/article/2006/3540.shtml):

1. 下载自带 glibc23 库的版本,如 mysql-standard-5.0.27-linux-i686-glibc23.tar.gz
2. 直接解压到 /usr/local/mysql
3. 使用以下命令建立“mysql”用户和组:
$ sudo groupadd mysql
$ sudo useradd mysql -g mysql
4. 进入 MySQL 目录:
$ cd /usr/local/mysql
5. 设置权限:
$ sudo chown -R root . # 设定root能访问/usr/local/mysql
$ sudo chown -R mysql data # 设定mysql用户能访问/usr/local/mysql/data ,里面存的是mysql的数据库文件
$ sudo chown -R mysql data/. # 设定mysql用户能访问/usr/local/mysql/data下的所有文件
$ sudo chown -R mysql data/mysql/. # 设定mysql用户能访问/usr/local/mysql/data/mysql下的所有文件
$ sudo chgrp -R mysql . # 设定mysql组能够访问/usr/local/mysql
6. 运行mysql:
$ sudo /usr/local/mysql/bin/mysqld_safe --user=mysql &

[/Update]


==========================

第二步、安装杂项软件和库文件

1. libxml
$ tar -zxvf libxml2-2.6.28.tar.gz
$ cd libxml2-2.6.28
$ sudo ./configure
$ sudo make
$ sudo make install

2. zlib
$ tar -zxvf zlib-1.2.3.tar.gz
$ cd zlib-1.2.3
$ sudo ./configure --prefix=/usr/local/zlib2
$ sudo make
$ sudo make install

3. jpeg
$ tar -zxvf jpegsrc.v6b.tar.gz
$ cd jpeg-6b
$ sudo ./configure --prefix=/usr/local/jpeg6
$ sudo make
建立相关目录,再安装:
$ sudo mkdir /usr/local/jpeg6
$ sudo mkdir /usr/local/jpeg6/include
$ sudo mkdir /usr/local/jpeg6/lib
$ sudo make install-lib
$ sudo make install

[Update]
如果还有错误提示,则再建立一下目录:
$ sudo /usr/local/jpeg6/bin
$ sudo /usr/local/jpeg6/man
$ sudo /usr/local/jpeg6/man1
[/Update]


4. libpng
$ tar -zxvf libpng-1.2.16.tar.gz
$ cd libpng-1.2.16
$ sudo ./configure --prefix=/usr/local/libpng2
$ sudo make
$ sudo make install

5. freetype
$ tar -zxvf freetype-2.3.4.tar.gz
$ cd freetype-2.3.4
$ sudo ./configure --prefix=/usr/local/freetype2
$ sudo make
$ sudo make install

6. gd-lib
$ tar -jxvf gd-2.0.34.tar.bz2
$ cd gd-2.0.34
$ sudo ./configure --prefix=/usr/local/gd2 --with-zlib=/usr/local/zlib2/ --with-png=/usr/local/libpng2/ --with-jpeg=/usr/local/jpeg6/ --with-freetype=/usr/local/freetype2
$ sudo make
$ sudo make install

==========================

第三步、安装 Apache

$ tar -jxvf httpd-2.0.59.tar.bz2
$ cd httpd-2.0.59
$ sudo ./configure --prefix=/usr/local/apache2 --enable-module=so
$ sudo make
$ sudo make install

==========================

第四步、第一次编译安装 PHP,释放出软件 phpize

$ tar -jxvf php-5.2.1.tar.bz2
$ cd php-5.2.1
$ sudo ./configure
$ sudo make

[Update]
$ sudo make install (之前落掉这一句了,抱歉)
$ sudo make clean (这句比较关键,不然再次编译后启动 Apache 时会说找不到 php5 模块)

[/Update]


==========================

第五步、安装 ImageMagick 和 MagickWand

1. 先安装 ImageMagick,参考文章“安装 ImageMagick 小记”:
$ tar -jxvf ImageMagick-6.3.3-10.tar.bz2
$ cd ImageMagick-6.3.3-10
$ sudo ./configure --enable-shared --enable-lzw --with-modules --prefix=/usr/local/ImageMagick
$ sudo make
$ sudo make install
其中 --enable-lzw 是打开 lzw 压缩开关

2. 安装 MagickWand for PHP
$ tar -jxvf MagickWandForPHP-1.0.4.tar.bz2
$ cp -r MagickWandForPHP-1.0.4 {PHP_SRC_DIR}/ext/magickwand
这里 {PHP_SRC_DIR} 指的是你存放 php 源代码的目录。

$ cd {PHP_SRC_DIR}/ext/magickwand/
$ phpize

==========================

第六步、重新编译安装 PHP,加入 magickwand 模块、联接 Apache、MySQL 等

$ cd {PHP_SRC_DIR}
$ rm -rf ./configure # 删除 configure 配置文件,也可以改名以防万一
$ ./buildconf --force # 重新生成 configure 配置文件,现在文件中已经有 magickwand 的“指标”了

重新配置 php:
$ sudo ./configure \
--prefix=/usr/local/php \ # 安装路径
--with-apxs2=/usr/local/apache2/bin/apxs \ # 指定 Apache
--with-jpeg-dir=/usr/local/jpeg6/ \ # JPEG 支持
--with-png-dir=/usr/local/libpng2/ \ # PNG 支持
--with-gd=/usr/local/gd2/ \ # GD 库支持
--with-freetype-dir=/usr/local/freetype2/ \ # FreeType2 字体支持
--enable-trace-vars \
--with-zlib-dir=/usr/local/zlib2/ \ # Zlib 库支持
--with-mysql=/usr/lib/mysql \ # MySQL 支持
--with-magickwand=/usr/local/ImageMagick # MagickWand 支持

编译和安装:
$ sudo make
$ sudo make install

拷贝配置文件:
$ sudo cp php.ini-dist /usr/local/php/lib/php.ini

==========================

第七步、配置服务器,使它能够解析运行 PHP 文件

$ sudo zile /usr/local/apache2/conf/httpd.conf # 我比较喜欢 zile 编辑器,可以选用其它的。

按照以下提示的修改:

1. 在
#AddType application/x-tar .tgz
下面加一行
AddType application/x-httpd-php .php

2. 如果看见
# LoadModule php5_module modules/libphp5.so
则去掉 “#” 号。如果没 “#” 号,那再好不过了。

3. 找到
DirectoryIndex index.html index.html.var
行,在后面添加 “index.php”,表示服务器按次序把上面的列表作为默认页

4. 找到
# don't use Group #-1 on these systems!
把它下面的用户名和组改为
User apache
Group apache


5. 找到
# ServerName
把 “#”去掉,后面的 IP 改成自己的 IP

6. 找到
DocumentRoot "/usr/local/apache2/htdocs"
把路径改为自己存放网页文件的路径

保存 httpd.conf 文件。

启动或停止 apache 可以参考下列命令:
$ sudo /usr/local/apache2/bin/apachectl start # 运行 apache
$ sudo /usr/local/apache2/bin/apachectl stop # 停止 apache
$ sudo /usr/local/apache2/bin/apachectl restart # 重启 apache

[Update]
如果运行上述的命令出现“httpd: bad user name apache”错误的话,表示系统中无 “apache”组和 “apache”用户名。用下列语句添加:
$ groupadd apache (添加“apache”组)
$ useradd apache -g apache (添加“apache”组下的用户“apache”)

[/Update]


==========================

现在启动 Apache 和 MySQL 服务器应该可以解析运行 PHP 和让 PHP 联接 MySQL 数据库了。并且拥有了使用 GD2 和 MagickWand 的权利!

最后,可以使用 ZendOptimizer 加速 PHP 速度,安装有提示的,不说了!

Enjoy PHPing!

Monday, April 02, 2007

Bash 使用技巧大补贴

转自:http://linuxtoy.org/archives/the-best-tips-and-tricks-for-bash.html

Bash 是我们经常与之打交道的 Shell 程序,本文针对其使用技巧进行了搜罗。相信在你看过这些内容之后,定会在 Bash 的世界里游刃有余。

  • 从历史中执行命令

    有时候,我们需要在 Bash 中重复执行先前的命令。你当然可以使用上方向键来查看之前曾经运行过的命令。但这里有一种更好的方式:你可以按 Ctrl + r 组合键进入历史搜索模式,一旦找到需要重复执行的命令,按回车键即可。

  • 重复命令参数

    先来看一个例子:

    mkdir /path/to/exampledir
    cd !$

    本例中,第一行命令将创建一个目录,而第二行的命令则转到刚创建的目录。这里,“!$”的作用就是重复前一个命令的参数。事实上,不仅是命令的参数可以重复,命令的选项同样可以。另外,Esc + . 快捷键可以切换这些命令参数或选项。

  • 用于编辑的快捷键
    • Ctrl + a:将光标定位到命令的开头
    • Ctrl + e:与上一个快捷键相反,将光标定位到命令的结尾
    • Ctrl + u:剪切光标之前的内容
    • Ctrl + k:与上一个快捷键相反,剪切光标之后的内容
    • Ctrl + y:粘贴以上两个快捷键所剪切的内容
    • Ctrl + t:交换光标之前两个字符的顺序
    • Ctrl + w:删除光标左边的参数(选项)或内容
    • Ctrl + l:清屏
  • 处理作业

    首先,使用 Ctrl + z 快捷键可以让正在执行的命令挂起。如果要让该进程在后台执行,那么可以执行 bg 命令。而 fg 命令则可以让该进程重新回到前台来。使用 jobs 命令能够查看到哪些进程在后台执行。

    你也可以在 fg 或 bg 命令中使用作业 id,如:
    fg %3

    又如:
    bg %7

  • 使用置换
    • 命令置换

      先看例子:
      du -h -a -c $(find . -name *.conf 2>&-)

      注意 $() 中的部分,这将告诉 Bash 运行 find 命令,然后把返回的结果作为 du 的参数。

    • 进程置换

      仍然先看例子:
      diff <(ps axo comm) <(ssh user@host ps axo comm)

      该命令将比较本地系统和远程系统中正在运行的进程。请注意 <() 中的部分。

    • xargs

      看例:
      find . -name *.conf -print0 | xargs -0 grep -l -Z mem_limit | xargs -0 -i cp {} {}.bak

      该命令将备份当前目录中的所有 .conf 文件。

  • 使用管道

    下面是一个简单的使用管道的例子:
    ps aux | grep init

    这里,“|”操作符将 ps aux 的输出重定向给 grep init。

    下面还有两个稍微复杂点的例子:
    ps aux | tee filename | grep init

    及:
    ps aux | tee -a filename | grep init

  • 将标准输出保存为文件

    你可以将命令的标准输出内容保存到一个文件中,举例如下:
    ps aux > filename

    注意其中的“>”符号。

    你也可以将这些输出内容追加到一个已存在的文件中:
    ps aux >> filename

    你还可以分割一个较长的行:
    command1 | command2 | ... | commandN > tempfile1
    cat tempfile1 | command1 | command2 | ... | commandN > tempfile2

  • 标准流:重定向与组合

    重定向流的例子:
    ps aux 2>&1 | grep init

    这里的数字代表:

    • 0:stdin
    • 1:stdout
    • 2:sterr

    上面的命令中,“grep init”不仅搜索“ps aux”的标准输出,而且搜索 sterr 输出。