内容概要
- 利用ssh远程连接服务器
- 利用lnmp的vhost功能建立网站
- Unity结合PHP操作数据库
1 利用SSH连接centos(更科学)
实际生产环境下,我们不太可能直接接触服务器进行操作,都是需要远程连接服务器。以下介绍一种通过ssh连接服务器的方式。
- 在宿主机打开命令行窗口,如
cmd
、PowerShell
、terminal
等。 - 输入并执行命令
ssh [email protected]
,出现提示输入yes
即可。 - 然后就跟直接操作虚拟机一样了。
问题小结
- 如果系统提示
ssh
不是一个命令,则可以通过安装git来间接安装ssh,或搜索相关资料先安装好ssh。- 利用ssh操作虚拟机时,只需要开启虚拟机,不用登陆。登陆仅发生在宿主机命令窗口这里。
2 创建web服务器(网站)
之前,我们利用lnmp默认的web服务器简单试用了下php。现在我们要创建一个新的web服务器专门用于后面的学习。
- 输入命令
lnmp vhost add
,随后步骤如下:
1 设定新网站的域名。随意,但最好是简单好记的。网站不上线的话用不着。
Please enter domain(example: www.lnmp.org): lab.traceq.com
Your domain: lab.traceq.com
2 设置网站更多域名。留空即可。
Enter more domain name(example: lnmp.org *.lnmp.org):
Please enter the directory for the domain: lab.traceq.com
3 设置存放网站内容的目录。可以自己指定,我这里选择留空,则会使用自动生成的默认目录。
Default directory: /home/wwwroot/lab.traceq.com:
Virtual Host Directory: /home/wwwroot/lab.traceq.com
4 是否启用URL重写规则,不需要。
Allow Rewrite rule? (y/n) n
You choose rewrite: none
5 是否启用PHP路径信息,需要。
Enable PHP Pathinfo? (y/n) y
Enable pathinfo.
6 是否启用访问日志,不需要。
Allow access log? (y/n) n
Disable access log.
7 是否为数据库名和MySQL用户名创建相同名称,是,这样比较简单明了。
Create database and MySQL user with same name (y/n) y
8 输入之前lnmp安装数据库时创建的管理员密码,应该是111111,输入时这里不会显示,别输入错了。
Enter current root password of Database (Password will not shown):
OK, MySQL root password correct.
9 输入新网站对应的数据库的名称,简单起见,我用lab
,跟之前域名lab.traceq.com
呼应。
Enter database name: lab
这样数据库和该数据库的用户名就都是lab
了。
Your will create a database and MySQL user with same name: lab
10 设置该数据库用户的密码,111111,简单。
Please enter password for mysql user lab: 111111
Your password: 111111
11 是否创建ftp,当然,否则怎么上传代码。
Create ftp account (y/n) y
12 给个ftp用户名,还是lab
,呼应,好记。
Enter ftp account name: lab
13 给这个ftp用户设置密码,111111。
Enter password for ftp account lab: 111111
14 需要启用https吗,不需要。
Add SSL Certificate (y/n) n
- 整个过程再完整列一下:
Please enter domain(example: www.lnmp.org): lab.traceq.com
Your domain: lab.traceq.com
Enter more domain name(example: lnmp.org *.lnmp.org):
Please enter the directory for the domain: lab.traceq.com
Default directory: /home/wwwroot/lab.traceq.com:
Virtual Host Directory: /home/wwwroot/lab.traceq.com
Allow Rewrite rule? (y/n) n
You choose rewrite: none
Enable PHP Pathinfo? (y/n) y
Enable pathinfo.
Allow access log? (y/n) n
Disable access log.
Create database and MySQL user with same name (y/n) y
Enter current root password of Database (Password will not shown):
OK, MySQL root password correct.
Enter database name: lab
Your will create a database and MySQL user with same name: lab
Please enter password for mysql user lab: 111111
Your password: 111111
Create ftp account (y/n) y
Enter ftp account name: lab
Enter password for ftp account lab: 111111
Add SSL Certificate (y/n) n
Press any key to start create virtul host...
- 成功后会显示简报,怕忘记关键信息,最好把简报截图或保存下:
================================================
Virtualhost infomation:
Your domain: lab.traceq.com
Home Directory: /home/wwwroot/lab.traceq.com
Rewrite: none
Enable log: no
Database username: lab
Database userpassword: 111111
Database Name: lab
FTP account name: lab
FTP account password: 111111
================================================
- 检查创建结果。输入
ls /home/wwwroot/lab.traceq.com/
,若系统提示无此文件夹,那就完蛋了。
3 测试新网站及相关功能
3.1 访问新网站
由于centos上已经运行lnmp的默认网站,所以我们需要给新创建的网站一个不同的端口,才能访问这个网站。lnmp基于nginx管理同一台机器上的多个网站,这些网站通过vhost脚本来配置。方法如下:
1 输入vi /usr/local/nginx/conf/vhost/lab.traceq.com.conf
来配置新创建的网站。
2 只需要将开头的listen 80;
中的80改成其它数字,比如27000。记得保存。
3 重启lnmp。lnmp restart
4 宿主机上用浏览器访问192.168.56.101:27000
,出现403 Forbidden
页面,就对了。
3.2 检查ftp
- 宿主机上用ftp工具访问新网站的ftp,看是否报错。注意ftp端口号不用管,仍然是默认的21,不用改成27000。别忘了,用户名是
lab
。 - 用vscode也试试看能否连接新网站的ftp。连接成功的话,传个php文件上去,然后用浏览器访问试试。
3.3 检查数据库
- 宿主机上用浏览器访问
10.187.56.101
- 然后点
phpMyAdmin
链接 - 然后输入用户名
lab
,密码111111
- 顺利进入并在左侧看到
lab
数据库就ok了。
4 使用Unity获取PHP提供的数据
4.1 准备PHP代码
- 创建test.php,内如如下:
注意,这个文件应该位于宿主机上对应于网站开发的那个目录下。
- 正常情况下,这个文件会被开发环境中的sftp自动上传到虚拟机上的网站目录中。
- 宿主机浏览器访问
192.168.56.101:27000/test.php
,应获得如下信息:
ip: 192.168.56.1
4.2 Unity请求&获取数据
- 新建或打开现有的Unity项目。
- 创建脚本
WebRequestLab.cs
,输入如下内容:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class WebRequestLab : MonoBehaviour {
public string url = "http://192.168.56.101:27000/test.php";
void Start() {
StartCoroutine(GetText());
}
IEnumerator GetText() {
UnityWebRequest wr = UnityWebRequest.Get(url);
yield return wr.SendWebRequest();
if(wr.isNetworkError || wr.isHttpError) {
Debug.Log(wr.error);
}
else {
// Show results as text
Debug.Log(wr.downloadHandler.text);
}
}
}
- 将
WebRequestLab
挂载到场景中运行,会在控制台看到如下信息:
ip: 192.168.56.1
UnityEngine.Debug:Log(Object)
4.3 使用PHP返回Json格式数据
- 将test.php内容修改如下:
宿主机访问test.php,看到如下内容:
{"ip":"192.168.56.1","player":{"name":"my player name","score":"1340"}}
以上内容并不适合阅读,可以安装
Postman
,更好的观察返回数据。下载&安装Postman
-
启动Postman,点➕,
创建一个GET请求,输入要请求的网址(比如http://192.168.56.101:27000/test.php
),然后发送。
-
获取数据后,选择JSON模式来观察数据。
4.4 使用Unity接受Json数据
在Unity中有很多操作Json的方式,这里选用Unity自带的JsonUtility,相关资料可以查阅官方帮助。
- 修改
WebRequestLab.cs
为如下内容:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using System;
[Serializable]
public class PlayerInfo{
public string name;
public int score;
}
[Serializable]
public class RetInfo{
public string ip;
public PlayerInfo player;
}
public class WebRequestLab : MonoBehaviour {
public string url = "http://192.168.56.101:27000/test.php";
void Start() {
StartCoroutine(GetText());
}
IEnumerator GetText() {
UnityWebRequest wr = UnityWebRequest.Get(url);
yield return wr.SendWebRequest();
if(wr.isNetworkError || wr.isHttpError) {
Debug.Log(wr.error);
}
else {
// Show results as text
string ret = wr.downloadHandler.text;
Debug.Log(ret);
//
RetInfo retInfo = JsonUtility.FromJson(ret);
Debug.Log(retInfo);
}
}
}
- 在最后一行
Debug.Log(retInfo);
处添加断点 - 启动debug
- 运行unity场景
-
查看断点信息
4.5 PHP访问数据库数据
4.5.1 创建数据表及插入数据
宿主访问
192.168.56.101
,然后进入phpMyAdmin
,登录成功后就进入数据库管理页面-
创建
t_user_info
表,字段如下,别忘了点保存:
-
插入数据
浏览数据,就可以看到刚才插入的数据了。
4.5.2 通过php代码访问数据库
- 将
test.php
内容修改如下:
query($sql);
$info = $result->fetch_assoc();
$raw_ret['ip'] = $_SERVER['REMOTE_ADDR'];
$raw_ret['player']['name'] = $info['name'];
$raw_ret['player']['score'] = $info['score'];
$json_ret = json_encode($raw_ret);
echo $json_ret;
$db->close();
?>
- 通过Postman再次访问test.php,查看数据,应该跟以前没变化,但注意,
name
和score
数据已经是来自数据库中了。 - 通过Unity查看数据,同样没变化。
至此,用unity连接web服务获取数据的脉络已经打通了,以后就是根据需要,在这些脉络上开发详细的功能了。
附录中会给出一些建议的阅读材料。
附录
附录A 关于Unity的web数据获取
- 在Unity自带文档(官方文档)的Manual中搜索
WebRequest
附录B 关于PHP访问数据库
- 有许多专用的数据库操作php代码,大家可以自己搜索来试一试。
- php官网,这里有关于php的一切。https://php.net
废弃内容
问题小结(以下内容废除,但可作为修正意外的过程演练一下)
- 在后面的过程中,xdebug调试功能有可能失效。怀疑是
/home/wwwroot/lab.traceq.com/
这种带有.
的目录名xdebug不兼容。可以通过下面方式修改:
1 修改文件夹名称为不带点的,比如
mv /home/wwwroot/lab.traceq.com /home/wwwroot/lab
2 目录改了,那么vhost配置中(vi /usr/local/nginx/conf/vhost/lab.tryceq.com.conf
)相应的
root /home/wwwroot/lab.traceq.com;
也得做相应修改为
root /home/wwwroot/lab;
。
3 ftp也得做相应修改,用lnmp ftp del
把之前创建的lab
账号删掉,然后使用lnmp ftp add
重新创建lab
账号,制定目录时要指定/home/wwwroot/lab
。
4 vscode这边,xdebug的配置中(即launch.json
),要把pathMappings
中对应的
/home/wwwroot/lab.traceq.com/
修改为
/home/wwwroot/lab/