19暑期学习-Day4

内容概要

  • 利用ssh远程连接服务器
  • 利用lnmp的vhost功能建立网站
  • Unity结合PHP操作数据库

1 利用SSH连接centos(更科学)

实际生产环境下,我们不太可能直接接触服务器进行操作,都是需要远程连接服务器。以下介绍一种通过ssh连接服务器的方式。

  • 在宿主机打开命令行窗口,如cmdPowerShellterminal等。
  • 输入并执行命令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),然后发送。
    发送GET请求

  • 获取数据后,选择JSON模式来观察数据。


    以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场景
  • 查看断点信息


    查看unity获取的json数据

4.5 PHP访问数据库数据

4.5.1 创建数据表及插入数据

  • 宿主访问192.168.56.101,然后进入phpMyAdmin,登录成功后就进入数据库管理页面

  • 创建t_user_info表,字段如下,别忘了点保存:

    创建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,查看数据,应该跟以前没变化,但注意,namescore数据已经是来自数据库中了。
  • 通过Unity查看数据,同样没变化。

至此,用unity连接web服务获取数据的脉络已经打通了,以后就是根据需要,在这些脉络上开发详细的功能了。
附录中会给出一些建议的阅读材料。

附录

附录A 关于Unity的web数据获取

  • 在Unity自带文档(官方文档)的Manual中搜索WebRequest
    在unity官方帮助中搜索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/

你可能感兴趣的:(19暑期学习-Day4)