Monthly Archives: April 2007

《兽血沸腾》1-612章 TXT精排

不断同步更新,已更新至最新612章,敬请关注……

 

兽人史诗:兽血沸腾
兽人小说在我国有深的传统,比如《西游记》就是兽人小说的雏形。而作者静官认为,在生物进化中,只有一支灵智动物发展成完整的人,还有其他的分支,肯定是兽人。基于这种进化的质疑,构成了这部兽人小说的背景和人物。让人到兽人王国去,会发生怎样的生物碰撞?这是发生在一个异次元空间的故事。
一个在南疆战场阵亡的侦察兵刘震撼,莫名其妙重生在异时空中。这个异空间世界有七块大陆和更为辽阔的海洋,生活着人类、比蒙兽人、海洋民族、无数的魔兽以及至高无上的神灵,他们之间为了权利欲望和生存空间,绵延着长期的战争。

 

《兽血沸腾》1-612章TXT精排

 

注明:下载地址是通过google搜得,非本站提供!有关版权的事情您也别来找我,呵呵!

谷歌中国开始了阉割下的本地化生存

googler 写道 "今天,有可靠消息称,google.com将在中国消失,而谷歌的中文搜索服务将全部转向google.cn。此前,谷歌中国在中国提供两套搜索服务,而google.cn是谷歌在中国本土化的妥协之作。
在一年前“谷歌”这一傻名发布后,就出现了“反谷歌”网站,在其首页上,数万名网民签名反对Google使用“谷歌”一词作为中文名称。这些被称为G粉的google拥趸坚定地宣称:“Google,我们爱你,但我们不爱谷歌,谷歌这个名字,让我们不爽!更让我们失望!”
然而,可能令这些G粉更失望的是,Google不仅要改掉名字,而且要彻彻底底关闭掉google.com服务,所有在中国访问google.com的要 求都会在谷歌服务器端自动指向google.cn,一个被G粉们称之为“被阉掉”的网站。这次,G粉们恐怕不只是失望,应该是失魂落魄了。
谷歌中国区总裁,深受学生们爱戴的李开复博士千辛万苦地说服他的老板,Google公司的创始人,违背“不作恶”的原则来开设.cn网站,他成功了。他现 在取得更大的成功,因为曾经一度是.com和.cn并行,还给网民更多的选择。但现在,.com已经彻底和中国网民绝缘了。
著名博客keso曾经说,“我尊敬的是.com的google,而不是.cn的谷歌”。
或者正如google技术部人士笑言所称,谷歌中国开始了阉割下的本地化生存。"

PHP程序导出MYSQL数据库

通常我们都用 phpMyAdmin 来导出,不过如果你的数据库如果存在下列问题,那么 phpMyAdmin 也无能为力。

  • 数据库的字符集与应用程序的字符集不一致;
  • 应用程序用错误的编码将数据保存到了数据库中;
  • 用 phpMyAdmin 和 mysqldump 导出的数据总是乱码。

总之你用 phpMyAdmin 和 mysqldump 导出的数据有乱码时,就试试看这个脚本吧。

使用很简单:

php export_db.php 数据库名 [-h 主机名] [-c 字符集] [-f 输出文件名] [-u 用户名] [-p]
数据库名是必须提供的,其他参数如果没有提供则使用下面的默认值:
默认主机名 : localhost
默认字符集 : utf8
默认用户名 : root
默认密码 : (无)
默认输出文件 : 数据库名.sql

这个脚本的导出结果就是一个 .sql 文件,只有 insert 语句。

所以数据结构需要单独导出,不过这个就不存在字符集问题了。

数据库导出工具下载

单机搭建多虚拟主机测试环境

作为一个PHP程序员,在本机上搭建一个测试服务器是必须的。
我用的是XMAPP,是一个易于安装且包含 MySQL、PHP 和 Perl 的 Apache 发行版。
XAMPP 的确非常容易安装和使用:只需下载,解压缩,启动即可。
具体看这里:http://www.apachefriends.org/zh_cn/xampp.html

更改本机的hosts文件,在C:WINDOWSsystem32driversetc目录下,用记事本打开,加入若干个域名,如:
127.0.0.1    www.aaa.com
127.0.0.1    www.bbb.com
127.0.0.1    www.zzz.com
……

更改httpd.conf文件,加入许可。这个文件在你XMAPP安装目录apacheconf下

# 添加MYSITE目录的许可权限
<Directory "d:/mysite">
Order allow,deny
Allow from all
</Directory>
<Directory "d:/mysite2">
Order allow,deny
Allow from all
</Directory>
<Directory "d:/mysite3">
Order allow,deny
Allow from all
</Directory>

你也可以使目录为网站根目录下的一个目录
Alias /mysite/ "d:/mysite/"
Alias /mysite2/ "d:/mysite2/"
Alias /mysite3/ "d:/mysite3/"

更改httpd-vhosts.conf文件,加入虚拟主机。这个文件在你XMAPP安装目录apacheconfextra下
<VirtualHost *:80>
    ServerAdmin zfxvx@126.com
    DocumentRoot "d:/WEBSITE/xampp/htdocs"
    ServerName www.aaa.com
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin zfxvx@126.com
    DocumentRoot "d:/mysite"
    ServerName www.bbb.com
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin zfxvx@126.com
    DocumentRoot "d:/mysite2"
    ServerName www.ccc.com
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin zfxvx@126.com
    DocumentRoot "d:/mysite3"
    ServerName www.ccc.com
</VirtualHost>

重新启动APACHE服务和MYSQL服务!
在地址栏里输入www.aaa.com www.bbb.com www.ccc.com试试,呵呵,这样的域名可不多见啊!

BLOG之最差的用户体验21条

1、访问需要注册
  2、页面载入时间过长
  3、首页过长
  4、运用新的设计技术,浏览需要下载插件
  5、弹出窗口、广告过多、浮动广告影响浏览
  6、自动播放多媒体音频、视频文件
  7、过多使用动画效果
  8、过度强调页面技术,忽视主要内容浏览效果
  9、不提供全文输出,只提供摘要
  10、不提供文章内所提及的信息来源和链接
  11、不提供专业词汇和外语单词解释
  12、不提供长期不更新的原因和恢复时间
  13、不提供RSS订阅
  14、不提供站内搜索
  15、不提供良好的导航
  16、不提供良好的分类
  17、不允许匿名留言评论
  18、不提供有效的交流提问方式
  19、不提供查询和提交信息的反馈
  20、不提供链接回到首页和前后页,产生单独的死页面
  21、不提供站长的任何联系方式和个人信息

PHP生成静态页

  我们先回顾一些基本的概念。
  一,PHP脚本与动态页面。
   PHP脚本是一种服务器端脚本程序,可通过嵌入等方法与HTML文件混合,也可以类,函数封装等形式,以模板的方式对用户请求进行处理。无论以何种方 式,它的基本原理是这样的。由客户端提出请求,请求某一页面 ——-> WEB服务器引入指定相应脚本进行处理 ——-> 脚本被载入服务器  ——-> 由服务器指定的PHP解析器对脚本进行解析形成HTML语言形式 ——> 将解析后的HTML语句以包的方式传回给浏览器。由此 不难看出,在页面发送到浏览器后,PHP就不存在了,已被转化解析为HTML语句。客户请求为一动态文件,事实上并没有真正的文件存在在那里,是PHP解 析而成相对应的页面,然后发送回浏览器。这种页面处理方式被称为“动态页面”。
  二,静态页面。
  静态页面是指在服务器端确实存在的 仅含HTML以及JS,CSS等客户端运行脚本的页面。它的处理方式是。由客户端提出请求,请求某一页面 ——> WEB服务器确认并载入某一页面  ——> WEB服务器将该页面以包的形式传递回浏览器。由这一过程,我们对比一下动态页面,即可方现。动态页面需由WEB服务器的PHP解析器进 行解析,而且通常还需连接数据库,进行数据库存取操作,然后才能形成HTML语言信息包;而静态页面,无须解析,无须连接数据库,直接发送,可大大减轻服 务器压力,提高服务器负载能力,大幅提供页面打开速度和网站整体打开速度。但其缺点是,不能动态地对请求进行处理,服务器上必须确实存在该文件。

  三,模板及模板解析。
  模板即尚未填充内容html文件。例如:
 temp.html

<HTML>
  <TITLE>{ title }</TITLE>
  <BODY>
     this is a { file } file’s templets
  </BODY>
</HTML>

PHP处理:
 templetest.php

<?php
  $title = "落伍测试模板";
  $file   = "TwoMax Inter test templet,<br />author:Matrix@Two_Max";

 $fp          = fopen ("temp.html","r");
  $content  = fread ($fp,filesize ("temp.html"));
  $content .= str_replace ("{ file }",$file,$content);
  $content .= str_replace ("{ title }",$title,$content);

  echo $content;
?>
模 板解析处理,即将经PHP脚本解析处理后得出的结果填充(content)进模板的处理过程。通常借助于模板类。目前较流行的模板解析类有phplib, smarty,fastsmarty等等。模板解析处理的原理通常为替换。也有些程序员习惯将判断,循环等处理放进模板文件中,用解析类处理,典型应用为 block概念,简单来说即为一个循环处理。由PHP脚本指定循环次数,如何循环代入等,再由模板解析类具体实施这些操作。
  好了,对比过静态页面与动态页面各自的优劣,现在我们就来说说,如何用PHP生成静态文件。
   PHP生成静态页面并不是指PHP的动态解析,输出HTML页面,而是指用PHP创建HTML页面。同时因为HTML的不可写性,我们创建的HTML若 有修改,则需删掉重新生成即可。(当然你也可以选择用正则进行修改,但个人认为那样做倒不如删掉重新生成来得快捷,有些得不偿失。)
  言归正 传。用过PHP文件操作函数的PHP FANS知道,PHP中有一个文件操作函数fopen,即打开文件。若文件不存在,则尝试创建。这即是PHP可以用来创建HTML文件的理论基础。只要用 来存放HTML文件的文件夹有写权限(即权限定义0777),即可创建文件。(针对UNIX系统而言,Win系统无须考虑。)仍以上例为例,若我们修改最 后一句,并指定在test目录下生成一个名为test.html的静态文件:

<?php
   $title = "落伍测试模板";
   $file   = "TwoMax Inter test templet,<br />author:Matrix@Two_Max";
 $fp          = fopen ("temp.html","r");
   $content  = fread ($fp,filesize ("temp.html"));
   $content .= str_replace ("{file}",$file,$content);
   $content .= str_replace ("{title}",$title,$content);
   // echo $content;   
   $filename = "test/test.html";
   $handle    = fopen ($filename,"w"); //打开文件指针,创建文件
   /*
 检查文件是否被创建且可写
   */
   if (!is_writable ($filename)){
       die ("文件:".$filename."不可写,请检查其属性后重试!");
    }
   if (!fwrite ($handle,$content)){  //将信息写入文件
       die ("生成文件".$filename."失败!");
    }
   fclose ($handle); //关闭指针
   
   die ("创建文件".$filename."成功!");
?>
实际应用中常见问题解决方案参考:
  一,文章列表问题:  
   在数据库中创建字段,记录文件名,每生成一个文件,将自动生成的文件名存入数据库,对于推荐文章,只需指向存放静态文件的指定文件夹中的该页面即可。利 用PHP操作处理文章列表,存为字符串,生成页面时替换此字符串即可。如,在页面中放置文章列表的表格加入标记{articletable},而在PHP 处理文件中:

<?php
   $title = "落伍测试模板";
   $file   = "TwoMax Inter test templet,<br />author:Matrix@Two_Max";
   $fp          = fopen ("temp.html","r");
   $content  = fread ($fp,filesize ("temp.html"));
   $content .= str_replace ("{file}",$file,$content);
   $content .= str_replace ("{title}",$title,$content);   
   //  生成列表开始
   $list = ”;
   $sql = "select id,title,filename from article";
   $query = mysql_query ($sql);
   while ($result = mysql_fetch_array ($query)){
       $list .= ‘<a href=’.$root.$result[‘filename’].’
target=_blank>’.$result[‘title’].'</a><br />’;
    }
   $content .= str_replace ("{articletable}",$list,$content);   
   //生成列表结束
   // echo $content;   
   $filename = "test/test.html";
   $handle    = fopen ($filename,"w"); //打开文件指针,创建文件
   /*
 检查文件是否被创建且可写
   */
   if (!is_writable ($filename)){
       die ("文件:".$filename."不可写,请检查其属性后重试!");
    }
   if (!fwrite ($handle,$content)){  //将信息写入文件
       die ("生成文件".$filename."失败!");
    }
   fclose ($handle); //关闭指针   
   die ("创建文件".$filename."成功!");
?>
二,分页问题。
   如我们指定分页时,每页20篇。某子频道列表内文章经数据库查询为45条,则,首先我们通过查询得到如下参数:1,总页数;2,每页篇数。第二步, for ($i = 0; $i < allpages; $i++),页面元素获取,分析,文章生成,都在此循环中执行。不同的是,die (“创建文件”.$filename.”成功!”;这句去掉,放到循环后的显示,因为该语句将中止程序执行。例:

<?php
  $fp          = fopen ("temp.html","r");
  $content  = fread ($fp,filesize ("temp.html"));
  $onepage  = ’20’;
  $sql          = "select id from article where channel=’$channelid’";
  $query      = mysql_query ($sql);
  $num        = mysql_num_rows ($query);
  $allpages   = ceil ($num / $onepage);

  for ($i = 0;$i<$allpages; $i++){
      if ($i == 0){
          $indexpath = "index.html";
        } else {
          $indexpath = "index_".$i."html";
        }
      $start = $i * $onepage;
      $list    = ”;
      $sql_for_page = "select name,filename,title from article where channel=’$channelid’ limit
  $start,$onepage";
      $query_for_page = mysql_query ($sql_for_page);
      while ($result = $query_for_page){
          $list .= ‘<a href=’.$root.$result[‘filename’].’ target=_blank>’.$title.'</a><br />’;
        }
      
      $content = str_replace ("{ articletable }",$list,$content);

      if (is_file ($indexpath)){
          @unlink ($indexpath); //若文件已存在,则删除
        }

      $handle    = fopen ($indexpath,"w"); //打开文件指针,创建文件
      /*
    检查文件是否被创建且可写
      */
      if (!is_writable ($indexpath)){
          echo "文件:".$indexpath."不可写,请检查其属性后重试!"; //修改为echo
        }
      if (!fwrite ($handle,$content)){  //将信息写入文件
          echo "生成文件".$indexpath."失败!"; //修改为echo
        }
      fclose ($handle); //关闭指针
   }

  fclose ($fp);
  die ("生成分页文件完成,如生成不完全,请检查文件权限系统后重新生成!");

?>  
  大致思路如此,其中如其它数据生成,数据输入输出检查,分页内容指向等可酌情在页面中加入。

  在实际文章系统处理过程当中,还有许多问题有待考虑,与动态页面不同之处,需注意的地方还有很多。但大致思路即是如此,其它方面可举一反三而得。

PHP优化的点击数统计代码

一般用于统计广告页的点击数.

分析了一下28的访问统计,一大堆的update和insert,服务器上的mysql占用很高,所以就想了这种缓存更新的方式.
首先在log目录下创建last_update.txt,内容是 1155163400,(这是time()函数生成的时间).

click_log文件的内容是像下面这样的:
13136|44
13104|31
23509|32
第一个数字代表文章的ID,第二个数字代表累积的点击数

这样做,会提高程序的执行效率,无论是动态的PHP页面还是html里,以<script src="click.php?article_id=333"></script>或iframe来调用,都有效.

PHP页的话,可以把上面的代码做成一个包含文件,然后在你的文章中include进来,不过,要改一下代码,把article_id传进去.

<?php
error_reporting(E_ALL);
$ROOT_PATH = ‘../’;
include_once($ROOT_PATH . "include/config.php");

//多长时间更新一次,单位是秒
$update_time = 1800;

//文章的ID
$article_id = (isset($_GET[‘article_id’]) && is_numeric($_GET[‘article_id’]) && $_GET[‘article_id’] > 0) ? intval($_GET[‘article_id’]) : 0;
if ($article_id > 0) {

    $filename = $ROOT_PATH . ‘log/click_log.txt’;
    $s = ”;
    if (file_exists($filename)) {
        $content = file_get_contents($filename);
        $d_ary = array();
        if ($content) {
            $ary = explode("n", $content);
            foreach ($ary as $line) {
                $data_ary = explode(‘|’, $line);
                if (is_numeric($data_ary[0]) && is_numeric($data_ary[1])) {
                    $d_ary[$data_ary[0]] = $data_ary[1];
                }
            }
        }
        if (array_key_exists($article_id, $d_ary)) {
           
            //将当前的文章的点击数加1
            $d_ary[$article_id] = $d_ary[$article_id]+1;
        } else {
            $d_ary[$article_id] = 1;
        }
        foreach ($d_ary as $key => $val) {
            $s .= $key . ‘|’ . $val . "n";
        }
    } else {
        //这个是初始化记录文件
        $s .= $article_id . ‘|1’ . "n";
    }

    //写记录文件
    $fp = fopen($filename, "w");
    fwrite($fp, $s);
    fclose($fp);
    @chmod($filename, 0777);

    $last_update = file_get_contents(‘../log/last_update.txt’);//取上一次更新的时间
    $last_update = intval($last_update);
    if (($last_update + $update_time) < time()) {

        //以下是数据库连接操作,我用的是ADODB,你可以改成你自己的
        require_once("adodb.inc.php");
        $db = NewADOConnection("$DB_TYPE");
        $db->debug = true;
        $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
        if (!$db->Connect("$DB_HOST", "$DB_USER", "$DB_PASS", "$DB_DATABASE")) {
            exit(‘<a href="/">服务器忙,请稍候再访问</a>’);
        }

        $content = file_get_contents($filename);
        $d_ary = array();
        if ($content) {
            $ary = explode("n", $content);
            foreach ($ary as $line) {
                $data_ary = explode(‘|’, $line);
                if (is_numeric($data_ary[0]) && is_numeric($data_ary[1])) {
                    $sql = "UPDATE article SET hits=hits+" . $data_ary[1] . " WHERE id=" . $data_ary[0];
                    $db->Execute($sql);
                }
            }
        }
        //点击数更新完了,将这个记录文件清空
        $fp = fopen($filename, "w");
        fwrite($fp, ”);
        fclose($fp);
        @chmod($filename, 0777);

        //将最后一次更新时间改为当前时间
        $fp = fopen(‘../log/last_update.txt’, "w");
        fwrite($fp, time());
        fclose($fp);
        @chmod(‘../log/last_update.txt’, 0777);
   
        $db->Close();//关闭数据库连接
    }
    exit();
}
?>

下面的这个是他们在用的统计代码:

<?php
include "config.php";
if ($id=="")
{
  $id=0;
}

$leileicount=rand(1,1);

$cookie_bannerid="cookie_banner".$id;
if ($HTTP_COOKIE_VARS["$cookie_bannerid"]=="")
{
setcookie("$cookie_bannerid","$id",time()+43200);
}

if ($comeid=="")
{$comeid=0;}
if ($dlzid=="")
{
    $dlzid=0;
}
//流量统计
$time0=date("Y-m-d");
$sql_string="select id from count0 where bannerid=’$id’ and datetime0=’$time0′ and comeid=’$comeid’ and dlzid=’$dlzid’";
$result=mysql_query($sql_string);
$rows=mysql_num_rows($result);

//独立ip流量统计
$userip=$REMOTE_ADDR;
$sql_stringip="select id from ipcount0 where bannerid=’$id’ and datetime0=’$time0′ and comeid=’$comeid’ and userip=’$userip’ and dlzid=’$dlzid’";
$resultip=mysql_query($sql_stringip);
$rowsip=mysql_num_rows($resultip);

if ($rows>0)
{
//修改记录
if ($HTTP_COOKIE_VARS["$cookie_bannerid"]==$id)
    {
      $test=mysql_query("update count0 set count0=count0+$leileicount where bannerid=’$id’ and datetime0=’$time0′ and comeid=’$comeid’ and dlzid=’$dlzid’",$db);
    }
else
    {
    if ($rowsip==0)
        {
          //独立ip增加新记录
          $into_dbip="insert into ipcount0 (bannerid,datetime0,comeid,userip,dlzid) values (‘$id’,’$time0′,’$comeid’,’$userip’,’$dlzid’)";
          $testip=mysql_query($into_dbip,$db);

          $test=mysql_query("update count0 set count0=count0+$leileicount,usercount0=usercount0+$leileicount,ipcount0=ipcount0+$leileicount where bannerid=’$id’ and datetime0=’$time0′ and comeid=’$comeid’ and dlzid=’$dlzid’",$db);
        }
    else
        {
          $test=mysql_query("update count0 set count0=count0+$leileicount,usercount0=usercount0+$leileicount where bannerid=’$id’ and datetime0=’$time0′ and comeid=’$comeid’ and dlzid=’$dlzid’",$db);
        }
    }
}
else
{
//增加新记录
$into_db="insert into count0 (bannerid,datetime0,comeid,dlzid) values (‘$id’,’$time0′,’$comeid’,’$dlzid’)";
$test=mysql_query($into_db,$db);

//独立ip增加新记录
$into_dbip="insert into ipcount0 (bannerid,datetime0,comeid,userip,dlzid) values (‘$id’,’$time0′,’$comeid’,’$userip’,’$dlzid’)";
$testip=mysql_query($into_dbip,$db);
}
mysql_close();
?>

PHP代码规范化

1.
TAB键,相当于4个空格,而不是真实的TAB,可以在编辑器软件中设置(可省略)

2.代码格式:例子:(if, for, while, switch等等)

if ((condition1) || (condition2)) {
    action1;
} elseif ((condition3) && (condition4)) {
    action2;
} else {
    defaultaction;
}

switch (condition) {
    case 1:
        action1;
        break;

    case 2:
        action2;
        break;

    default:
        defaultaction;
        break;

}

if 与后面的小括号,有一个空格,后面的那个小括号与括号里面的代码第一个字母之间,没有空格, ||, && 等数学符号左右,要有空格,右括号与综括号之间,要有空格,如 ){, 并在同一行要注意代码的缩进,缩进是4个空格的TAB

如果if 后面的条件只有一行简单的,可以写在一行里,如:
if ($user_gender == 1) $user_boy = true;

3.$var = foo($bar, $baz, $quux);
   $var = ‘test’;
   变量之间的等于号 = ,左右至少要有一个空格,并把相临的几条语句对齐,如下:
$short         = foo($bar);
$long_variable = foo($baz);

4.自定义的函数

如下例子:
function fooFunction($arg1, $arg2 = ”)
{
    if (condition) {
        statement;
    }
    return $val;
}
function下的第一个综括号{,要在function这一行的下行,function中的代码,要缩进
函数名称规范:函数名中的每个单词,要用英文全称,不会的,用汉语拼音,函数首个单词,要小写,之后的每个单词首字母大写
函数中的变量:有默认值的变量排在所有变量的后面

5.尽量使用 require_once 或include_once 代替require,include

6.PHP代码,要用<?php ?>,不要使用短标记,如:<? ?>

7.变量命名:
变量名称使用小写全称英文字母,并用下划线分开每个单词,不会的,用拼音代替,尽量不使用缩写单词。
如:$login_name, $result_array, $result_str

UBUNTU安装手记

1、将UBUNTU DVD ISO挂载作为本地源:
挂载
sudo mkdir /home/zhaofeng/dvdiso
sudo mount -o loop /media/hda6/ubuntu-6.06.1-dvd-i386.iso /home/zhaofeng/dvdiso
或者修改fstab
sudo gedit /etc/fstab
增加一句
/media/hda6/ubuntu-6.06.1-dvd-i386.iso    /home/zhaofeng/dvdiso    iso9660 ro,loop,auto    0    0

在系统-系统管理-软件属性-添加-自定义
deb file:///home/zhaofeng/dvdiso/ dapper main

这样,本地的DVD源就配好了!

2、使用xp带的字体来进行中文美化?
http://wiki.ubuntu.org.cn/%E4%BD%BF%E7%94%A8XP%E5%AD%97%E4%BD%93%E7%BE%8E%E5%8C%96%E6%B1%89%E5%AD%97

3、安装配置VSFTPD
http://blog.donews.com/letviva/archive/2006/05/06/858300.aspx
http://industry.ccidnet.com/art/3089/20060418/510153_1.html

4、安装flash插件
http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_9_linux.tar.gz
解压,会生成一个叫install_flash_player_7_linux的文件夹。
进入这个文件夹,输入
./flashplayer-installer
安装过程要求输入firefox安装路径,我的是在/usr/lib/mozilla-firefox/

5、安装lampp
tar xvfz xampp-linux-1.5.5a.tar.gz -C /opt
sudo /opt/lampp/lampp start
详细页面请参阅:
http://www.apachefriends.org/en/xampp-linux.html

6、安装VMWARE SERVER
需求:
sudo apt-get install build-essential linux-headers-`uname -r` xinetd gcc-4.0 g++-4.0

详参见:http://wiki.ubuntu.org.cn/VMware_Guide%3A_Installing_VMware_Server_on_Ubuntu_6.06_LTS_amd64
SN序列号:http://hi.baidu.com/tianliezhihen/blog/item/04b14fdf584159134854036e.html