零基础做出第一个PHP网站

技术背景:无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更新网站文件
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容