美文网首页我爱编程
零基础做出第一个PHP网站

零基础做出第一个PHP网站

作者: 蓝灰_q | 来源:发表于2017-06-30 12:06 被阅读2355次

    技术背景:无php基础,有sql基础。

    动机1:对数据接口的管理是电子文档的管理方式,效率奇低,市面上现有的软件工具感觉都不趁手

    动机2:一颗做全栈的心,打通了网站,可以自己想做啥就做啥

    前期准备

    web+sql环境搭建:见XAMPP环境搭建与配置

    开发工具:PhpStorm,去官网下载(然后自己找个license server激活),选择原因是用惯了JetBrains出品

    PHP基础:W3School的php部分简单读了一遍

    参考项目:一个涵盖基本CRUD功能的小项目,我找的是SFON

    开发过程

    1.概念与分工

    我们会用到这么几个东西:php,html,js(javascript),css,他们是这样合作的

    各语言的分工合作

    我们知道,网站其实就是向浏览器丢出一堆页面数据,浏览器自己解析这些数据,显示成我们看到的样子。

    在浏览器那里,HTML就像是房屋结构,决定页面有哪些内容;CSS就像是装修的壁纸和油漆,决定这些内容看起来是什么样子;JavaScript就像是一个建筑+装修工人,可以把房子拆建/扩建/刷漆/移墙/换门窗什么的...。

    上述三个语言都是在浏览器上工作的,房子都拆了,后台服务器一点儿也不知道,所以有人能从后台处理数据,PHP就是在后台工作的,它的工作分两部分:

    一个是从服务器上组合页面数据,服务器网站向浏览器丢出页面数据前,php可以先运转一下,决定把哪些页面数据丢给浏览器,这个过程大概可以这样理解

    PHP组合出页面要显示的内容

    另一个是从浏览器向服务器提交数据,因为服务器不会去问浏览器上发生了什么,需要浏览器主动向服务器提交。这个提交过程就复杂很多了,它涉及如何从浏览器向后台传数据的问题,基本过程是这样的

    php提交表单

    首先,把数据从浏览器提交到服务,在提交时,浏览器先把数据从特定的表单里拿出来,提交给服务器,并要求服务器在指定的另一个php页面里取出这些数据

    然后,浏览器会去打开这个特定php页面,此时,服务器会根据要求取出浏览器提交的数据,然后再执行我们写的php代码,去修改数据库什么的。

    2.页面的结构

    PHP只负责组装页面数据,等数据发到浏览器时,已经看不到PHP代码了(php只运行在后台服务器上),浏览器上能到的就是HTML+JS+CSS,他们是这样分工的

    浏览器页面的结构

    3.页面的引用和跳转

    web页面里有很多引用,我们知道软件开发都会尽力做到可复用,在Java里是import引用其他类,在web里就是include引用文件了,js、css、php文件都可以这样引用,如果是本地文件,可以直接指向对应的文件夹;如果是在线文件,可以直接指向对应的网络地址。

    web页面可以互相跳转,一般来说web应用都需要在几个页面间来回跳转(也有些单页面web应用),超链接、php函数、js函数都可以实现跳转或回退功能,但更重要的是数据的传递,要传递参数,可以通过url传递,或者可以通过浏览器的cookie来传递,或者可以通过服务器的session来传递,具体使用哪种方式看自己的需求了。

    4.数据库连接与处理

    这里连接的是mysql数据库,php连接mysql数据库有三种方式,php-mysql,php-mysqli和pdo。

    第一种php-mysql已经废弃,能用,但不推荐,因为太陈旧了,容易被sql注入攻击,不能在一次连接中执行多条SQL语句(建立和释放数据库连接时,消耗的资源可能超过执行SQL)等等。

    第二种php-mysqli其实就是php-mysql improvement,增强版,主要解决了旧版php-mysql的问题,并增强了很多功能,例如支持事务等,不过本质上还是拼sql语句,数据层和业务层还是混杂在一起的。

    第三种pdo看名字就知道,终于把数据层抽象出来了,业务层使用pdo数据对象,pdo再去跟数据库对接,解耦合的结果是,你可以自由地更换数据库了,除非是一锤子买卖完全不考虑扩展维护,否则还是使用pdo为妙。

    5.汉字乱码与utf8字符集

    记得Jeff大神曾经在一篇文章里提到,很多英文网站都没有设定字符集,导致在非英语国家各种乱码...

    我们中国这种情况好一些,因为不设字符集,网站里的汉字就先乱码给你看。

    设定uft8字符集可以解决这个问题,但要设置三处

    一要为php里的html页面设置字符集,在head里添加meta数据,告诉浏览器,使用utf8解析这页html的数据

    为html设定字符集

    还要为mysql设定字符集,数据库要设定utf8字符集,这样才能保存汉字;

    数据库要设为utf8字符集

    最后,web页面里连接数据库时也要设定字符集,这样才能正常处理查询结果中的汉字,例如用php-mysqli查询数据库时,就要先为数据库连接设定为utf8,然后再执行sql

    php里的数据库连接要设定utf8

    6.操作页面元素

    web页面现在已经进化为可以互动了,就是说用户可以在浏览器端修改html页面的内容,这主要是通过Javascript实现,Ajax/jQuery等实质都是javascript的扩展。

    javascript只能在浏览器端操作,要和后台服务器通信的话,还是要用php,不过php可以调用js,但是js调不了php,因为php只能在服务器运行,浏览器上根本看不到php的代码,无从调用。

    7.其他

    一般来说,网站的默认页面会指向根目录下的index.php,如果要频繁修改首页的话就很麻烦,我们可以通过设置Header实现自动跳转

    自动跳转到其他页面

    另外,phpstorm里可以直接用浏览器打开正在编辑的页面,但是接口会用phpstorm的63342端口,这个端口一般不是apache等web容器的端口,缺少web容器的支持,会导致post提交失败,打开phpstorm的setting,配置一下该项目的端口和地址即可

    配置web项目的url端口地址

    如果项目比较多,可以取消勾选“Visible only for this project”,共用这个apache服务器.

    注意,这里配置的web地址,需要是已经在xampp中定义过的虚拟目录,具体在httpd-xampp.conf中配置

    如果不想一个个改虚拟目录,还可以修改xampp中apache的根目录为phpstorm工作目录,例如,打开xampp的apache/conf/httpd.config,把document root从 D:/xampp/htdocs改为D:/php。

    部署应用

    硬件与系统:有一台装了CentOS的服务器可以用

    网络:内部使用,直接搭在公司内网

    软件:服务器装Apache+Mysql,个人PC装xshell、xftp、mysql workbench

    遇到的问题主要有两个:

    1.数据库账户的问题

    安全起见,网站使用的数据库账户不能是root账户,要新建一个满足网站的最小权限的账户,但是无论是SQL语句创建还是通过workbench界面创建,都可能会遇到新用户无法登录/修改的问题,各种access deny,解决方案有点儿意想不到,需要检查数据库是否有匿名账户,如果有,删除之,问题解决。

    2.apache不能连mysql的问题

    开发环境用xampp承包了,没遇到过这个问题,但是在CenOS上是独立安装的mysql和apache,就遇到了问题,凡涉及到连接数据库,都失败了

    php页面可以显示的,在php页面里用eche phpinfo();来展示一下环境,会得到一个这样的页面:

    php信息

    这个炒鸡冗长的页面里会向你提供php所在web容器的一切信息,如果能正常连接数据库,其中应该有这么一段:

    mysql可用状态描述

    如果找不到这部分,说明缺少库文件支持,把缺失文件补齐即可。

    另外,网站必然有需要更新维护,CentOS的命令行界面又不友好(对我来说),所以xftp去更新上面的文件,步骤如下:

    1.用xshell登录服务器

    2.打开xftp

    3.左边是本地文件夹,右边是服务器文件夹,直接拖拽文件夹,实现更加(好方便)

    用xftp更新网站文件

    相关文章

      网友评论

        本文标题:零基础做出第一个PHP网站

        本文链接:https://www.haomeiwen.com/subject/cjwucxtx.html