11-Ajax(二)PHP相关知识及语法介绍
PHP基础
服务端web开发
-
在讲解什么是服务端开发之前,让我们先思考几个问题:
-
网站访问:当我们做好了.html的网站,如何让别人(朋友,用户)可以访问到呢?
- 使用U盘拷贝,QQ发送文件等直接将文件共享的方式?---不灵活;
- 将网站放在服务器上,让用户通过网址访问?---绝大多数网站的做法。
-
网站内容更新:如果用户每次访问我们的网站看到的内容都是一样的,在最初的新鲜劲过去以后估计就再也不想访问我们的网站了o(╯□╰)o,那么如何去更新网站的内容呢?
- 当有内容、图片,或者界面需要更新时,直接修改.html文件?---费时费力;
- 通过某种手段,当有新的消息,自动的完成网站的更新?---动态网站。
-
如何实现网站动态化:网站的本质,其实就是一堆按照某种规则排列的字符串而已,如果我们可以通过某种方式,让电脑
动态
生成这些字符串,是不是就实现了网站的动态化?- 想要让电脑干事情,可以通过
编程语言
来实现; - 编程语言的编写位置为
服务器
,因为用户是向服务器要网站的; - 在服务器,通过
编程语言
让用户访问的网站动态化
叫做:服务端web开发
。 - web服务器:提供了web服务的计算机;请求的是HTML:读取并返回、在服务端一般不会对这个html页面进行任何操作;web后台开发:本质是动态生成html、css、js。
- 想要让电脑干事情,可以通过
-
可选开发方式:虽然基本上所有可以返回字符串的编程语言都能够实现这个功能,目前市场主流开发语言有:
Java、PHP、ASP、.Net、Ruby、Python、Erlang
等。虽然可以选择的开发语言有很多种,但是本质都是一样的: -
当用户访问网站了,根据
某些逻辑
,生成对应的HTML、CSS、JS
代码给用户。
PHP简介
-
PHP在众多的编程语言中,是比较容易上手,结合我们搭建的WAMP环境就能够开始学习了。
-
PHP代码执行方式:服务端web编程写好的代码,需要通过浏览器访问服务器,在服务器端执行,然后返回给用户结果,如果直接使用浏览器打开,就会解析为文本。
PHP常见语法
-
这里只列举常用的PHP语法,更为详细的语法教程可以查阅:http://www.w3school.com.cn/php/index.asp
-
注意点:
-
必须放在服务器配置的网站目录中;
-
不要直接用sublime、webstorm运行;
-
必须写在
<?php ?>
标签中; -
执行的位置是在服务端需要通过浏览器请求
.php
页面才能够执行; -
php的逻辑代码不会输出,仅仅只会返回执行完毕的结果。
-
文件定义、注释:PHP文件以
.php
结尾,代码的编写位置在<?php 写在这里?>
,注释的写法跟js一致:
<?php
//这是单行注释
/*
这是多行注释
*/
?>
-
PHP变量规则:
-
变量以
$
符号开头,其后是变量的名称; -
变量名称必须以字母或下划线开头:
$a;
、$b;
、$a1;
、$_abc
; -
变量名称不能以数字开头;
-
变量名称只能包含字母、数字和下划线(
A-z
、0-9
以及_
); -
变量名称对
大小写敏感
($y
与$Y
是两个不同的变量)。 -
补充:
- 下面这些是错误的变量定义:
$1;
、$哈哈;
、$^&*;
; - 下面定义的两个变量是不同的,大写,小写x:
$x;
、$X;
。
- 下面这些是错误的变量定义:
-
数据类型
-
PHP支持的数据类型包括:
字符串、整数、浮点数、布尔、数组、对象、NULLL
(注:由于对象中可以使用函数,故对象的语法在下文中会提及); -
定义字符串时需要注意:
- 单引号:
''
,内部的内容只是作为字符串; - 双引号:
""
,如果内部是PHP的变量,那么会将该变量的值解析;
- 单引号:
-
字符串连接
:不同于JavaScript,PHP中使用.
进行连接
// 字符串
$str = '123';
// 字符串连接
$str2 = '123'.'哈哈哈';
// 整数
$numA = 1; //正数
$numB = -2;//负数
// 浮点数
$x = 1.1;
// 布尔
$a = true;
$b = false;
// 普通数组:数组中可以放数字、字符串、布尔值等等不限制类型
$arr = array('123',123)
//取数组里的数据
$arr[1];
// 关系型数组:类似于json的格式,但是不是“:”,而是使用“=>”分隔键值对,获取通过“["key"]”即可获取
$person = array('name'=>'小李子','age'=>'35','skill'=>'发福');
echo $person['skill'];
- 运算符:PHP中的运算符跟JavaScript中的基本一致,用法也基本一致:
- 算数运算符:
+、-、/、*、%
; - 赋值运算符:
x = y、x += y、x -= y
, 注:这里列举的并不完全,更为详细的PHP运算符教程请查阅:http://www.w3school.com.cn/php/php_operators.asp
<?php
$x=10;
$y=6;
echo ($x + $y); // 输出 16
echo ($x - $y); // 输出 4
echo ($x * $y); // 输出 60
echo ($x / $y); // 输出 1.6666666666667
echo ($x % $y); // 输出 4
?>
- 函数:PHP虽然系统内建了一些函数,但是这不影响我们定义自己的。函数的作用就是在代码中可以重复使用的语法块,页面加载的时候不会执行,只有在被调用的时候才会执行;
// 基础语法
function functionName() {
//这里写代码
}
// 无参数 无返回值的函数
function sayhi(){
echo "Hello World";
}
// 有参数 无返回值的函数
function sayName($name){
echo $name.'你好哦';
}
// 调用
sayName('小狐狸');
// 有参数,参数有默认值的函数
function sayFood($food='西兰花'){
echo $food.'好好吃';
}
// 调用
sayFood('西葫芦');// 如果传入参数,就使用传入的参数
sayFood();// 如果不传入参数,直接使用默认值
// 有参数,有返回值的函数
function sum($a,$b){
return $a+$b
}
sum(1,2);// 返回值为1+2 = 3
- 对象:PHP中允许使用对象这种自定义数据类型;使用时必须先
声明
,实例化
之后才能够进行使用:
// 定义最基础的类
class Fox{
public $name = 'tangtang';
public $age = 10;
}
$fox = new Fox;
// 对象属性取值
$name = $fox->name;
// 对象属性赋值
$fox->name = '小狐狸';
// 带构造函数的对象
class fox{
// 私有属性,外部无法访问
var $name = '小狐狸';
// 定义方法 用来获取属性
function Name(){
return $this->name;
}
// 构造函数,可以传入参数
function fox($name){
$this->name = $name
}
}
// 定义了构造函数 需要使用构造函数初始化对象
$fox = new fox('小狐狸');
// 调用对象方法,获取对象名
$foxName = $fox->Name();
- 内容输出:
echo
,PHP语句直接使用即可;输出字符串推荐使用print_r();
函数;输出复杂数据类型,比如数组,对象,推荐使用var_dump();
函数输出详细信息:
$arr =array(1,2,'123');
echo '123';
// 结果为 123
print_r($arr);
// 结果为 Array ( [0] => 1 [1] => 2 [2] => 123 )
var_dump($arr);
/* 结果为
array
0 => int 1
1 => int 2
2 => string '123' (length=3)
*/
- 逻辑语句:和js中的一样;
- if...else...
$sex = "man";
if ($sex == "man"){
echo "男生";
}else {
echo "女生";
}
- switch...case...
$day = "friday";
switch($day){
case "monday":
echo "感觉自己被床封印了";
break;
case "friday":
echo "哇塞,明天就可以休息咯";
break;
default:
echo "感觉自己被掏空";
break;
}
- 循环语句:
- for循环:
for ($x=0; $x<=10; $x++) {
echo "数字是:$x <br>";
}
- foreach;
$colors = array("red","green","blue","yellow");
// 参数1为循环的对象,参数2会将对象的值挨个取出,直到最后
// 如果循环的是对象的话,输出的是对象属性的值
foreach ($colors as $value) {
echo "$value <br>";
}
输出结果为
/*
red
green
blue
yellow
*/
- while循环:
$num = 0;
while($num <= 10){
echo "报数:"."$num"."<br>";
$num++;
}
- 三元表达式:
$a1 = $a0>2 ? 5:0;
。
header()函数
- php中告诉浏览器按照哪种文本编码解析,是php中直接帮助我们定义好的函数,直接使用即可;
- 用来向客户端(浏览器)发送报头,如果出现中文无法显示,可以尝试在PHP代码顶部添加如下代码设置文本编码:
- 设置编码格式为:utf-8:
header("content-type:text/html; charset=utf-8");
- 设置页面跳转:
- 设置跳转到百度首页:
header("location:http://www.baidu.com");
- 设置页面间隔刷新:
header("refresh:3;url=http://www.taobao.com");
网络数据提交
PHP$_GET
数据获取
-
关于
$_GET
: -
获取get的数据;
-
php帮我们准备好的超全局对象;
-
关系型数组,取值用的是key;
-
跟提交过来的key是相对的,key是表单元素的name属性;
-
有数据大小限制,url长度是有限的。
-
在PHP中,如果想要获取通过
get
方法提交的数据,可以通过$_GET
对象来获取(虽然参数在地址栏中可以查看); -
通过
$_GET['key']
即可获取数据,key是提交的时候表单元素的name属性值。 -
如果想要提交数据:
-
form标签必须要有action属性;
-
method=get,不设置默认是get;
-
form表单中的表单元素必须要有
name
属性。 -
HTML代码:下面就是一个简单的表单代码,将数据提交到01.php,使用get的方式:
<form action="01.php" method="get" >
<label for="">姓名:
<input type="text" name="userName">
</label>
<br/>
<label for="">邮箱:
<input type="text" name= "userEmail">
</label>
<br/>
<input type="submit" name="">
</form>
- PHP代码:
<?php
echo "<h1>GET_PAGE</h1>";
echo 'userName:'.$_GET['userName'];
echo '<br/>';
echo 'userEmail:'.$_GET['userEmail'];
?>
PHP$_POST
数据获取
-
关于
$_POST
: -
获取post的数据;
-
php帮我们准备好的超全局对象;
-
关系型数组,取值用的是key;
-
跟提交过来的key是相对的,key是表单元素的name属性;
-
提交的数据大小是没有限制的,用来上传文件给服务器。
-
在PHP中,如果想要获取通过post方法提交的数据,可以通过
$_POST
对象来获取; -
HTML代码:下面就是一个简单的表单代码,将数据提交到02.php,使用post的方式(注意:代码中的method改为post)
<form action="02.php" method="post" >
<label for="">姓名:
<input type="text" name= "userName">
</label>
<br/>
<label for="">邮箱:
<input type="text" name= "userEmail">
</label>
<br/>
<input type="submit" name="">
</form>
- PHP代码:
<?php
echo "<h1>POST_PAGE</h1>";
echo 'userName:'.$_POST['userName'];
echo '<br/>';
echo 'userEmail:'.$_POST['userEmail'];
?>
POST&GET错误处理
- 当我们直接访问POST&GET页面时由于并没有传递任何数据,会因为
$_GET
或$_POST
不存在对应的key而报错。 - 处理方式:使用
array_key_exists(key, 数组)
函数来进行判断: - 参数1:要检测的key字符串;
- 参数2:检验的数组;
if(array_key_exists('name', $_GET)){
//如果有数据,再去读取
}else{
// 反之,可以执行一些其他的逻辑
}
GET和POST的区别:
-
get:
-
url能够看到参数;
-
有数据大小限制;
-
url长度是有限制的。
-
post:
-
url看不到;
-
提交的数据大小是没有限制的(相对而言,一般是在服务端配置限制);
-
用来上传文件给服务器。
php在实际开发中的使用方式
- 会嵌入到前端工程师写好的.html中,注意:需要把html后缀给成php;
- 在希望被替换的位置使用
<?php php代码?>
进行占位,就能够根据用户提交的数据动态生成界面。
PHP文件上传处理01-$_FILES
对象(上传文件)
-
php中上传的文件,会先以临时文件的方式保存起来,我们将其移动到其他的位置即可;
-
在PHP中能够通过
$_FILE
获取上床的文件; -
浏览器端(客户端)部分代码:
-
注1:form提交数据需要使用
POST
提交; -
注2:在input标签里,type=file;
-
注3:在form中提交数据时,需要在form表单中添加
enctype="multipart/form-data"
属性; -
HTML代码:
<form action="03.fileUpdate.php" method="post" enctype="multipart/form-data">
<label for="">照片:
<input type="file" name = "picture">
</label>
<br/>
<input type="submit" name="">
</form>
- 服务端代码:
-
$_FILES
(可以同时获取多个上传的文件)用法跟$_GET
,$_POST
类似,都是关系型数组; -
#_FILE['key']
:可以获取对应上传的文件
的具体信息(里面包含文件名,临时文件等),这里的key
跟提交时的name
相对应; -
#_FILE['key']['name']
可以获取上传的文件名
; -
#_FILE['key']['tmp_name']
可以获取上传的文件保存的临时目录
;
<?php
sleep(5);//单位秒。 在临时保存的文件夹里面看不到东西,因为立刻就被删除了,提交之后让服务器休息一会,可以看到临时文件夹里面的文件
print_r($_FILES);//可以打印 $_FILES的所有信息
?>
- 现象:
- 点击提交后,服务器没有立即出现反应,而是休息了一会sleep(5);
- 在wamp/tmp目录下面出现了一个
.tmp
文件; -
.tmp
文件一会就被自动删除了; - 服务器返回的内容中,有文件的名字[name] => computer.png,以及上传文件保存的位置D:\wamp\tmp\php3D70.tmp
PHP文件上传处理02-移动文件
-
刚刚演示了
$_FILES
对象的作用,以及PHP接受上传文件时,会先保存在一个临时目录下,那么接下来我们就演示如何将临时目录下面的文件保存起来; -
上传的临时文件,一会就会被自动删除,我们需要将其移动到保存的位置;
-
HTML代码:这部分的代码不需要改变
<form action="03.fileUpdate.php" method="post" enctype="multipart/form-data">
<label for="">照片:
<input type="file" name = "picture">
</label>
<br/>
<input type="submit">
</form>
- PHP代码
move_uploaded_file()
这个函数可以处理文件,详情参考:http://www.w3school.com.cn/php/func_filesystem_move_uploaded_file.asp
Array ( [picture] => Array (
[name] => computer.png
[type] => image/png
[tmp_name] => D:\wamp\tmp\php8913.tmp
[error] => 0 [size] => 5212 )
)
- 其中我们需要通过picture(根据表单标签的name属性决定)获取临时文件名以及上传文件名;
<?php
sleep(5);// 让服务器休息一会,方便我们查看上传的临时文件
// 第一个参数是:要移动的文件
// 第二个参数是:目标位置(写的是相对路径,相对于该php文件的路径)
move_uploaded_file($_FILES['picture']['tmp_name'], './upload/'.$_FILES['picture']['name']);
?>
PHP设置上传文件的大小
- 默认支持的最大上传文件大小为10兆,在使用wamp过程中,如果想要修改上传的文件大小,需要如何设置呢?
修改php.ini
- 步骤:
- 左键点击wamp;
- 选择php;
- 在弹出的窗口中选择
php.ini
; - 在打开的文件中进行修改,具体修改的地方如下“修改内容”;
- 修改完毕,保存并重启wamp。
修改内容
- 使用文本编辑工具的搜索功能找到下列选项 进行修改:
- 设置文件最大上传限制(值的大小可以根据需求修改)
file_uploads = On; //是否允许上传文件 On/Off 默认是On
upload_max_filesize = 32M; //上传文件的最大限制
post_max_size = 32M; //通过Post提交的最多数据
- 考虑网络传输快慢,这里修改一些参数:
max_execution_time = 30000; //脚本最长的执行时间,单位为秒
max_input_time = 600; //接收提交数据的时间限制,单位为秒
memory_limit = 1024M; //最大的内存消耗
PHP与js的区别:
- 定义变量:$a;
- 拼接字符串:使用点.;
- 数组:array("abc",111);array('a'=>111,'b'=>222);
- 双引号使用有区别。