人人网令人惊叹的推荐功能

| | 评论 (1) | TrackBacks (0)

今天登录公司邮箱,发现一封人人网的邮件,标题是"未处理的好友请求,请处理",不禁有些疑惑,之前从未注册过人人网,而且退一步说,即使是注册了,我也绝对不会用公司邮箱注册。打开邮件,更令人惊叹的内容出现了。简洁的正文很简洁,内容就是"他们在人人网被推荐给你了:",下面列出了三个用户,其中有两个用户正是公司的同事,用户名用的是真名,还有一个不是用的真名,头像也不是人的照片,但从用户名判断也可能是另外一个同事。

接触网络这么久,还没见过怎么厉害的"精准"邀请。为了一探究竟,注册了一个用户,注册过程中,搜索公司名称,发现另外的一个同事。注册成功后,查看上面被推荐的几个同事,因为隐私权限的问题,无法查看到很详尽的信息。难道是他们注册用的公司邮箱地址,但应该也不会直接发到我的公司邮件地址邀请我吧,太令人费解了。

阴天的忧郁

| | 评论 (0) | TrackBacks (0)
下午,又是一个阴天

周末的我独自在家

听着蔡琴缓慢而悠远的《机遇》

坐在电脑面前,不知道自己该干什么

早上的一个电话,又再一次印证了我之前曾经体会到的一种感觉

想起了昨晚看过的《The social network》

主人公Mark的成功是我从了解网络以后一直的梦想

但,这个梦想,也可能只是一种欲望

因为,我从来没有为自己所谓的那个梦想而真正付诸实际的努力

和Mark一样,我也喜欢比较私密的生活

在一个人独自待着的时候,他会忙着做他自己想做的事情

而我,只想就这么呆着,安安静静地

而这,似乎就是我从小到大一直以来的一个习惯

无论是在家乡,在学校,在异乡......

窗外,一直黑猫蜷曲在小平房的屋顶上

屋顶平平的地面上,是满地黄黄的落叶

也许,这只猫什么也感觉不到,它只是在美美地睡觉

而我,却感到了孤寂和忧郁

或许,是因为这样阴冷天气,这种静静独处的环境,这样深沉而悠远的音乐

因为,以前每当我有这种感觉的时候

也是和今天这样

但,我应该享受这种感觉

对,也许在我内心深处,真的有为这种感觉留下了一块空间

此刻,我想到的

不仅有我自己

还有我至亲至爱的父母和亲人、真诚待我的朋友......

还有那一幅幅留在记忆深处,类似的画面

我想,每个人都会有这种感觉的时候

只是,现实的生活

给了我们很多热闹和繁复

让我们根本没有时间停留下来

静一静......

其实,我也期望有更多热闹、繁复

但我希望

它们能够给我带来更多的意义......

通过自动更新功能,把Zend Studio 7.1升级到了7.2版本,升级成功后发现了一个严重的问题--Zend Studio针对PHP的代码补全提示功能(Content Assist)无法使用了,不管是当前可用的变量列表提示,还是PHP函数的自动提示都没有了,只有PHP的模板(通过Windows -> Preference->PHP->Editor->Templates 设置)提示。后来在Zend论坛上先后找到了两个遇到同样问题的帖子((Zend Forums • View topic - ZS 7.1 - 7.2 Code Complete Not Working for Native PHP funcs)、(Zend Forums • View topic - Autocomplete brakes on 7.2),终于解决了:

首先按照第一个帖子里提到的,我检查了项目文件夹下面的 .project 和 .buildpath文件,它们分别应该包含"<nature>org.eclipse.php.core.PHPNature</nature>" 和 "<buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>",这两个配置文件应该是在创建PHP Project的时候就生成的,检查没有发现问题。

继续,第二个帖子里有人也提到了检查 .buildpath 文件,还有人回复说他通过删除"<系统盘符>:\Documents and Settings\<当前用户名>\"目录下的"Zend/workspaces/<默认的Workspace名称(一般是Default)>/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.dltk.ui.prefs" 解决了问题,照他的方法试验了一下,居然成功了。

具体的原因应该是升级的过程中这个文件被修改了,但是修改的有问题,删除这个文件后,再重启会发现系统又生成了同名的文件。

PS:Zend Forum真是好地方,这几次遇到的问题都是在上面找到最后的解决办法的,使用Zend 产品的各位同学不妨多关注关注。

PHP 5.3 和 Zend Debugger

| | 评论 (0) | TrackBacks (0)

自从用上了PHP5.3,问题还真是多,自上次出现连接MS SQL Server的问题后,这次在安装 Zend Debugger时又出现了问题。按照Zend官方给出的Zend Debugger安装步骤,从 这里 下载了最新的 5.2版本的Studio Web Debugger,从解压出的ZendDebugger-v5.2-cygwin_nt-i386\5_3_x_nts_comp目录中复制ZendDebugger.dll 到PHP安装文件夹下的ext目录,然后编辑php.ini文件,在文件最后加入一下三行:

zend_extension = "d:/php/ext/ZendDebugger.dll"
zend_debugger.allow_hosts= 127.0.0.1
zend_debugger.expose_remotely=always

然后把dummy.php文件复制到apached的 "DocumentRoot"目录(在http.conf文件中设定),可重启Apache服务后 用phpinfo()显示的页面中并没有Zend Debugger,很明显,安装没有成功。

回过头再仔细看Zend的安装步骤介绍,发现zend_extension这项配置有两种,除了zend_extension以外,还有设置为zend_extension_ts的,分别适用于Non-Thread-Safe和Thread-Safe版的PHP,而我安装的PHP是Thread-Safe版的(通过phpinfo() 页面的Thread Safety选项可以查看到),所以应该用zend_extension_ts,但是我下载的Studio Web Debugger 针对php 5.3版的只有nts版的ZendDebugger.dll (从文件夹名称可以看出-5_3_x_nts_comp).

仔细搜了一下,终于找到了答案,在Zend 论坛里一位Zend 员工明确地回复:"目前还没有针对 Thread-Safe 的PHP 5.3发布相应的Zend Debugger的计划",这个帖子 里,另一位Zend员工针对用户在Thread Safe 版PHP 5.3 安装 Zend Debugger失败的原因做了更详细的解释:

 Zend stopped supporting the thread safe architecture when Microsoft also decided to implement its PHP engine with the fast-cgi architecture which means non-thread-safe.

他建议用户用安装Zend Server(目前已经支持PHP 5.3)--  Zend Server包含的是Non Thread Safe 版的PHP.

相关链接:

Zend论坛 - 安装Zend Debugger 的非常详细的教程: Zend Forums • View topic - Sticky Notes Setting Up Zend Debugger

针对不同平台的最新Zend Debugger 下载列表

PHP 5.3.X 连接MS SQL Server

| | 评论 (0) | TrackBacks (1)

最近做的一个项目需要用PHP连接到MS SQL Server,在公司安装的PHP是5.2版的,Windows平台的PHP Zip安装包解压后的扩展目录(ext)里有自带连接到SQL Server的驱动文件-php_mssql.dll,只需先将PHP目录的ntwdblib.dll拷贝到系统盘下windows/system32,然后修改php.ini,取消;extension=php_mssql.dll 前面的;,重启Apache服务器就可以了。

但是家里用的是WAMP集成安装包,PHP版本是5.3.2,扩展目录里没有php_mssql.dll,而且连ntwdblib.dll也没有,从PHP 5.2分别拷贝这两个文件到扩展目录和系统目录,重启Apache,提示mssql模块和php编译版本不匹配(如下图):


php-mssql-mismatch.PNG


在网上搜索了一下PHP 5.3.X 连接SQL Server的办法,有人也遇到了这个问题 (PHP Unable to Connect to MSSQL),原来PHP 团队在PHP 5.3 中移除了SQL Server的驱动和库,而微软自己开发了针对PHP的SQL驱动(SQL Server Driver for PHP),但是1.0版的不支持 PHP 5.3,1.1版本才支持,但即使用这种办法,也不是官方推荐的原生的支持,如果要用直接支持的办法,可以用ODBC来连接。这位作者对PHP 5.3连接 SQL Server的问题颇有研究,发了一系列的文章来说明问题的来龙去脉(No SQL Server Library for PHP 5.3 Just YetInstalling PHP 5.3 on Microsoft IISFinally a working SQL Server Driver for PHP 5.3Installing FastCGI and PHP for IIS 6.0)。 Finally a working SQL Server Driver for PHP 5.3 这篇文章的留言中有人给出了 他自己编译的PHP 5.3.0 连接 MS SQL Server所需的 php_mssql.dll 文件,但是这个文件之能用于VC9 PHP(何为VC9 PHP,请看补充内容)。

SQL Server in PHP 5.3  这篇帖子的回复里,有人提到PHP 5.3.1里面有 php_mssql.dll,于是到PHP 官方网站,却只提供PHP 5.2和最新的PHP 5.3.2下载,最后还是在WAMP网站提供的 PHP Addon中找到了PHP 5.3.1,拷贝mssql扩展文件到WAMP 的PHP扩展目录,问题解决!

补充:关于VC9 和VC6 版本的PHP

If you are using PHP with Apache 1 or Apache2 from apache.org you need to use the VC6 versions of PHP

If you are using PHP with IIS you should use the VC9 versions of PHP

VC6 Versions are compiled with the legacy Visual Studio 6 compiler

VC9 Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability. The VC9 versions require you to have the Microsoft 2008 C++ Runtime (x86) or the Microsoft 2008 C++ Runtime (x64) installed

Do NOT use VC9 version with apache.org binaries


相关链接:

SQL Server in PHP 5.3  

PHP: Installation of extensions on Windows - Manual


鼠年最后一天

| | 评论 (2) | TrackBacks (0)

一个人的年夜饭

一个人看春节联欢晚会

一个人的鼠年岁末除夕

一个人在成都过新年

祝福家乡的亲人、朋友春节快乐

牛年是本命年,好好过

用PHP和Javascript实现登陆验证

| | 评论 (0) | TrackBacks (0)

登陆验证应该是Web程序员必须掌握的最基本的东西了,乍看起来似乎很简单,但随着学习相关技术的深入,考虑到安全性,用户体验等方面的要求,其实不简单,下面就以我做的一个小项目(回味乐食品网站)后台登陆页面为例来说明。

简单的登陆页面:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="../css/stylesheet.css" type="text/css" media="screen,print"> <title>回味乐食品厂-用户登录</title> </head> <body> <form name="login" action="" method="post" style="margin-top:80px">
<table align="center">
<tr>
<td>用户名:</td>
<td><input type="text" name="user" id="user"></td> <td class="resetMsg" id="userMsg" /></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password" id="password"></td> <td class="resetMsg" id="psdMsg" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="login" id="login" value="登陆" align="left" style="width:60" onClick="javascript:return CheckTxt();" /></td> </tr>
</table>
</form> </body> </html>

页面的表单有两个输入框,分别输入用户名和密码,id为"login"的提交按钮在提交时触发Javascript方法CheckTxt()验证用户输入。由于Javascript方法是在客户端实现,所以验证仅限于对输入内容是否为空的判断,为了更好的用户体验,出错提示不采用弹出对话框的方式,而是把提示内容输出到输入框右边的<td>内容框当中(id分别为userMsg和psdMsg)。下面是列出了所有可能的情况和出错时输出的提示:

  1. user为空,password也为空:userMsg和psdMsg分别给出"缺少用户名"和"缺少密码"的提示;
  2. user为空,password不为空:userMsg给出"缺少用户名"的提示,同时psdMsg的提示为空;
  3. user不为空,password为空:userMsg的提示为空,psdMsg给出"缺少密码" 的提示;
  4. user和password均不为空:userMsg和psdMsg的提示都为空。

为了让验证更高效,在程序具体实现的时候要先考虑出错的情况,也就是前面三种,出现错误就立即终止并返回false,这样就不必再往下执行判断了。

Javascript方法CheckTxt():

<script type="text/javascript">
function CheckTxt()
{
var user = document.getElementById("user").value
var password = document.getElementById("password").value
if( user == "") //用户名为空
{
document.getElementById("userMsg").innerHTML ="缺少用户名";
document.getElementById("user").focus();
if(password == "") //用户名为空且密码为空
{
document.getElementById("psdMsg").innerHTML = "缺少密码";
} else //用户名为空,密码不为空
{
document.getElementById("password").value ="";
document.getElementById("psdMsg").innerHTML ="";
}
return false;
} else if(password == "") //用户名不为空,密码为空
{
document.getElementById("userMsg").innerHTML ="";
document.getElementById("psdMsg").innerHTML = "缺少密码";
document.getElementById("password").focus();
return false;
}
else //用户名和密码都不为空
{
return true;
}
}
</script>

上面提到,在出错一旦发生,就需要给出出错提示从方法中返回,再看上面代码,为什么在用户名为空的情况,没有立即返回false,还需要再判断密码是否为空呢?仔细想一下就会清楚,如果在只判断了用户名为空的情况下就立即返回false,那么在用户名和密码都为空的情况下页面只会提示"缺少用户名",不够全面和准确。如果你再仔细看看淘宝网Gmail的登陆页面,就会更明白了。

还要注意的一个细节是在判断为空后应该设置焦点,以方便用户输入。

完成了客户端的验证,下面就要在服务器端进行验证了。为了更准确地给出出错信息,在查询MySQL数据库中的记录时,查询条件可以只指定用户名,这样就能够判断数据库中是否有用户输入的用户,如果没有,就给出"没有此用户"的提示,如果有,则进一步把用户输入密码和数据库中的记录进行对比。为了防止SQL注入攻击,在查询和比对的时候需要用mysql_real_escape_string()方法对表单提交的字段的内容中的特殊字符进行转义。

PHP验证代码清单:

<?php

//处理未登陆时访问此页面的情况
if(is_null($_SESSION['login'])){

//处理表单提交后的情况
if(isset($_POST["user"])){
$user = $_POST["user"];
$password = $_POST["password"];
require("../include/dbconnect.txt");
db_connect();
//用mysql_real_escape_string() 函数对用户输入进行转义,防止SQL注入攻击
$queryUser = "select * from users where user ='" .mysql_real_escape_string($user)."'";
$result = mysql_query($queryUser);
$row = mysql_fetch_array($result);
if(!$row) { //如果用户名不存在
print '<script type="text/javascript">';
print "document.getElementById('userMsg').innerHTML ='用户名不存在'\n";
print "document.getElementById('user').focus()";
print '</script>';
} else { //如果存在,对比数据库中的密码和用户输入的密码(先进行转义 )
if($row["password"] == mysql_real_escape_string($password)) {
if(is_null($_SESSION["url"])) {
print '<script type="text/javascript">';
print 'self.location.href= "index.php"';
print '</script>';
} else { //未登陆的情况下从"其他页面"redirect到此登陆页面, 登陆成功后页面直接跳转到"其他页面",而不是index.php
print '<script type="text/javascript">';
print "self.location.href='".$_SESSION["url"]."'";
print '</script>';
}
$_SESSION["login"] = 1;
} else {
print '<script type="text/javascript">';
print "document.getElementById('psdMsg').innerHTML = '密码不匹配'\n"
print "document.getElementById('user').value ='".$user."'\n";
print "document.getElementById('password').focus()";
print '</script>';
}
}
mysql_close();

}
} else {
print '<script type="text/javascript">';
print "window.onload = function()\n";
print "{";
print "document.getElementById('user').focus()\n";
print "}";
print '</script>';
//登陆后再访问此页面的情况,清除会话$_SESSION['login']
unset($_SESSION['login']);
unset($_SESSION['url']);
}
?>

这个例子是整个网站的一部分,所以以上这段代码有几处需要注意的地方:is_null($_SESSION['login'])是对SESSION变量$_SESSION['login']进行判断,如果用户在未登陆的情况下访问此页面(听着似乎有些矛盾,呵呵),则值为Null。用户在已登录的情况下再访问登陆页面,会清除会话$_SESSION['login']。

另外,在PHP代码中当中调用Javascript需注意如果Javascript代码语句有多行, 在每行结束时要加上\n,而且要被包含在""中,因为''在PHP不能对\n进行转义。

实例在这里:http://www.zhouhongquan.com/projects/hwlsp/admin/login.php

8月8日,北京第29届奥运会开幕式当天,真的有种过年般高兴的感觉,也很期待当晚的开幕式,下午4点多开始就守在电视旁,因为奥运开始前的文艺演出在5点45就开始了,可惜等到接近6点,却没有一个频道直播。

接近晚上8点,开幕式直播开始,介绍领导人的时候镜头中还出现了前任国家主席Jiang Zemin,不过毕竟申奥成功还是在他任内实现的,出席开幕式也是理所当然。声光电构成的特殊的倒计时过程让人印象深刻,特别是加入了中国元素的10-1的倒数。接下来首先让我非常感动的是小女孩林秒可演唱的《歌唱祖国》,这首歌经过"演绎后"的歌唱效果给人一种特别舒服的感觉,情感的舒展更为缓慢和悠远,沁人心扉,在听歌曲和升国旗的过程中,激动的几乎要落泪,和上次纪念5.12地震的默哀仪式时殇痛的流泪不同,这次我心中有种强烈的自豪感,为身为中国人,身为中华民族一份子。

表演的整个前半段突出了中华文化的灿烂和文明,四大发明,击缶、京剧、武术等等都囊括其中,其中又以那副既古代,又现代的"卷轴画"最让我印象深刻,从远古到后面各个历史时期的许多中华文化的代表在极为绚丽和出色的现代声光电效果下一一呈现,但在观看的过程中不知怎的,总觉得场景的表现差了那么一点,切远景的时候角度不是多方位的,而有的场景又只用了近景,看不到长景的画面。后面表现中国现代的部分和前面相比,要稍逊一些,没有特别有代表性的内容。最后李宁手拿火炬往上升和在鸟巢顶部的画卷上奔跑的时候,从画面上看火炬的火焰几度消失和减小到很小的样子,就像要熄灭了一样,看着真叫人揪心,还好后来火焰又燃起,也顺利地点燃了主火炬。另外,李宁在奔跑的过程中曾在中间半段的时候跑在了画卷的前面,应该是一个失误吧。
-------------------------------------------------------------------------------
开幕式结束后看张艺谋在新闻发布会上也谈到说寻找一个中国当代、今天的文化符号几乎很难,所以表现现代的部分并不像前面展现古代的文化一样那么具体。

在中央电视台播放的开幕式幕后的镜头中,李宁在点完火炬下来后说由于风太大,为了不让火炬熄灭,他还在奔跑的时候不断地用手转动,也着实担心了一把。

上网的时候,首先从GoogleReader里看到说还有BBC和NBC版的开幕式直播,画面和CCTV的还不一样,之前我还一直以为其他电视台的信号源都采用的是CCTV的呢。后来又看到天涯上讨论开幕式的导播问题,说很多画面在CCTV当中都没出现(也印证了我那天的感觉),NBC版才真正表现出了开幕式恢宏、绚丽的场景。到底是怎么回事,现在似乎还没有一个非常准确地说法。到今天,才终于把BBC和NBC两个版本的开幕式都下载下来,地址是这里这里,大小分别是2.54G和4.92G,NBC的是高清晰版,但有些遗憾的是由于电脑的配置比较低(特别是CPU),播放的时候声音和画面出现了不同步的现象,但画面效果的确非常好,场面也相当震撼,的确比央视版的要好很多。从我看到的这两个版本的开幕式来看,NBC和BBC在鸟巢内都应该有自己的机位,BOB(BOB是由北京奥组委和国际奥委会所属的奥林匹克广播服务公司共同组建,是一家中外合作经营性质、专事于奥运会电视转播业务的企业,在北京2008年奥运会和残奥会期间,它将负责制作和提供用于为世界各国广播电视台播出的有关奥运会赛事和重要活动的国际电视与广播公共信号,并建设、运营国际广播中心和其他场馆的转播设施,为奥运会转播权持有者提供与转播事项有关的服务等)也应该为他们提供了大部分信号,但肯定也有他们自己编辑的内容,而CCTV版之所以遭到骂声,也就是因为加入了太多"自己"的内容。关于这方面的内容,搜索一下"NBC版开幕式"就会有很多介绍。但要指出的是,论坛中贴出的有些"没看到的画面"很多是用相机在现场静态拍摄的,并非电视直播的画面,NBC和其他除CCTV以外其他电视台的画面中也是没有的。

这两天又报道出了两个造假事件,一个是开幕式当天那29个"脚印"焰火,直播的时候前28个用的是事先就合成和制作好的效果图。第二件是小女孩林妙可的假唱,声音还是另外一个女孩儿。焰火"造假"确有客观原因,而"假唱"确实有些不应该。
在虚拟机上安装好Fedora后,就进入搭建LAMP系统(IBM developerWorks 中国 网站上有关于LAMP的介绍)的核心阶段:安装XAMPP。从apache friends上下载适用于Linux系统的XAMPP的发行版 ,安装过程在网站上有详细介绍 ,很明了,但在安装的过程中还是出现了意外:当使用 /opt/lampp/lampp start 运行XAMPP时,出现如下提示:

cat: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
/bin/sh: error while loading shared libraries: libdl.so.2: cannot open shared object file: No such file or directory
Starting XAMPP for Linux ...
/bin/bash: error while loading shared libraries: libdl.so.2: cannot open shared object file: No such file or directory
/bin/bash: error while loading shared libraries: libdl.so.2: cannot open shared object file: No such file or directory
/bin/bash: error while loading shared libraries: libdl.so.2: cannot open shared object file: No such file or directory
/bin/bash: error while loading shared libraries: libdl.so.2: cannot open shared object file: No such file or directory
/bin/bash: error while loading shared libraries: libdl.so.2: cannot open shared object file: No such file or directory
XAMPP for Linux started.
在Firefox中访问http://localhost 的时候也无法看到XAMPP的开始页面,千辛万苦在网上找到遇到同样错误并解决了的方法
 vi /opt/lampp/lampp
找到:export LD_ASSUME_KERNEL=2.2.5
改为:export LD_ASSUME_KERNEL=2.8.0
vi 编辑器有其特殊的使用方法,这里有比较详尽的介绍,就不再赘述。 事实证明,前面的办法还真行,但具体是什么原因就不清楚了。

现在,就可以通过http://localhost 来访问XAMPP的起始页面了,LAMP系统也就搭建成功了

最近开始熟悉LAMP(即Linux-Apache-MySQL-PHP)WEB开发框架,从安装Fedora开始,先从Fedora Project 下载最新的Fedora 9安装DVD的 ISO镜像文件 。为了方便起见,我选择在虚拟机中安装Fedora,最著名的两大虚拟机软件就是微软的Microsoft Virtual PC (最新版2007,另外SP1补丁竟然比主程序的安装文件还略大,微软的补丁真可谓是补到家了,呵呵)和VMware ,其实Virtual PC 最开始并不是微软自己的项目,而是出自一个叫做Connectix的公司,后来微软收购了它 。以前听微软TechNet的课时经常看到讲师在演示操作的时候用到Virtual PC,看着挺不错的,现在轮到自己尝试,发现简单得有些简陋,在创建虚拟机的时候可以选择安装的客户机操作系统(guest operating system)类型,提供的选项都是微软阵营的,有Win98、Win2000、WinXP、Win2003 等,在虚拟的BIOS中选择从光驱启动,把安装光盘放进光驱,或者在Virtual PC的"CD"菜单的"Capture ISO Image"选择要安装的操作系统的ISO文件,按照提示,就和平时在PC上安装系统一样。可惜的是它对Linux 的支持一点也不好,在安装Unbuntu的过程中,我就遇到了显示的问题,后来在网上搜索,看到有很多人也遇到同样的问题,但解决起来似乎不容易,且版本不同也有细微差别,后来还是放弃了,把目光投向VMware。

和Virtual PC 2007不同,VMware Workstation的安装文件就有300多M,最新版的VMware 6.0.4 build:93057,从官方网站也只能下载到试用版的。VMware对Linux的支持不错,在新建虚拟机的过程中有Microsoft Windows、Linux、Novell Netware、Sun Solaris多个选项可供选择,这些大项下面还有许多更为细致的小项可供选择。对虚拟机占用的内存和硬盘空间应根据实际情况做合理设置,我要安装的Fedora 9 由于是最新版的桌面系统,对内存大小和硬盘空间都有比较高的要求,所以我设置的值分别是512M和10G。在虚拟机的属性中把CD-ROM设置为"Using ISO image",选择要安装的操作系统的ISO文件。安装过程比较顺利,即使以前没用过Linux也能够比较轻松的进行,设置的东西不多,按提示来就可以了。

系统安装好了,不过有两个地方让人感觉不太好:每次从Fedora切换回Windows时都要按Ctrl+Alt,比较麻烦;显示分辨率只能设置为800*600,将虚拟机全屏时内容只占据屏幕正中央的大部分,四边还离屏幕周边还有些距离,就像EeePC的屏幕。原本只是因为在安装好的Fedora客户机和宿主机(WinXP SP3)之间无法复制文件而安装VMware Tools,没想到安装好VMware Tools之后上面两个问题都得到解决,的确是意外的惊喜:鼠标在Fedora用户界面和WindowsXP宿主机之间可以自由"出入",在Fedora中在窗口在最大化后所有界面充满了整个屏幕,就像在本机真实安装的一样。

安装VMware Tools的过程我也是在网上搜到的,具体过程如下:

  1. 安装虚拟机的时候网卡设置为本机的物理网卡。
  2. 启动虚拟机,选择VMware Tools的VM菜单的Install VMware Tools选项,注意状态栏的提示。
  3. 选择VMware Tools的VM菜单的Removable Devices子项中的CD-ROM项,点击Edit,在Use ISO image下点击Browse,在打开的对话框中选择VMware程序文件目录下的Linux.iso。
  4. 进入Fedora命令行模式(纯命令行模式我也不知道咋进,我是在用户界面下的终端模式里输入命令的,另:一定要用root身份登陆),输入 mount /dev/cdrom /mnt/cdrom,然后输入 cd/mnt/cdrom。
  5. 打开cdrom文件夹,这时应该可以看到有两个文件,一个是VMwareTools*.rpm(*部分根据VMware的版本不同而有所差异,我用的是VMware 6.0.4 build93057,在这里文件名为VMwareTools-6.0.4-93507.i386.rpm),在终端中输入rpm -ivh VMwareTools*.rpm;还有一个文件是VMwareTools*.tar.gz (和前面的文件名类似),依次输入以下命令 cp VMwareTools*.tar.gz /tmp、 cd /tmp、 tar xzvf VMware-tools*.tar.gz、cd vmware-tools-distrib,打开vmware-tools-distrib文件夹,里面会有一个vmware-install.pl 文件,输入./vmware-install.pl,在接下来安装过程中的提示中一直按回车。
  6. 在 /mnt文件夹下,会发现此时多了一个hgfs的文件夹,表明VMware Tools安装成功了。
  7. 最后一步,设置文件夹共享,VM菜单里进行,选择Setting子项,再选择Options,在窗体的左半部分有一个Shared Folders选项,默认情况下是Disabled,选择Always enabled,在下面的Folders中添加要共享的文件夹目录,这样,客户机(Fedora)和宿主机(WinXP)都可以访问共享目录下的文件了,可以用在Windows中拷贝相应文件到Fedora。最后,用umount /mnt/cdrom卸载光驱。

Ads

和我聊天

Powered by Movable Type 4.1