技术背景:无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里的数据库连接要设定utf86.操作页面元素
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更新网站文件
网友评论