PHP是现如今十分流行的轻量级语言,经常用来做应用的后端开发,其特点是语法简单,十分容易上手。除了单独做后端,PHP还能够将程序嵌入到HTML文件中执行,非常容易实现简单的前后端交互。而且PHP的运行很轻松,只要下载PHP环境并打开服务,就能通过访问文件的形式执行PHP文件,并且获得其返回的数据了。但是可惜由于很多原因,PHP不太适合复杂和安全性要求高的大应用,所以求职方面,可能不如Java后端等吃香。但是如果你只是需要为自己的应用写个简单的后台,或者是像我一样在学校里做做项目,参加参加比赛,那么PHP还是一个不错的选择的。
 
接下来就正式开始入门内容。首先,基本的语法我就不赘述了,有点编程经验的话自己去看会儿文档,知道个大概就行了,具体的实在不行到时候用到再百度也没事。最核心的就是,被<?php ?> 这个标签包裹下的语句,都会被解析成php代码然后执行。比如下面这个最简单的例子,只要把这个php文件放在PHP环境下,就能够输出内容了。具体的PHP环境安装我就不多说了,常见的有PHPStudy、XAMPP、WAMP等等集成环境,Linux下也只用几条指令就行,也基本上没有什么坑,装好就能直接用了。
 
<?php
echo "Hello World!";
?>
 
明白了PHP大概是怎么运作的,我们就可以利用PHP实现很多功能了,比如说实现最简单的前后端交互,前端通过Ajax发送一个get请求到我们的后端,获取后端返回的数据。
 
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "https://mu-mu.cn/1.php", true);
xmlhttp.send();
xmlhttp.onreadystatechange = function() {
if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
console.log(this.responseText);
}
}
 
这里就会出现第一个小问题了,那就是跨域请求,具体的内容我以后有时间希望能够专门写一篇博文来详细地讲,现在就先说个大概吧。首先,域=协议名+主机名+端口号,只要你访问的域中有一个是不同的,那么你的这次请求就是跨域的,这么做是为了安全性,网络世界可不是法外之地,怎么能随随便便想去哪里就去哪里呢。
 
解决的方法很简单,常用的方法有两种。第一种是把前后端放在同一个域下,这样你的后端接口就只处理来自你部署于同一个域下的应用的请求了。第二种方法是后端进行设置,比如添加允许跨域的header头。这样子所有人都能够访问你的后端了,当然也可以设置白名单稍做限制。关于什么是header头以及更多请求的内容,以后有机会再说吧。
 
<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE");
header('Access-Control-Allow-Headers:x-requested-with,content-type');
return "111";
?>
加上header头之后,打开控制台,再次访问,果然就没有问题了,通过这种方式,我们就实现了最简单的向后端获取数据,不过这样子获取到的数据都是静态的写死的,不能满足我们的大多数需求,所以之后还得连接数据库,以及对数据库进行操作。
 
 
获取数据是没问题了,那怎么向后端发送数据呢?其实也很简单,之前讲过Ajax发送数据的简单方法有两种,一种是放在url种,通过GET方法发送,另一种是放在body里面,通过POST方法发送。
//GET方法只需修改url,通过?参数名=值&参数名=值的形式发送数据
xmlhttp.open("GET", "https://mu-mu.cn/1.php?name=mumu", true);
//后端
$name = $_GET['name'];


//POST方法 POST发送数据的方式多种多样,可以以表单、json、编码字符等形式发送,只需要设置请求头就可以了
let data = "name=mumu";
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlhttp.send(data);
//同样后端获取前端POST数据的形式也是相应变化的,常见的有两种:
$_POST['fieldname']或者$_REQUEST['fieldname']对应x-www-form-urlencoded,也就是表单发送过来的数据
file_get_contents("php://input");可以获取任何POST数据,但是还要自己对数据进行处理
05-10 09:46