Archive

Posts Tagged ‘php’

PHP性能监测的工具介绍 – XHProf

June 2nd, 2010 CoCoWool No comments

XHProf

这个软件本是Facebook内部的一个应用工具,2009年3月份开源,为PHP的性能监测提供了很好的工具。官方的介绍中提到:

XHProf is a hierarchical profiler for PHP. It reports function-level call counts and inclusive and exclusive metrics such as wall (elapsed) time, CPU time and memory usage.

XHProf’s light-weight nature and aggregation capabilities make it well suited for collecting "function-level" performance statistics from production environments.

 

可以先来看看 XHProf 提供的图形界面的截图

 

XHProf的一些特性:

1、Flat Profile. 提供函数级的汇总信息,比如调用次数、执行时间、内存使用、CPU占用等。

2、Hierarchical Profile。 对每个程序,进行了父级调用和子级调用的分解。

3、Diff Reports(差异报告)。有很多种情况,我们希望能够对比,比如新版本比旧版本提升了多少速度,两个版本的差距究竟在哪里。Diff Report 就是这样的工具,接收两个输入,并且分别给出各自的 Flat Profile 和 Hierarchical Profile 报告。

4、Callgraph View(调用视图)。性能监测的数据可以绘制成调用视图,方便我们查看。

5、Memory Profile(内存监控)。这个特性帮助我们了解PHP如何分配和释放内存。值得注意的是,XHProf并不是严格的监测内存的分配和释放动作,而是计算每个函数进入和退出时的内存状况,这是一个相对简单的实现方式,但是基本上也能够满足我们日常的监控需求。

6、如何处理外部文件。XHProf将 include,require,include_once,require_once进来的文件视作是一个 function。

XHProf目前只支持一个级别的函数追踪,但是貌似也没有特别大的影响。

XHProf的安装配置

xhprof的安装配置很简单,我们首先在 PECL 的网站上下载 源码包 然后执行安装过程

% cd <xhprof_source_directory>/extension/
% phpize
% ./configure --with-php-config=<path to php-config>
% make
% make install
% make test

php.ini file: You can update your php.ini file to automatically load your extension. Add the following to your php.ini file.

[xhprof]
extension=xhprof.so
;
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
;
xhprof.output_dir=<directory_for_storing_xhprof_runs>

 

xhprof的使用也很简单,只要将需要监控的脚本放在 xhprof_enable() 和 xhprof_disable() 中间,就可以得到相应的结果,同时也提供了一些参数可以让我们设置是否监控 Memory, CPU 的使用,是否监控PHP内置的函数,从 0.9.2 之后,还可以设置跳过一些特定的函数。

XHProf 生成的数据,可以用 XHProf UI 来进行简单的显示。

XHProf使用也很简单,下面是一个官方的例子:

<?php

function bar($x) {

  if ($x > 0) {

    bar($x – 1);

  }

}

function foo() {

  for ($idx = 0; $idx < 2; $idx++) {

    bar($idx);

    $x = strlen("abc");

  }

}

xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

foo();

$xhprof_data = xhprof_disable();

//

// Saving the XHProf run

// using the default implementation of iXHProfRuns.

//

include_once "xhprof_lib/utils/xhprof_lib.php";

include_once "xhprof_lib/utils/xhprof_runs.php";

$xhprof_runs = new XHProfRuns_Default();

// Save the run under a namespace "xhprof_foo".

//

// **NOTE**:

// By default save_run() will automatically generate a unique

// run id for you. [You can override that behavior by passing

// a run id (optional arg) to the save_run() method instead.]

//

$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");

echo "—————\n".

     "Assuming you have set up the http based UI for \n".

     "XHProf at some address, you can view run at \n".

     "http://<xhprof-ui-address>/index.php?run=$run_id&source=xhprof_foo\n".

     "—————\n";

?>

 

我们可以持久化记录的数据,数据以文件的形式保存在指定的目录,如下图:

image 有了这个工具,我们可以根据其提供的数据,与相应的通知接口整合,在程序运行出现问题时,及时的发送通知信息。

 

PHP性能监控,还有两个可用的工具,一个是 XDebug,另外一个是 ZendServer,我会在接下来继续进行介绍。

Technorati 标签: ,,

参考文档:

1、Speed UP your php with xhprof

2、xhprof document

Categories: WebTech Tags: , , , ,

利用PUT方式上传文件的方法研究

May 30th, 2010 CoCoWool No comments

虽然没有POST方法使用广泛,但是PUT方法却是向服务器上传文件最有效率的方法。POST上传文件时,我们通常需要将所有的信息组合成 multipart 传送过去,然后服务器再解码这些信息,解码过程则必不可少的会消耗内存和CPU资源,这种现象在上传大文件时尤其明显。而PUT方法则允许你通过与服务器建立的socket链接传递文件的内容,而不附带其他的信息。

最近一个项目上需要利用这种方式来进行文件的上传,下面介绍一下在 Apache + PHP 的环境下如何进行PUT方式的文件上传。

Apache 有一个模块 mod_actions,先看看官方的说明:

This module has two directives. The Action directive lets you run CGI scripts whenever a file of a certain MIME content type is requested. The Script directive lets you run CGI scripts whenever a particular method is used in a request. This makes it much easier to execute scripts that process files.

也就是说,这个模块可以指定对于特定 MIME 类型的文件处理,或者对于特定脚本的请求进行指定的处理。我用到的就是 Script 这个选项。

在Apache 配置文件的 Directory 中指定

Script PUT /receive.php

这个含义就是,对于所有对服务器的PUT请求,都交给根目录下的 receive.php 去处理,当然我们也可以选择 perl 或者其他的CGI脚本来进行处理。

接下来就是这个 receive.php 脚本的编写了,他的主要任务就是将请求的文件写到指定的位置

<?php
/**
* Process The PUT File, receive and move a file to corresponsed location
* Created by shiqiang<cocowool@gmail.com> at 2010-05-24
*
**/

class Receive {
    var $default_log_file = "logs/error.log";
    var $default_server_info = "logs/server.log";
    var $default_header_info = "logs/header.log";
    var $default_prefix = "/data1/vhosts";    //Default project location prefix;
    var $default_module = "test.cn";
    var $max_filesize = 2048000;
    var $request_uri;

    function Receive(){
        $this->request_uri = $_SERVER['REQUEST_URI'];
    }
    function saveFile(){
        //receive data and save
        $putdata = fopen("php://input", "r");

        $path = $this->getPath($this->request_uri);
        $fp = fopen($path, ‘w’);
        while($data = fread($putdata, 1024) ){
            fwrite($fp, $data);
        }

        fclose($fp);
        fclose($putdata);

        //Log The filesize check and limit check
        if( filesize($path) != $_SERVER['CONTENT_LENGTH'] ){
            $this->errorLog( "[warn] " . date("Y-m-d H:i:s")  . " The file’s ($path) size dosen’t match Server Filesize = " . filesize($path) . "; Put Filesize = " . $_SERVER['CONTENT_LENGTH']. "\r\n" );
            header(’HTTP/1.1 526 Receive Data Error’);
        }

        if( filesize($path) > $this->max_filesize ){
            $this->errorLog( "[warn] " . date("Y-m-d H:i:s")  . " The file’s ($path) size exceed the system limit");
        }
    }

    //Log Error Info
    function errorLog( $info ){
        $f = fopen($this->default_log_file, ‘a+’);
        fwrite($f, $info);
        flcose($f);
    }

    function serverLog(){
        $f = fopen($this->default_server_info, ‘w’);
        $info = $_SERVER;
        $str = "The Last Request Server Info:\r\n";
        foreach ($info as $key => $value){
            $str .= "$key = $value\r\n";
        }
        $str .= $this->getPath($this->request_uri) . "\r\n";
        $str .= "PHP_UPLOADED_FILE_NAME=" . $PHP_UPLOADED_FILE_NAME . "\r\n";
        fwrite($f , $str);
        fclose($f);
    }

    //Log the Request Header info
    function headerLog(){
        $f = fopen($this->default_header_info, ‘w’);
        $info = get_headers();
        $str = "The Last Request header Info:\r\n";
        foreach ($info as $key => $value){
            $str .= "$key = $value\r\n";
        }
        fwrite($f , $str);
        fclose($f);
    }

    //get the path where the file should be
    function getPath($uri){
        $module = $this->defalt_module;    //Default storage module

        $referer = $this->request_uri;
        preg_match(’/(?<=\/)(.*?)(?=\/)/s’, $referer, $match);

        if( !empty($match) && !empty($match[0]) ){
            $module = $match[0];
        }

        $path = $this->default_prefix;
        $path .= ‘/’ . $module . ‘/htdocs’;
        $fullpath = substr($uri, strlen($match[0]) + 1, strlen($uri) );

        $arr = explode(’/', ltrim($fullpath, ‘/’));
        foreach($arr as $v){
            if( !strstr($v, ‘.’) ){
                $path .= ‘/’ . $v;
                //exec("echo $path >> dir.txt");
                if( !is_dir($path) ){
                    //For php > 5.0
                    //mkdir($path, "0766", true);
                    mkdir($path, 0766);
                }
            }else{
                $path .= ‘/’ . $v;
            }
        }

        return $path;
    }

}

$instance = new Receive();
$instance->serverLog();
//$instance->headerLog();
$instance->saveFile();

?>

这个脚本,使用PHP手册中的接收PUT方式的方法,详细的使用,GOOGLE的时候,并没有找到很多,所以可能对于错误情况,考虑的也不是很全面,如果有使用过这个方法的欢迎和我讨论。

Technorati 标签: ,,

参考资料:
1、PUT Upload
2、RFC 2616

Categories: WebTech Tags: , , ,

Fedora 11 的安装以及 LAMP环境的搭建(一)

September 20th, 2009 CoCoWool 1 comment

最近,重新安装了一次系统,为了以后不再做无谓的重复查询的工作,特将本次安装及配置的过程记录下来,做为自己以后的一个参考,亦可以为想要安装 Fedora 桌面的同学的一个参考,有任何不对或者可以节省安装时间的方法,都可以在这里讨论。

一、安装系统
这个很简单,我使用的是Fedora Live cd KDE 的版本,其实是喜欢和习惯gnome的,只是手边上没有现成的。
系统安装完成后,稍微体验了一下KDE的dolphine和Konquer,还是不是很习惯,需要上gnome

yum groupinstall ‘GNOME Desktop Environment’

安装完成后,Logout 然后重新登录进来就能看到熟悉的 gnome 界面了,只不过,这样安装的 gnome 很多默认的软件还是和直接的 gnome 不太一样,比如Office 套件就保留了 Koffice,游戏也有很多是K下的,这个影响不大,暂且不表。

二、配置权限和网络连接及其他

(1)、配置权限
需要为经常使用的用户配置权限,需要修改 /etc/sudoers ,添加:
cipher  ALL=(ALL)       ALL
cipher          ALL=(ALL)       NOPASSWD: ALL

这样,用户 cipher 就获得了 sudo 权限而且不需要输入每次都输入密码。

(2)、配置RPM Fusion

因为专利许可证的原因,Fedora 软件仓库不包含 MP3, DVD和视频播放及解码库支持。正因为如此,你必须从第三方软件仓库中安装那些软件。RPM Fusion 是 Fedora 和 Red Hat 企业版的软件仓库,是由 Dribble, Freshrpms 和 RPM Fusion 合并而来的。各种各样的应用程序包含在这个软件仓库中,比如MP3、未加密的 DVD 、Mplayer, VLX, Xine 等多媒体应用程序使用的解码库,以及闭源的 Nvidia 和 ATI 显卡驱动,RPM Fusion 包含以下两个主要的软件仓库:
* 一个被命名为“自由”,主要是开源软件(开源软件的含义通过 Fedora授权指引定义),但因为美国专利保护法案又不能包含在 Fedora 中。
* 另一个被命名为“非自由”,主要是非自由软件,就是其它所有那些不能非自由软件,包括公开源代码的软件,但是有“非商业使用”之类的限制。

sudo rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm
sudo rpm -ivh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm

安装presto插件:sudo yum install yum-presto
安装镜像自动选择插件:sudo yum install yum-fastestmirror

三、安装常用软件

(0)、输入法 — SCIM

Fedora 11 下默认了 ibus 作为输入法,但是我在将系统语言切换为英文后,又经过 yum remove ibus, yum install ibus 反反复复的几次,始终无法终端中切换出中文来,所以最后又投入了我所熟悉的 scim 的怀抱。

yum install scim*

(1)、Firefox

Firefox 的安装很简单:    yum install firefox,只是之后需要安装一些插件,下面这些插件,能够在我日后使用 Firefox 进行上网冲浪的时候提供更好的帮助。

Firefox Addons
1、Vimperator
2、Firebug
3、YSlow
4、DownThem All
5、xmarks
6、Greasemonkey
7、Httpfox
8、FireGesture
9、All in one gestures
10、Easy Drag and go

Flash插件的安装,下载最新的Flash 10 的插件进行安装:flash-plugin-10.0.15.3-release.i386.rpm

(2)、QQ

qq 的安装需要从官方下载 Linux 的安装包:http://im.qq.com/qq/linux/download.shtml,完成后执行:
rpm -ivh linuxqq-v1.0.2-beta1.i386.rpm
Linux版的QQ自发布到现在一直都没有更新过,不知道是不是现在这个版本就是为了挡当时北航学生的提问的,有了以后就不思更新了。

(3)、邮件客户端 Thunderbird

邮件客户端选用了 Thunderbird,系统自带的 Evolution 虽然也可以用,但是你终究会发现有些功能他无法支持的那一天,下载地址为:http://www.mozillamessaging.com/en-US/thunderbird/
完成后对包进行解压缩:tar -xvzf thunderbird-2.0.0.23.tar.gz
解压完成后:cd thunderbird
执行:./thunderbird 的时候提示:./thunderbird-bin: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory
看来是一些基础的库不存在,按照提示:    sudo yum install libstdc++.so.5
完成后,通过:./thunderbird 就可以打开邮件客户端,进行用户名和POP、SMTP服务器配置后就可以使用进行邮件的发送。

我们可以为其建立桌面的快捷方式
命令行方式为:    ln -s   ~/Download/software/misc/thunderbird/thunderbird ./thunderbird
图形界面的方式为点击右键->Create Launcher->选择相应的位置和图标,这样建立的好处是没有那个快捷键。

(4)、VPN连接

因为单位有的时候需要 VPN 连接,所以安装了 pptp 方式的VPN连接:yum install NetworkManager-pptp
安装完成后要重新启动才可以进行VPN连接的设置,否则不会生效,这个问题的原因暂时不明。

(5)、飞信

Linux下的飞信,我使用了 Libfeition 提供的安装包,下载地址:http://www.libfetion.cn/Linux_demoapp_download.html
在安装之前,需要下面的这些包来确保接下来的安装正常进行:
sudo yum install qt4 qt4-devel libcurl libcurl-devel kernel-devel automake gcc-c++ glibc glibc-devel openssl-devel
具体的安装有说明,这里就不赘述了,很容易,这样我们就能享受飞信的服务了。

(6)、Office

使用系统自带的Office套件。

(7)、MSN客户端

这种方式安装的系统中没有自带pidgin,所以需要自己手工安装:sudo yum install pidgin

到目前位置,这个系统就基本上能满足我们日常的办公和沟通需要了。

四、影音娱乐以及系统美化

(1)、视频播放器 Mplayer

首先安装DVD的解码库支持:sudo yum install libdvdread libdvdnav lsdvd
接下来安装livdvdcss支持:
sudo rpm -Uvh http://rpm.livna.org/livna-release.rpm
sudo yum install libdvdcss
安装其他视频文件格式支持:sudo yum install ffmpeg ffmpeg-libs gstreamer-ffmpeg libmatroska xvidcore
安装播放器:sudo yum install mplayer smplayer

===========================================================================
进行了编译安装mplayer的尝试,不过最后编译完成后,皮肤没有安装好,最后还是采用了简单粗暴的 yum 方法
首先查看官方的安装说明:http://www.mplayerhq.hu/DOCS/HTML/en/softreq.html
大部分的软件包都可以通过 yum 来进行安装,有些需要单独安装,包括:
lame    http://lame.sourceforge.net/download.php,    然后按照 INSTALL 中的提示进行编译安装就可以了。
===========================================================================

(2)、音频播放器 Rhythmbox

默认的Feodra 11 KDE中并没有提供 rhythmbox,需要我们独立安装
安装命令:sudo yum install gstreamer rhythmbox
安装MP3格式支持:sudo yum install gstreamer-plugins-good gstreamer-plugins-bad gstreamer-plugins-ugly
这样就可以使用 Rhythmbox 来欣赏 Mp3 音乐了。

当然除此之外,还有诸如 Amarok,Songbird 等非常好的音频播放器,基本上都可以通过 yum 安装,当然前提是需要已经添加了 RPM Fusion。

(3)、Compiz-Fusion

Compiz Fusion, 非常酷的3d立方体桌面,在很多截图和视频中你应该看到过了,Fedora 10 自带 Compiz-Fusion ,但不包含它所有的特性。你可以通过运行 系统 -> 首选项-> 感官 -> 桌面特效找到它。
如果需要所有的特效,需要先检查系统是否支持 direct 渲染:glxinfo | grep direct
如果结果是yes我们就可以直接安装 Compiz-Fusion:sudo yum install ccsm emerald-themes compizconfig-backend-gconf fusion-icon-gtk emerald compiz-fusion compiz-fusion-gnome libcompizconfig compiz-gnome compiz-bcop compiz compizconfig-python compiz-fusion-extras compiz-fusion-extras-gnome

(4)、安装 avant-window-navigator

这个类似于Mac的Dock,可以将底部的 Panel删除掉,而且可以自动隐藏,用起来十分方便。

完成后,将3和4两个加入到系统启动里。
启动进程的添加,可以从菜单里找到 SESSION 进行添加,也可以编辑 /etc/rc.local,也可以编辑 ~/.config/ ,方法很多,就看个人爱好了。

(5)、安装 gnome-do

这个工具可以让我们快速搜索菜单中的工具,而无须使用鼠标去点击,能够提高工作的效率,很实用。
sudo yum install gnome-do gonme-do-plugins*最近,重新安装了一次系统,为了以后不再做无谓的重复查询的工作,特将本次安装及配置的过程记录下来,做为自己以后的一个参考,亦可以为想要安装 Fedora 桌面的同学的一个参考,有任何不对或者可以节省安装时间的方法,都可以在这里讨论。

一、安装系统
这个很简单,我使用的是Fedora Live cd KDE 的版本,其实是喜欢和习惯gnome的,只是手边上没有现成的。
系统安装完成后,稍微体验了一下KDE的dolphine和Konquer,还是不是很习惯,需要上gnome

yum groupinstall ‘GNOME Desktop Environment’

安装完成后,Logout 然后重新登录进来就能看到熟悉的 gnome 界面了,只不过,这样安装的 gnome 很多默认的软件还是和直接的 gnome 不太一样,比如Office 套件就保留了 Koffice,游戏也有很多是K下的,这个影响不大,暂且不表。

二、配置权限和网络连接及其他

(1)、配置权限
需要为经常使用的用户配置权限,需要修改 /etc/sudoers ,添加:
cipher  ALL=(ALL)       ALL
cipher          ALL=(ALL)       NOPASSWD: ALL

这样,用户 cipher 就获得了 sudo 权限而且不需要输入每次都输入密码。

(2)、配置RPM Fusion

因为专利许可证的原因,Fedora 软件仓库不包含 MP3, DVD和视频播放及解码库支持。正因为如此,你必须从第三方软件仓库中安装那些软件。RPM Fusion 是 Fedora 和 Red Hat 企业版的软件仓库,是由 Dribble, Freshrpms 和 RPM Fusion 合并而来的。各种各样的应用程序包含在这个软件仓库中,比如MP3、未加密的 DVD 、Mplayer, VLX, Xine 等多媒体应用程序使用的解码库,以及闭源的 Nvidia 和 ATI 显卡驱动,RPM Fusion 包含以下两个主要的软件仓库:
* 一个被命名为“自由”,主要是开源软件(开源软件的含义通过 Fedora授权指引定义),但因为美国专利保护法案又不能包含在 Fedora 中。
* 另一个被命名为“非自由”,主要是非自由软件,就是其它所有那些不能非自由软件,包括公开源代码的软件,但是有“非商业使用”之类的限制。

sudo rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm
sudo rpm -ivh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm

安装presto插件:sudo yum install yum-presto
安装镜像自动选择插件:sudo yum install yum-fastestmirror

三、安装常用软件

(0)、输入法 — SCIM

Fedora 11 下默认了 ibus 作为输入法,但是我在将系统语言切换为英文后,又经过 yum remove ibus, yum install ibus 反反复复的几次,始终无法终端中切换出中文来,所以最后又投入了我所熟悉的 scim 的怀抱。

yum install scim*

(1)、Firefox

Firefox 的安装很简单:    yum install firefox,只是之后需要安装一些插件,下面这些插件,能够在我日后使用 Firefox 进行上网冲浪的时候提供更好的帮助。

Firefox Addons
1、Vimperator
2、Firebug
3、YSlow
4、DownThem All
5、xmarks
6、Greasemonkey
7、Httpfox
8、FireGesture
9、All in one gestures
10、Easy Drag and go

Flash插件的安装,下载最新的Flash 10 的插件进行安装:flash-plugin-10.0.15.3-release.i386.rpm

(2)、QQ

qq 的安装需要从官方下载 Linux 的安装包:http://im.qq.com/qq/linux/download.shtml,完成后执行:
rpm -ivh linuxqq-v1.0.2-beta1.i386.rpm
Linux版的QQ自发布到现在一直都没有更新过,不知道是不是现在这个版本就是为了挡当时北航学生的提问的,有了以后就不思更新了。

(3)、邮件客户端 Thunderbird

邮件客户端选用了 Thunderbird,系统自带的 Evolution 虽然也可以用,但是你终究会发现有些功能他无法支持的那一天,下载地址为:http://www.mozillamessaging.com/en-US/thunderbird/
完成后对包进行解压缩:tar -xvzf thunderbird-2.0.0.23.tar.gz
解压完成后:cd thunderbird
执行:./thunderbird 的时候提示:./thunderbird-bin: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory
看来是一些基础的库不存在,按照提示:    sudo yum install libstdc++.so.5
完成后,通过:./thunderbird 就可以打开邮件客户端,进行用户名和POP、SMTP服务器配置后就可以使用进行邮件的发送。

我们可以为其建立桌面的快捷方式
命令行方式为:    ln -s   ~/Download/software/misc/thunderbird/thunderbird ./thunderbird
图形界面的方式为点击右键->Create Launcher->选择相应的位置和图标,这样建立的好处是没有那个快捷键。

(4)、VPN连接

因为单位有的时候需要 VPN 连接,所以安装了 pptp 方式的VPN连接:yum install NetworkManager-pptp
安装完成后要重新启动才可以进行VPN连接的设置,否则不会生效,这个问题的原因暂时不明。

(5)、飞信

Linux下的飞信,我使用了 Libfeition 提供的安装包,下载地址:http://www.libfetion.cn/Linux_demoapp_download.html
在安装之前,需要下面的这些包来确保接下来的安装正常进行:
sudo yum install qt4 qt4-devel libcurl libcurl-devel kernel-devel automake gcc-c++ glibc glibc-devel openssl-devel
具体的安装有说明,这里就不赘述了,很容易,这样我们就能享受飞信的服务了。

(6)、Office

使用系统自带的Office套件。

(7)、MSN客户端

这种方式安装的系统中没有自带pidgin,所以需要自己手工安装:sudo yum install pidgin

到目前位置,这个系统就基本上能满足我们日常的办公和沟通需要了。

四、影音娱乐以及系统美化

(1)、视频播放器 Mplayer

首先安装DVD的解码库支持:sudo yum install libdvdread libdvdnav lsdvd
接下来安装livdvdcss支持:
sudo rpm -Uvh http://rpm.livna.org/livna-release.rpm
sudo yum install libdvdcss
安装其他视频文件格式支持:sudo yum install ffmpeg ffmpeg-libs gstreamer-ffmpeg libmatroska xvidcore
安装播放器:sudo yum install mplayer smplayer

===========================================================================
进行了编译安装mplayer的尝试,不过最后编译完成后,皮肤没有安装好,最后还是采用了简单粗暴的 yum 方法
首先查看官方的安装说明:http://www.mplayerhq.hu/DOCS/HTML/en/softreq.html
大部分的软件包都可以通过 yum 来进行安装,有些需要单独安装,包括:
lame    http://lame.sourceforge.net/download.php,    然后按照 INSTALL 中的提示进行编译安装就可以了。
===========================================================================

(2)、音频播放器 Rhythmbox

默认的Feodra 11 KDE中并没有提供 rhythmbox,需要我们独立安装
安装命令:sudo yum install gstreamer rhythmbox
安装MP3格式支持:sudo yum install gstreamer-plugins-good gstreamer-plugins-bad gstreamer-plugins-ugly
这样就可以使用 Rhythmbox 来欣赏 Mp3 音乐了。

当然除此之外,还有诸如 Amarok,Songbird 等非常好的音频播放器,基本上都可以通过 yum 安装,当然前提是需要已经添加了 RPM Fusion。

(3)、Compiz-Fusion

Compiz Fusion, 非常酷的3d立方体桌面,在很多截图和视频中你应该看到过了,Fedora 10 自带 Compiz-Fusion ,但不包含它所有的特性。你可以通过运行 系统 -> 首选项-> 感官 -> 桌面特效找到它。
如果需要所有的特效,需要先检查系统是否支持 direct 渲染:glxinfo | grep direct
如果结果是yes我们就可以直接安装 Compiz-Fusion:sudo yum install ccsm emerald-themes compizconfig-backend-gconf fusion-icon-gtk emerald compiz-fusion compiz-fusion-gnome libcompizconfig compiz-gnome compiz-bcop compiz compizconfig-python compiz-fusion-extras compiz-fusion-extras-gnome

(4)、安装 avant-window-navigator

这个类似于Mac的Dock,可以将底部的 Panel删除掉,而且可以自动隐藏,用起来十分方便。

完成后,将3和4两个加入到系统启动里。
启动进程的添加,可以从菜单里找到 SESSION 进行添加,也可以编辑 /etc/rc.local,也可以编辑 ~/.config/ ,方法很多,就看个人爱好了。

(5)、安装 gnome-do

这个工具可以让我们快速搜索菜单中的工具,而无须使用鼠标去点击,能够提高工作的效率,很实用。
sudo yum install gnome-do gonme-do-plugins*

Categories: WebTech Tags: , , , ,

PHP中的PathInfo

September 17th, 2009 CoCoWool No comments

PHP中的全局变量$_SERVER['PATH_INFO']是一个很有用的参数,众多的CMS系统在美化自己的URL的时候,都用到了这个参数。

对于下面这个网址:

http://www.test.com/index.php/foo/bar.html?c=index&m=search

我们可以得到 $_SERVER['PATH_INFO'] = ‘/foo/bar.html’,而此时 $_SERVER['QUERY_STRING'] = ‘c=index&m=search’;

通常,我们最初开始PHP程序编写的时候,都会使用诸如: http://www.test.com/index.php?c=search&m=main 这样的URL,这种URL不仅看起来非常奇怪,而且对于搜索引擎也是非常不友好的。很多搜索引擎收录的时候,都会忽略Query String之后的内容,google虽然不会忽略Query String,但是对于其他不含Query String的页面,会给于比较高的PR值。

下面是一段解析PATH_INFO的非常简单的代码:

<?php

if( !isset( $_SERVER['PATH_INFO'] ) ){
$pathinfo = ‘default’;
}else{
$pathinfo =  explode(’/', $_SERVER['PATH_INFO']);
}

if( is_array($pathinfo) AND !empty($pathinfo)  ){
$page = $pathinfo[1];
}else{
$page = ‘a.php’;
}

require “$page.php”;

?>

参考资料:
1、PHP Parse Pathinfo
2、CPAN PathInfo

Categories: WebTech Tags: