零基础学php怎么学
零基础怎么学习php?以下是详细介绍:首先需要学习并掌握基本的程序代码,比如HTML、CSS、javascript等,不用很精通,但是需要能够看懂,之后开始学习PHP语法以及编写,熟悉Mysql、Web服务器Apache/Nginx、Linux和HTTP协议,最后还需要学会使用PHP框架。如果是零基础的初学者,建议选择培训班进行系统化学习,才能更快上手。拓展:php是什么PHP是一种通用的开源脚本语言,也被称作“超文本预处理器”,PHP被广泛应用于Web网站的开发,它能够嵌入到HTML中使用。PHP的语法吸收了C语言、Java和Perl等不同开发语言的特点,更加便于开发人员的学习。php工程师前景就目前情况来看,php工程师的发展前景还是不错的,因为针对于web开发来说,php的维护成本较低、开发的速度快、又有强大的资源等,所以招聘PHP工程师的公司还是挺多的,尤其是一些中小企业。而对于初学者来说,php语法吸收了C语言、Java和Perl等不同开发语言的特点,比较简单易上手。以上就是零基础学习php的详细介绍,希望能够帮助到大家。
零基础怎么学PHP?
PHP独特的语法混合了C、Java、Perl以及PHP自创新的语法,可以比CGI或者Perl更快速的执行动态网页,动态页面方面,与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成htmL标记的CGI要高许多;PHP具有非常强大的功能,所有的CGI的功能PHP都能实现。南邵计算机学院认为目前在互联网有很多网站的开发都是通过PHP语言来完成的,例如,搜狐、网易和百度等,在这些知名网站的创作开发中都应用到了PHP语言。很多人想要学习PHP语言,但是面对互联网庞大而繁杂的信息流,各种学习信息的干扰,使我们很难去做出正确的选择。其实学习PHP只要把握好学习路线,能够在极短的时间里完成从新手到熟练的过程。在这里,小编为大家整理出了学习PHP的路线和具体的课程。全都是干货哦。1、入门:新人必看的PHP基础知识视频教程学习本课程可掌握PHP基础知识,了解PHP的基本语法、数组、函数、表单验证、图像处理,以及MySQL数据库等PHP开发过程中所遇到的知识点和基本操作。2、进阶:PHP如何操作MySQL数据库视频教程利用PHP操作MySQL数据库教程,MySQL是PHP最合适的搭配,MYSQL开源、跨平台,PHP扩展包对MySQL的支持比较完善。本课程讲解MySQL数据库的基础知识,以及如何利用PHP来操作MySQL数据库,实现对数据的调用和修改。3、实战:PHP项目实战_多用户留言系统视频教程利用PHP基础课程中的知识,在本课程中创建多用户留言系统,包括用户界面设计,注册,验证,帖子的写入、修改等留言系统的必备功能。4、进阶:PHP进阶之面向对象相关视频教程学习和了解开发独立的模板引擎技术,学习三层架构及分层思想和原理,然后通过后面的CMS内容管理系统等课程的实践来掌握以上知识点。5、进阶:PHP进阶之CMS内容管理系统CMS内容管理系统具有许多基于模板的优质设计,可以加快网站开发速度和开发成本,同时易于使用,可开发性强,可分布式管理,CMS的功能并不只限于文本处理,它也可以处理图片、Flash动画、声像流、图像、甚至电子邮件档案等。6、ThinkPHP框架讲解视频教程ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性,并且拥有众多原创功能和特性。理解ThinkPHP的框架基础知识,安装配置,模型的建立、开发及调试。学习ThinkPHP3.2.1的使用方法。
如何做网站网站制作教程
对于网站搭建步骤的步骤方面,首先需要的是一个虚拟主机,可以租用的,可以自己进行申请,因为在日后做好网站之后也是需要日常用的。其次域名也是比较重要的,域名是可以买的,当然也需要看自己所需要做的网站的规格以及网站的运图来进行对域名的购买,在购买完网站和域名之后,就需要具体的开始做网站了。对于做网站的靠前步就是通过打开域名中的空间来进行自己本地制作网站,在进行建好网站之后上传到服务器,再上传完服务器之后,可以从服务器中打开之后再填充自己所需要的内容即可。对于网站搭建步骤只有三个关键点,首先虚拟主机,第二点是需要有一个域名,第三点是要有空间,这个空间可以是云空间,也可以是其他类的空间。这个关键也是相当重要的,也是做成网站的根本的三个点。那么具体来说的话,域名是可以自行申请的,当然也可以花钱购买,其次空间是可以租用的,其次也可以去云空间进行租用,因为这个空间主要是放所有的素材模板以及预存内容的是比较重要的,可以根据自己的需求来确定空间的大小。虚拟主机是通过虚拟来对外推广的时候所需要的一款主机。
怎么做网站教程
1、搜索,进入官网之后点击右上角的“免费注册”,在注册页面中输入手机号码/邮箱、图片验证码、手机/邮箱验证码以及密码之后点击注册。2、注册完成之后,会自动出现“概况”界面,然后点击其中的“进入电脑网站设计”,正式开始网站建设。3、然后就进入网站模板挑选页面,里面包含了多种行业、多类风格,企业可以随意挑选,选择一个合适的网站模板并点击“使用”。4、选择你喜欢的模板点击使用即可,可以对以下几方面进行设置,如:网站主题、网站横幅、页面版式、网站设置、百度优化等。5、如果对某个模块不太满意,鼠标可停留在该模块右上侧,通过“编辑模块”即可自由修改图片和文字,同时还可以给各个模块添加上不同的特效。6、然后,再为每个模块选择“模块动画”,包括淡入、飞入、放大、跳入等等,这些动画可以令页面更加活泼、生动。此时要注意所有动画的协调、统一。8、同时,还有很多高级的功能,比如“当前位置”,这也就是常说的面包屑导航,但这个是按需选择的;另外还有在线视频、在线地图、魔方多图等等。9、按照上面这些步骤完善好网站中的所有页面之后,点击右上角的“保存”按钮,然后点击“预览”中的网址,对网站进行预览,发现问题再返回继续完善,如果没有问题,一个网站就算制作完成了。
新手应该如何学习PHP语言?
php是一种通用开源脚本语言,PHP独特的语法吸收了C语言.Java.Perl以及php自创的语法特点.PHP语言学习的门槛不高,即使是零基础的同学,只要勤于动手实践,也能由入门到精通.如果你是php语言的初学者,不妨和回龙观北大青鸟小编了解一下Php是干什么用的,以及学习php从哪些方面入手.学PHP就到回龙观北大青鸟值得信赖.零基础到精通,新手应该如何学习PHP语言?Php的用途是什么?对于一个php门外汉来说,对php语言存在着较浅的认识,他会觉得php语言就是做网站的.但是,更确切地说,php语言是网站后端开发以及后端处理的.因为这是一项技能,所以在学习php语言之前,大有必要搞清楚它是做什么的,这一点非常重要!php学习的框架下面回龙观北大青鸟小编对学习PHP的过程做一下概括:(1)熟悉HTML/CSS/JS等网页基本元素,完成阶段可自行制作完整的网页.(2)理解动态语言的概念,运做机制,熟悉PHP语法.(3)学习如何将PHP与HTML结合起来完成简单动态页面.(4)接触MYSQL,设计数据库程序.(5)不断巩固,摸透大部分PHP常用函数,并可理解OOP,MYSQL优化,模板.(6)建立一个功能齐全的动态站点.这整个的学习过程是循序渐进的过程,就拿html来说,只有当你先学会了制作网页,才能为之后建立网站打下基础.学习php语言会遇到的问题对于一个零基础的php初学者来说,学习过程难免会碰到各种各样的问题,回龙观北大青鸟小编在此特别做出说明.就以html学习为例,在学习过程比较常见的问题就是,看了手册中的各种概念,但是回想起来概念相当模糊和零碎.然而,php语言的学习并非知识型的,而是技能型的.所以,对于手册里每一个标签,每一个属性都敲了一遍,看看它们的效果和反应,这样对概念的认识显然会更深刻一些.像html和css的任何元素标记,这些都要亲自动手.另外,在自学的过程中,一个人的视野是有限的,因而仍然需要找些教程视频来看.观看这些视频,你可以发现自己学习当中的遗漏和未曾注意的细节问题.像学习html的一样,一定要克服惰性,最好建立一个文本,专门用于记录不懂的一些问题,这样有利于你继续前进.搞点项目开发编程在刚接触有会有些新鲜感,但是接下来就是一些乏味感,因而需要寻找一些刺激.搞点项目开发,当你发现编程可以解决生活实际问题,将获得满满的成就感,这也你继续学习的动力源泉之一.当你学会HTML的时候,就可以编好几个大表格排板的网页;当你学会PHP,就可以把一加一的运算写在函数里,然后调用啦.当然,最好做一个留言板,和helloworldPK一下!
新手应该如何学习PHP语言?
php是一种通用开源脚本语言,PHP独特的语法吸收了C语言.Java.Perl以及php自创的语法特点.PHP语言学习的门槛不高,即使是零基础的同学,只要勤于动手实践,也能由入门到精通.如果你是php语言的初学者,不妨和北京北大青鸟小编了解一下Php是干什么用的,以及学习php从哪些方面入手.学PHP就到北京北大青鸟值得信赖.零基础到精通,新手应该如何学习PHP语言?Php的用途是什么?对于一个php门外汉来说,对php语言存在着较浅的认识,他会觉得php语言就是做网站的.但是,更确切地说,php语言是网站后端开发以及后端处理的.因为这是一项技能,所以在学习php语言之前,大有必要搞清楚它是做什么的,这一点非常重要!php学习的框架下面北京北大青鸟小编对学习PHP的过程做一下概括:(1)熟悉HTML/CSS/JS等网页基本元素,完成阶段可自行制作完整的网页.(2)理解动态语言的概念,运做机制,熟悉PHP语法.(3)学习如何将PHP与HTML结合起来完成简单动态页面.(4)接触MYSQL,设计数据库程序.(5)不断巩固,摸透大部分PHP常用函数,并可理解OOP,MYSQL优化,模板.(6)建立一个功能齐全的动态站点.这整个的学习过程是循序渐进的过程,就拿html来说,只有当你先学会了制作网页,才能为之后建立网站打下基础.学习php语言会遇到的问题对于一个零基础的php初学者来说,学习过程难免会碰到各种各样的问题,北京北大青鸟小编在此特别做出说明.就以html学习为例,在学习过程比较常见的问题就是,看了手册中的各种概念,但是回想起来概念相当模糊和零碎.然而,php语言的学习并非知识型的,而是技能型的.所以,对于手册里每一个标签,每一个属性都敲了一遍,看看它们的效果和反应,这样对概念的认识显然会更深刻一些.像html和css的任何元素标记,这些都要亲自动手.另外,在自学的过程中,一个人的视野是有限的,因而仍然需要找些教程视频来看.观看这些视频,你可以发现自己学习当中的遗漏和未曾注意的细节问题.像学习html的一样,一定要克服惰性,最好建立一个文本,专门用于记录不懂的一些问题,这样有利于你继续前进.搞点项目开发编程在刚接触有会有些新鲜感,但是接下来就是一些乏味感,因而需要寻找一些刺激.搞点项目开发,当你发现编程可以解决生活实际问题,将获得满满的成就感,这也你继续学习的动力源泉之一.当你学会HTML的时候,就可以编好几个大表格排板的网页;当你学会PHP,就可以把一加一的运算写在函数里,然后调用啦.当然,最好做一个留言板,和helloworldPK一下!
如何配置一个 Docker 化持续集成的 PHP 开发环境
首先,我们得知道什么才是好的开发环境, 对于我而言,一个好的开发环境需要具备以下几个特点:
可随意使用。我必须可以随意删除和创建新的环境。
快速启动。我想要用它工作时候,它立马就能用。
易于更新。在我们行业中,事物发展变化非常快,必须能让我很容易将我的开发环境更新到新的软件版本。
而Docker都支持以上这些特点,甚至更多。你几乎可以即时销毁和重建容器,而更新环境只需要重建你当前使用的镜像即可。
什么是PHP开发环境
目前Web应用错综复杂,PHP开发环境需要很多的东西,为了保证环境的简单性,需要做各种各样的限制。
我们这次使用Nginx、PHP5-FPM、MySQL来运行Synmfony项目。由于在容器中运行命令行会更复杂,所以这方面的内容我会放到下一篇博客中再说。
Pet 与 Cattle
另一个我们要讨论的重点是:我们要把开发环境部署在多容器还是单容器中。 两种方式各有优点:
单容器易于分发、维护。因为它们是独立的,所有的东西都运行在同一个容器中,这点就像是一个虚拟机。但这也意味着,当你要升级其中的某样东西(比如PHP新版本)的时候, 需要重新构建整个容器。
多容器可以在添加组件时提供更好的模块化。因为每个容器包含了堆栈的一部分:Web、PHP、MySQL等,这样可以单独扩展每个服务或者添加服务,并且不需要重建所有的东西。
因为我比较懒,加上我需要在我的笔记本上放点别的内容,所以,这里我们只介绍单个容器的方法。
初始化工程
首先要做的是初始化一个新的Symfony工程. 推荐的方法是用composer的create-project命令。本来可以在工作站上安装composer,但是那样太简单了。这次我们通过Docker来使用它。
我之前发过一篇关于Docker命令的文章:make docker commands(好吧,我说谎了,我本来把它写在这篇文章中了,然后觉得把它独立出来会比较好)。
不管怎么样,你可以读一下。接下来如果还没有composer命令的话,你可以创建一个属于自己的composer 别名。
$ alias composer="docker run -i -t -v \$PWD:/srv ubermuda/composer"
现在你可以初始化Symfony工程了:
$ composer create-project symfony/framwork-standard-edition SomeProject
帅呆了!下面来点实在的工作。(省略了博主自娱自乐的一堆balabla....原文:Awesome. Give yourself a high-five, get a cup of coffee or whatever is your liquid drug of choice, and get ready for the real work.)
容器
构建一个运行标准Symfony项目且自给自足的容器相当容易,只需要安装好常用的Nginx、PHP5-FPM和MySQL-Server即可,然后把预先准备好的Nginx的虚拟主机配置文件扔进去,再复制一些配置文件进去就完事了。
如何配置一个 Docker 化持续集成的 PHP 开发环境
首先,我们得知道什么才是好的开发环境, 对于我而言,一个好的开发环境需要具备以下几个特点:
可随意使用。我必须可以随意删除和创建新的环境。
快速启动。我想要用它工作时候,它立马就能用。
易于更新。在我们行业中,事物发展变化非常快,必须能让我很容易将我的开发环境更新到新的软件版本。
而Docker都支持以上这些特点,甚至更多。你几乎可以即时销毁和重建容器,而更新环境只需要重建你当前使用的镜像即可。
什么是PHP开发环境
目前Web应用错综复杂,PHP开发环境需要很多的东西,为了保证环境的简单性,需要做各种各样的限制。
我们这次使用Nginx、PHP5-FPM、MySQL来运行Synmfony项目。由于在容器中运行命令行会更复杂,所以这方面的内容我会放到下一篇博客中再说。
Pet 与 Cattle
另一个我们要讨论的重点是:我们要把开发环境部署在多容器还是单容器中。 两种方式各有优点:
单容器易于分发、维护。因为它们是独立的,所有的东西都运行在同一个容器中,这点就像是一个虚拟机。但这也意味着,当你要升级其中的某样东西(比如PHP新版本)的时候, 需要重新构建整个容器。
多容器可以在添加组件时提供更好的模块化。因为每个容器包含了堆栈的一部分:Web、PHP、MySQL等,这样可以单独扩展每个服务或者添加服务,并且不需要重建所有的东西。
因为我比较懒,加上我需要在我的笔记本上放点别的内容,所以,这里我们只介绍单个容器的方法。
初始化工程
首先要做的是初始化一个新的Symfony工程. 推荐的方法是用composer的create-project命令。本来可以在工作站上安装composer,但是那样太简单了。这次我们通过Docker来使用它。
我之前发过一篇关于Docker命令的文章:make docker commands(好吧,我说谎了,我本来把它写在这篇文章中了,然后觉得把它独立出来会比较好)。
不管怎么样,你可以读一下。接下来如果还没有composer命令的话,你可以创建一个属于自己的composer 别名。
$ alias composer="docker run -i -t -v \$PWD:/srv ubermuda/composer"
现在你可以初始化Symfony工程了:
$ composer create-project symfony/framwork-standard-edition SomeProject
帅呆了!下面来点实在的工作。(省略了博主自娱自乐的一堆balabla....原文:Awesome. Give yourself a high-five, get a cup of coffee or whatever is your liquid drug of choice, and get ready for the real work.)
容器
构建一个运行标准Symfony项目且自给自足的容器相当容易,只需要安装好常用的Nginx、PHP5-FPM和MySQL-Server即可,然后把预先准备好的Nginx的虚拟主机配置文件扔进去,再复制一些配置文件进去就完事了。
本容器的源代码在GitHub上的 ubermuda/docker-symfony仓库中可以找到。 Dockerfile 是Docker构建镜像要用到的配置文件,我们来看一下:
FROM debian:wheezy
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update -y
RUN apt-get install -y nginx php5-fpm php5-mysqlnd php5-cli mysql-server supervisor
RUN sed -e 's/;daemonize = yes/daemonize = no/' -i /etc/php5/fpm/php-fpm.conf
RUN sed -e 's/;listen\.owner/listen.owner/' -i /etc/php5/fpm/pool.d/www.conf
RUN sed -e 's/;listen\.group/listen.group/' -i /etc/php5/fpm/pool.d/www.conf
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
ADD vhost.conf /etc/nginx/sites-available/default
ADD supervisor.conf /etc/supervisor/conf.d/supervisor.conf
ADD init.sh /init.sh
EXPOSE 80 3306
VOLUME ["/srv"]
WORKDIR /srv
CMD ["/usr/bin/supervisord"]
我们通过扩展 debian:wheezy 这个基础镜像开始,然后通过一系列的sed命令来配置Nginx和PHP5-FPM。
RUN sed -e 's/;daemonize = yes/daemonize = no/' -i /etc/php5/fpm/php-fpm.conf
RUN sed -e 's/;listen\.owner/listen.owner/' -i /etc/php5/fpm/pool.d/www.conf
RUN sed -e 's/;listen\.group/listen.group/' -i /etc/php5/fpm/pool.d/www.conf
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
这里我们要做两件事。 首先配置PHP5-FPM和Nginx让他们在前台运行以便supervisord可以追踪到他们。
然后,配置PHP5-FPM以指定的用户运行Web-Server,并处理好文件权限。
接下来需要安装一组配置文件,首先是Nginx的虚拟主机配置文件vhost.conf:
server {
listen 80;
server_name _;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /srv/web;
index app_dev.php;
location / {
try_files $uri $uri/ /app_dev.php?$query_string;
}
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
}
}
因为我们不需要域名,所以把server_name设成了_(有点像perl的$_占位符变量), 并配置根目录(document root)为/svr/web, 我们会把应用程序部署在/srv下,剩下的就是标准的Mginx + PHP5-FPM配置.
因为一个容器每次只能运行一个程序, 我们需要supervisord(或者任何别的进程管理器,不过我比较中意supervisord)。幸运的是, 这个进程管理器会产生我们需要的所有进程!下面是一小段supervisord的配置:
[supervisord]
nodaemon=true
[program:nginx]
command=/usr/sbin/nginx
[program:php5-fpm]
command=/usr/sbin/php5-fpm
[program:mysql]
command=/usr/bin/mysqld_safe
[program:init]
command=/init.sh
autorestart=false
redirect_stderr=true
redirect_stdout=/srv/app/logs/init.log
这里我们需要做的是定义所有的服务, 加上一个特殊的program:init进程,它不是一个实际的服务,而是一个独创的运行启动脚本的方式。
这个启动脚本的问题在于,它通常需要先启动某些服务。比如,你可能要初始化一些数据库表,但前提是你得先把MySQL跑起来,一个可能的解决办法是,在启动脚本中启动MySQL,然后初始化表,然后为了防止影响到supervisord的进程管理,需要停掉MySQL,最后再启动supervisord。
这样的脚本看起来类似下面这样:
/etc/init.d/mysql start
app/console doctrine:schema:update --force
/etc/init.d/mysql stop
exec /usr/bin/supervisord
看起来丑爆了有木有,咱换种方式,让supervisor来运行它并且永不重启。
实际的init.sh脚本如下:
#!/bin/bash
RET=1
while [[ RET -ne 0 ]]; do
sleep 1;
mysql -e 'exit' > /dev/null 2>&1; RET=$?
done
DB_NAME=${DB_NAME:-symfony}
mysqladmin -u root create $DB_NAME
if [ -n "$INIT" ]; then
/srv/$INIT
fi
脚本先等待MySQL启动,然后根据环境变量DB_NAME创建DB,默认为symfony, 然后在INIT环境变量中查找要运行的脚本,并尝试运行它。本文的结尾有说明如何使用这些环境变量。
构建并运行镜像
万事俱备只欠东风。我们还要构建Symfony Docker镜像, 使用docker build命令:
$ cd docker-symfony
$ docker build -t symfony .
现在,可以使用它来运行你的Symfony工程了:
$ cd SomeProject
$ docker run -i -t -P -v $PWD:/srv symfony
我们来看看这一连串的选项分别是干嘛的:
-i 启动交互(interactive)模式, 也就是说,STDIO(标准输入输出)连接到了你当前的终端上。当你要接收日志或者给进程发送信号时,它很有用。
-t 为容器创建一个虚拟TTY, 它跟-i是好基友,通常一起使用。
-P 告诉Docker守护进程发布所有指定的端口, 本例中为80端口。
-v $PWD:/srv 把当前目录挂载到容器的/srv目录。挂载一个目录使得目录内容对目标挂载点可用。
现在你还记得之前提到的DB_NAME和INIT环境变量了吧,干嘛用的呢:用于自定义你的环境。 基本上你可以通过 docker run的-e选项在容器中设置环境变量,启动脚本会拿到环境变量,因此,如果你的DB名为some_project_dev, 你就可以这么运行容器:
$ docker run -i -t -P -v $PWD:/srv -e DB_NAME=some_project_dev symfony
INIT 环境变量就更强大了,它允许你启动时运行指定的脚本。比如, 你有一个bin/setup脚本运行composer install命令并且设置数据库schema:
#!/bin/bash
composer install
app/console doctrine:schema:update --force
用-e来运行它:
$ docker run -i -t -P \
-v $PWD:/srv \
-e DB_NAME=some_project_dev \
-e INIT=bin/setup
注意,-e选项可以在docer run中多次使用,看起来相当酷。另外,你的启动脚本需要可执行权限(chmod +x)。
现在我们通过curl发送请求到容器,来检查一下是否所有的东西都像预期一样工作。首先,我们需要取到Docker映射到容器的80端口的公共端口,用docker port命令:
$ docker port $(docker ps -aql 1) 80
0.0.0.0:49153
docker ps -aql 1 是个好用的命令,可以方便的检索到最后一个容器的id, 在我们的例子中,Docker 把容器的80端口映射到了49153端口。我们 curl 一下看看。
$ curl http://localhost:49153
You are not allowed to access this file. Check app_dev.php for more information.
当我们不从localhost(译者注:容器的localhost)访问dev controller时,得到了Symfony的默认错误消息,这再正常不过了, 因为我们不是从容器内部发送 curl 请求的, 所以,可以安全的从前端控制器web/app_dev.php中移除这些行。
// This check prevents access to debug front controllers that are deployed by accident to production servers.
// Feel free to remove this, extend it, or make something more sophisticated.
if (isset($_SERVER['HTTP_CLIENT_IP'])
|| isset($_SERVER['HTTP_X_FORWARDED_FOR'])
|| !(in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) || php_sapi_name() === 'cli-server')
) {
header('HTTP/1.0 403 Forbidden');
exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}
这些行阻止了任何从localhost以外的地方访问dev controller。
现在再curl的时候就可以正常工作了,或者用浏览器访问 http://localhost:49153/:
很容易吧! 现在我们可以快速的启动、更新环境了,但还是有很多地方需要改进。