分享
 
 
 

用PHP增强UNIX/LINUX网站功能

王朝php·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

如果你是网络开发和维护人员,对ASP应该相当熟悉了。自从微软推出ASP技术后,由于其

在建立动态网站方面的强大功能,很快得到了广泛的应用。但由于众所周知的原因,ASP只能用于

微软自己的操作系统和服务器系统。目前基于UNIX的网络系统仍然占据大多数;而LINUX操

作系统由于其免费提供和开放源代码很受欢迎,其市场占有率迅速上升,据说已达到了17%左右;

APACHE服务器始终是网络站点的主流服务器软件。PHP的出现和逐渐完善,对基于

UNIX/LINUX系统的网络开发人员来说,无疑是个好消息:我们不用再只能羡慕ASP的

易用性而遗憾PERL/C的复杂性了!

一PHP特点概述

PHP全称为Personal Home Page,于1995开始发行使用,到1998年成为一个成熟的软

件产品。目前最新的版本为4.0,而常用的版本为3.0。PHP是用C语言编写而成,可运行于

UNIX/LINUX和WIN9X/NT下。

PHP,是一种跨平台的服务器端嵌入式脚本技术。PHP页面是一种文本文件,

是在普通HTML页面文件中嵌入PHP脚本语句,由服务器解释和翻译成普通的HTML文

件,然后传送给客户端浏览器,这一点和ASP一样。

PHP大量借用了C、JAVA、和PERL语言的语法,并加入了各种PHP自

己的特征,使WEB开发者能够写出快速的动态页面。

PHP脚本语句段以“<?”为开始,以“?>”为结束。“<?”和“?>”之间的脚本

语句由服务器软件调用PHP脚本解释引擎解释后替换为普通的HTML脚本。

笔者认为,PHP最强大也最有代表性的特点在于它的数据库层,它内置了对很多

数据库的支持,而不再需要特殊扩充,使得编写基于数据库的网页变得非常简单。目前所支持的数据库

有Oracle、Adabas D、Sybase、FilePro、mSQL、Velocis、MySQL、Informix、Solid、dBase、

ODBC、Unix、dbm、PostgreSQL、MS SQL SERVER等。针对每个数据库都有一组函数用于数据库访问和操

作,如对dBase数据库有dbase_create、dbase_open、dbase_close、dbase_pack、dbase_add_record、

dbase_delete_record、dbase_get_record、dbase_numfields、dbase_numrecords等函数,对MySQL有

mysql_close、mysql_connect、mysql_create_db、mysql_data_seek、mysql_dbname、mysql_db_query

等函数。

同时,PHP还提供了一组图像函数,可以动态生成gif格式的图像数据流并输出到

客户端。

此外,PHP还提供了对Socket、EMail、PDF文件、HIS(Hyperwave Information

Server)、IMAP、LDAP(Lightweight Directory Access Protocol)、文件上载、NIS等功能的支持。

二搭建PHP应用系统平台

PHP可以运行于UNIX/LINUX+APACHE服务器系统或WIN9X+PWS服务器系统或WINNT+IIS服务器系统。

下面以PWIN98+PWS4.0为例,搭建一个PHP学习和开发环境。

(一)下载PHP3 For WIN9X/NT

到http://www.php.net,选择downloads,然后选择Download the PHP source code and Windows

distribution,选择一个下载的站点,然后选择 3.0.11 Win32 binary 就可以了。如果觉得麻烦,就

用http://www.php.net/distributions/php-3.0.11-win32.zip吧。下载文件名为php-3.0.11-win32.zip,

大小为1.68M。

(二)安装PHP3 For WIN9X/NT

安装PHP3 For WIN9X/NT很简单,只要将php-3.0.11-win32.zip解压缩到一个目录中即可。在下面的

讨论中,假设PHP3安装在C:\Program Files\PHP3目录中。

(三)配置PHP3 For WIN9X/NT

配置PHP3 For WIN9X/NT,就是要修改系统设置,使PWS4.0能利用PHP3脚本解释引擎解释PHP页面。

1、把C:\Program Files\PHP3目录里的文件php3-dist.ini拷到windows98安装目录(如C:\PWIN98)

下,并改名为php3.ini。

2、编辑php3.ini文件

编辑php3.ini文件,将“Paths and Directories”下的“Extension_dir”项改为“Extension_dir

=C:\Program Files\PHP3”;将“browscap”下的“browscap”项改为“browscap=C:\PWIN98\SYSTEMinetsrv\browscap.ini”(PWS4.0安装目录下文件);在注册表的HKEY_LOCAL_MACHINE\SystemCurrentControlSet\Services\W3Svc\Parameters\ScriptMap的主键下,增加一个字符串值,其名称为

“.php3”(PHP3文件的扩展名),其值为“C:\Program Files\PHP3\php.exe %s %s”。

这样,在重新启动PWS服务器软件后,PWS4.0就可以利用PHP3脚本解释引擎解释PHP页面了。

三PHP脚本语法简介

在PHP3文件中,PHP脚本语句段以“<?”为开始,以“?>”为结束,用“<?”和“?>”括起来的部分就

是PHP程序段。

PHP语法和C、Perl的语法很相似,并主要来源于C语言,如控制流语句与C几乎完全一样、变量之间的

运算符与C的类似、函数定义和调用与C的类似等。

PHP的变量名前面必须有一个$号,如$Var1、$Var2。PHP的变量作用域规定也类似于C,即缺省认为主函

数中的变量是全局变量,而函数中的变量都是局部变量。

在PHP中,echo和printf函数用来向HTML页面中输出HTML内容,其中echo输出无格式字符串,printf输

出格式化的字符串。如echo("<br>这个一个PHP页面<hr>")和printf("%s,%d",str1,int1)。

如果熟悉C语言语法,学习PHP脚本语法应该不会太难。

四建立自己的简单PHP页面

所谓的PHP页面就是在普通的HTML页面文件中插入一些特殊的脚本语言并以扩展名PHP保

存后的页面文件,所以可以很容易地建立一个自己的简单的PHP页面。

下面是一个简单的PHP页面文件( test01.php3),应该不难理解。

<!-- test01.php3 -->

<html>

<head>

<title>一个简单的PHP3页面</title>

</head>

<body>

<p><h1>

<? echo("PHP脚本解释引擎已经开始为您工作了!<hr>"); ?>

<h1>下面应出现4行语句,字体大小从4到7</h1>

<? for($i = 4;$i<=7;$i++){ ?>

<br><font size = <? printf("%d",$i) ?>>这行语句的字体大小为

<? printf("%d",$i);} ?></font>

</p>

</body>

</html>

其中,语句 <? printf("%d",$i); ?> 是将变量 i 的值输出到HTML文件中。

由上可见,可以先制作一个普通的HTML页面文件,然后在需要的地方插入PHP脚本语言即可.

关键是熟练应用PHP脚本语句.

该页面虽然简单,却可以帮助熟悉和理解PHP语法.可以用浏览器查看运行效果,再用其查看源代

码的功能看一下源代码,可以看对PHP页面解释后的HTML文件.注意必须用http的方式访问PHP页面,

不能象HTML页面文件那样双击文件名以文件方式浏览.如在笔者的计算机上的访问方式为

http://wangfajun/test01.php3,因为PHP页面需要PWS等服务器软件进行解释。

四获取用户请求信息

要制作动态站点页面,获取用户请求信息是必不可少的。PHP页面可以利用这些信息作为某些应用

(如商业订单信息)的依据,并对申请者的申请要求作出反馈。

在ASP页面中,可以利用其内建对象Request获取访问者的申请信息。而在PHP页面中,可以以读取

数组的方式获取访问者的申请信息如表单信息(Form Field)、查询信息(QueryString)等。请求页

面中以POST方式发送的请求信息可以以$HTTP_POST_VARS["ItemName"]的方式获取,以GET方式发送的请

求信息可以以$HTTP_GET_VARS["ItemName"]的方式获取,Cookies信息可以以$HTTP_COOKIE_VARS[

"ItemName"]的方式获取。一般表单信息是以POST方式发送的,可以以$HTTP_POST_VARS["ItemName"]的

方式获取;查询信息是以GET方式发送的,可以以$HTTP_GET_VARS["ItemName"]的方式获取。

(一)由一个HTML或PHP3页面请求另一个PHP3页面处理

在下面的这个例子中,读者会员资格注册申请页面要求申请者填写其姓名全称、身份证号码、

EMail地址。在收到读者申请后通知其注册成功。

先做一个读者会员资格注册申请页面,可以是HTML页面或PHP页面.这应该不成问题.

<!-- apply.htm -->

<html>

<head>

<title>读者会员资格注册申请</title>

</head>

<body>

<H2>读者会员资格注册申请</H2>

<form method="post" action="test02.php3">

<p>

姓名全称: <input name="FullName" SIZE="20" value="姓名全称">

<p>

身份证号码: <input name="UniversalID" SIZE="15" value="888888888888888">

<p>

电子邮箱: <input name="Email" value="mailbox@yourcompany.com">

<p><input type=submit value="提交申请"><input type=reset value="重新填写">

</form>

</body>

</html>

在申请页面中,所有的申请数据均填写在Form元素中,并且在Form的Action中指定处理

申请的页面为test02.php3。当收到申请时,对应项目的数据可以由$HTTP_POST_VARS["项目名称"]

来获得,其中"项目名称"为Form元素的名称,如"姓名全称"对应"FullName" ,如"身份证号码"对

应"UniversalID" 。现在利用这些信息来制作一个注册成功的通知页面test02.php3。

<!-- test02.php3 -->

<html>

<head>

<title>读者会员资格注册申请成功</title>

</head>

<body>

<p align="center"><H2><font color="green">读者会员资格注册申请成功

</font></H2>

<p>亲爱的<? printf("%s",$HTTP_POST_VARS["FullName"]) ?>读者:<br>

我们已经收到你的申请,并接受你的申请.你已经成为我部正式读者会员.<br>

你的读者号为CN<? printf("%s",$HTTP_POST_VARS["UniversalID"]) ?>。我们将通过你的电子信箱

<? printf("%s",$HTTP_POST_VARS["Email"]) ?>来正式通知你.此后我部举行读者沙龙活动的时间

和地点也将通过该信箱通知你.

</body>

</html>

现在用浏览器打开申请页面apply.htm,填入对应数据后提交申请,查看反馈效果,再用浏览器

的查看源代码的功能看一下源代码,可以看对PHP页面解释后的HTML文件.

(二)由一个PHP3页面请求同一个PHP3页面处理

下面的另一个例子中,login.php3 提供了一个用户登录页面,要求用户输入登录帐号和密码,

然后再通过Form的Action属性将表格发送给自己进行处理.在 login.php3 中,将根据帐号和密码

是否为空来判断是输入页面还是反馈页面,并给予不同的提示,若未输入帐号或密码则提示“用户

登录,请输入用户帐号和密码",否则显示用户帐号和密码。

<!-- login.php3 -->

<html>

<head>

<title>用户登录</title>

</head>

<body>

<? file://帐号或密码为空,提示用户登录输入用户帐号和密码

if(Empty($HTTP_POST_VARS["CustomerID" ] ) ¦¦

Empty($HTTP_POST_VARS["Password" ] ))

{

?>

<p align=center><h2>用户登录,请输入用户帐号和密码</h2></p><hr>

<form method="post" action="login.php3">

<p>

用户帐号: <input name="CustomerID" value="">

<p>

用户密码: <input name="Password" value="">

<p><input type=submit value="开始登录"><input type=reset value="重新登录">

</form>

<?

}

else file://已输入用户帐号和密码,则显示用户帐号和密码

{

printf("<p><h2>用户%s登录成功,密码为%s。</h2></p>",$HTTP_POST_VARS[ "CustomerID" ],

$HTTP_POST_VARS[ "Password" ]);

}

?>

</body>

</html>

(三)在PHP3页面中获取查询参数信息

当用户以 xxxxx.php3?ParaName = ParaValue 的方式发出查询请求时,xxxxx.php3 可以

从$HTTP_GET_VARS[ "ParaName"] 中获取用户提交的查询参数ParaName的信息ParaValue,还可

以从count($HTTP_GET_VARS)得知用户请求参数的个数并进行相应的处理。

当用户以 query.php3?CustomerID=7777 的方式发出查询请求时,query.php3 可以从

$HTTP_GET_VARS[ "CustomerID" ] 中取得查询参数 CustomerID的值为 7777,

count($HTTP_GET_VARS) 为 1.

当用户以 query.php3?CustomerID=7777&Password=DogIsDog 的方式发出查询请求时

,query.php3 可以从$HTTP_GET_VARS[ "CustomerID" ] 中取得查询参数 CustomerID 的值为

7777,从$HTTP_GET_VARS[ "Password" ] 中取得查询参数 Password的值为 DogIsDog ,

count($HTTP_GET_VARS) 为 2。

下面的例子(query.php3)用于获取用户指定的查询参数,并显示出来反馈给用户。当以

query.php3?CustomerID=1111&StartDate=1999.01.01&EndDate=1999.06.30的方式发出请求时,

得到的结果为:

您指定了3个查询参数如下:

第1个参数CustomerID的值为:1111

第2个参数StartDate的值为:1999.01.01

第3个参数EndDate的值为:1999.06.30

<!-- query.php3 -->

<html>

<head>

<title>查询参数处理</title>

</head>

<body>

<?

$QueryCount = count($HTTP_GET_VARS);//查询参数个数

printf("<p><H2>您指定了%d个查询参数如下:</H2>",$QueryCount);//显示查询参数个数

file://列举各个查询参数及其值

for( $intIndex = 0 ;list( $key, $val ) = each( $HTTP_GET_VARS ); $intIndex++ )

{

printf("<p><H2>第%d个参数%s的值为:%s</H2>", $intIndex+1, $key, $val);

}

?>

</body>

</html>

(四)、获取用户的Cookies信息

Cookies 可以服务器和客户端之间双向传递,它记录了特定用户的某些信息.在PHP

中可利用$HTTP_COOKIE_VARS["CookieItemName"]获取用户的Cookies信息。下面语句可用来显

示用户的所有Cookies信息:

<?

$QueryCount = count($HTTP_COOKIE_VARS);//Cookie数目

printf("<p><H2>您有%d条Cookies信息如下:</H2>",$QueryCount);//显示Cookie数目

file://列举各个Cookie及其值

for( $intIndex = 0 ;list( $key, $val ) = each( $HTTP_COOKIE_VARS ); $intIndex++ )

{

printf("<p><H2>第%d条Cookie(%s)的值为:%s</H2>", $intIndex+1, $key, $val);

}

?>

(五)、获取服务器环境信息

在PHP中,服务器环境信息以一组全局变量的形式给出,以供PHP脚本程序访问。

常用的服务器环境变量信息有:

$GATEWAY_INTERFA

CE:网关界面如CGI/1.1

$HTTP_ACCEPT:客户端可接受的MIME类型列表如*/*

$HTTP_ACCEPT_LANGUAGE:服务器采用的语言,"en"表示英文,"zh-cn"表示简体中文

$HTTP_HOST:HTTP服务器名称

$HTTP_USER_AGENT:发出请求的客户浏览器类型,根据用户请求信息和browscap.ini来识别,

如Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)

$LOCAL_ADDR:本机服务器名称

$PATH_TRANSLATED:脚本文件的文件全名(含实际路径),如

C:\Inetpub\wwwroot\php3\query.php3

$REMOTE_ADDR:发出请求的客户端机器的IP地址

$REMOTE_HOST:发出请求的客户端机器的名称

$REQUEST_METHOD:发出请求的方法(Post/Get/Head)

$SCRIPT_NAME:被调用的脚本文件的路径及文件名称如/php3/query.php3

$SERVER_NAME:服务器的名称或IP地址

$SERVER_PORT:HTTP服务端口号,一般为 80.

$HTTP_REFERER:客户端发出CGI程序请求的页面的URL

$SERVER_PROTOCOL:服务器软件所用的协议如HTTP/1.1

$SERVER_SOFTWARE:服务器软件的名称及版本如Microsoft-IIS/4.0

五向用户发送信息

可以利用PHP提供的函数很灵活地控制向客户端发送的信息的内容和方式.例如可以动态设置反馈

信息、设置客户的Cookie、页面重新定位等等。

(一)、利用 echo、printf等PHP函数控制发送的信息内容

函数 echo、printf 可以向发往客户端浏览器的HTML文件中直接输出内容。

在下面的例子中,selecolr.php3 要求用户输入一个颜色名称,用户确认后将用户申请发

往同一个页面selecolr.php3,然后用用户指定的颜色将颜色名称显示出来.

<!-- selecolr.php3 !>

<html>

<head>

<title>选择颜色</title>

</head>

<body>

<?

if( Empty( $HTTP_POST_VARS[ "ColorName" ] ) )

{//未输入颜色名称,提示输入颜色名称

echo("<H4>你只需选择颜色名称,我来显示</H4>");

?>

<form method="post" action="selecolr.php3">

<p>

颜色名称: <input name="ColorName" value="red">

<p><input type=submit value="显示吧"><input type=reset value="想重选">

</form>

<?

}

else//已输入颜色名称,用指定颜色来显示颜色名称

printf("<H2>你选择的颜色是<font color =%s>%s</font></H2>",

$HTTP_POST_VARS[ "ColorName" ],$HTTP_POST_VARS[ "ColorName" ]);

?>

</body>

</html>

(二)、利用 header 函数进行URL页面重新定位

假如由于业务上的原因,你的站点的域名或IP地址发生了变化,就象Borland变成了

Inprise一样,老顾客在用原来的域名访问时,可以用 header 函数直接将其引导到新的

站点上去;假如要求用户在访问本页面前必须先访问另外一个页面,也可用 header 函数

直接将其引导到应该去的页面上去,而不是发出用户无权访问该页面的信息.

值得注意的是,必须在向客户端发送任何信息前使用 header 函数,否则会引起错误.

一般应该在页面的第一条语句将用户引导另一个URL。

在下面的例子中,若用户调用本页面,则将其引导到另一个页面 selecolr.php3.

<?

file://页面重新定位到selecolr.php3,必须用exit结束页面处理过程

header("Location: selecolr.php3");exit;

?>

<!-- redirect.php3 !>

<html>

<head>

<title>重新定向</title>

</head>

<body>

<p> 你不可能进入到本页面,否则就是我的失败.

</body>

</html>

(三)、利用 header 函数改变页面内容解释方法

在HTML页面代码中,经常会看见下面一个句子

<meta http-equiv="Content-Type" content="text/html">

其中,它用于指定HTML页面被浏览器解释的方式。当 content="text/html"时,浏览器

将代码解释为普通HTML页面并显示给用户;当 content="text/plain" 时,浏览器将代码不加任

何解释地显示给用户;当 content = "image/jpeg"是传递图形文件; 当未指定时,ContentType

默认为 "text/html".在PHP页面中,可以用 header 函数改变 ContentType 的类型,即可以控制

浏览器解释HTML文本的方式,如 header("ContentType: image/gif") 表示页面返回结果为一个

GIF类型的图形。

(四)、利用 SetCookie 函数设置客户端Cookies

通过设置SetCookie函数可以增加、修改或删除客户端的Cookies。当要设置的Cookie不存在时,

将创建一个新的Cookie,其值为要设置的值;Cookie存在时,以新值代替原有的值。

值得注意的是,应在页面的Header发送之前设置Cookie。

在下面的例子中,cookie.php3 用来设置一个名称为 wfj 的Cookie的值.调用时将显示

上次设置的Cookie(wfj)的值。

<?

file://cookie.php3

$OldCookieValue=$HTTP_COOKIE_VARS[ "wfj" ];//上次设置的Cookie(wfj)的值

if (!(Empty( $HTTP_POST_VARS[ "CookieValue" ] )))

{//已输入Cookie(wfj)的值,则进行Cookie设置,显示设置成功消息

SetCookie( "wfj", $HTTP_POST_VARS[ "CookieValue" ] );

?>

<html>

<head>

<title>Cookie设置成功</title>

</head>

<body>

<?

printf("<p>Cookie(wfj) 已经由%s设置为

s",$OldCookieValue,$HTTP_POST_VARS[ "CookieValue" ]);

printf("<p>下次调用时你会看到的");

}

else//未输入Cookie(wfj)的值,则提示输入Cookie值

{

?>

<html>

<head>

<title>Cookie设置</title>

</head>

<body>

<?

printf("<p>Cookie(wfj) =%s",$OldCookieValue);

printf("<p><hr><H4>你只需设置Cookie,我来显示</H4>");

?>

<form method="post" action="cookie.php3">

<p>

Cookie设置: <input name="CookieValue" value="wangfajun">

<p><input type=submit value="设置吧"><input type=reset value="想重选">

</form>

<? } ?>

</body>

</html>

六服务器端脚本和客户端脚本混合编程

当使用<script></script>编写一段脚本程序时,如果没有指定Language=php,则认为其

中的脚本程序在客户端执行,此时可以在程序中混合使用服务器端主要脚本和客户端脚本,这

样就可以根据客户端的请求灵活地控制客户端脚本的执行,使对客户的反馈更具有个性化。

在混合使用时,服务器端脚本要以“<??>”的形式嵌入,以示区别.

下面就是一个服务器端脚本和客户端脚本混合编程的例子(csscript.php3).在该例子中,

将输出10条记录,并为每条记录定制不同的函数,使每个函数能在浏览器的状态栏显示不同的

内容,并在鼠标经过记录时发生。

<!-- csscript.php3 -->

<html>

<head>

<title>服务器端脚本和客户端脚本混合编程</title>

</head>

<body>

<H1>鼠标移到各记录上的【项目名称】上时,请注意状态条内容的变化</H1>

<table border = "1">

<tr><td>项目名称</td><td>状态条应出现的内容</td></tr>

<? for( $intIndex = 1; $intIndex <= 10; $intIndex++) { ?>

<tr>

<td onmouseover = "Status<? echo($intIndex) ?>()">

<?echo($intIndex)?></td>

<td>鼠标现在正指向项目<? echo($intIndex) ?></td>

</tr>

<script language = JavaScript>

<!--

function Status<? echo($intIndex) ?>()

{

window.status = "鼠标现在正指向项目<? echo($intIndex) ?>";

}

-->

</script>

<?}?>

</table>

</body>

</html>

七增加注释

在编程时添加注释是一个好的习惯.PHP 允许在页面代码中添加注释,具体的注释方法与C

语言注释语法相同,如可用双斜杠“//”作为注释符。

八利用 Include 来实现功能模块化

可以将常用的功能函数存于一个PHP文件,在其它PHP页中要用其中的功能时,将包含函数的

PHP文件包含在调用函数的PHP文件中.这时可使用 Include 函数。具体语法为:

include($FileName);

使用时应该注意:

1、应避免自包含,即 File1 包含 File1;在多个文件中有包含语句时,应避免间接自包含

即循环包含,如File1包含File2,File2包含File3,File3包含File1.

2、被包含的脚本语言的类型必须是PHP语言类型或<script></script>脚本语句段。

以上是学习和使用PHP创建动态、交互式站点的一些入门知识,有了这些基础知识,就可以发挥

以前自己积累的编程经验,自己动手学习和探索用PHP创建基于UNIX/LINUX网站系统的动态、交互式

站点的高级网络应用系统了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有