PHP基础知识点小结2
浏览器传值
1)表单传值
增加一对form标签,将一些需要提交的数据,在form使用表单元素(input,select,textarea)
a)post传值:数据以post形式传输
<form method=”POST” action=”?”>
<input type=”text” name=”name” />
<input type=”text” name=”age”/>
<input type=”submit” value=”提交”/>
</form>
b)get传值:将数据绑定到URL(名字=值)
2)URL传值
服务器接收数据
get接收
$_GET,接收get方式提交的数据(URL传值),将浏览器提交的数据的名字作为一个数组的下标,值作为对应下标的元素值
$_GET[‘name’] = ‘张三’;
$_GET[‘age’] = 18;
post接收
$_POST,接收post方式提交的数据(form表单)
$_POST[‘name’]
$_POST[‘age’]
post表单提交
注意:html提交数组必须要有表单名字即name字段
GET和POST的区别
1.表单对应的提交方式区别:METHOD=“GET/POST”
2.数据提交过程区别:GET将所有的数据拼接到URL(name=值&name2=值2…),POST提交的数据是看不到的
3.GET方式不安全,POST方式相对安全
4.GET方式传输数据,数据量小(2KB),post方式基本无限制(8M)
5.GET提交数据效率比POST要高
如何选择表单提交方式?
1.如果数据安全性要求高:使用post提交
2.如果数据量比较大,使用post提交
checkbox提交数据
爱好:篮球,足球,羽毛球,乒乓球,网球,台球…
<form>
<input type=”checkbox” name=”爱好” value=”篮球” />
<input type=”checkbox” name=”爱好” value=”足球” />
<input type=”checkbox” name=”爱好” value=”羽毛球” />
<input type=”checkbox” name=”爱好” value=”乒乓球” />
<input type=”checkbox” name=”爱好” value=”网球” />
<input type=”checkbox” name=”爱好” value=”台球” />
</form>
checkbox提交数据
爱好:篮球,足球,羽毛球,乒乓球,网球,台球…
<form>
<input type=”checkbox” name=”爱好” value=”篮球” />
<input type=”checkbox” name=”爱好” value=”足球” />
<input type=”checkbox” name=”爱好” value=”羽毛球” />
<input type=”checkbox” name=”爱好” value=”乒乓球” />
<input type=”checkbox” name=”爱好” value=”网球” />
<input type=”checkbox” name=”爱好” value=”台球” />
</form>
同名checkbox提交数据

以上就出现了一个问题,checkbox的数据不能正确别服务器所接收。
因为PHP会将中括号当做数组的元素来对待,所以只需要在浏览器传递数据的过程中,给name增加一个中括号,让PHP在解析的时候,当做数组处理,从而将多个checkbox的值保存到一个数组中。

保存checkbox数据
因为checkbox往往是多选,PHP最终接收的数据会形成一个数组,但是数组不能存储,需要转化成字符串才能存储。所以,将爱好转换成字符串保存到数据库。
implode:将数组元素变成字符串

checkbox数据显示
将用户之前提交的,选中的数据,在用户进入之后,能够自动勾选上。
如何让checkbox被选中?
checkbox有一个checked属性,一旦某个checkbox拥有该属性,那么就会被勾选上
如何通过用之前保存的提交的数据来判断出来到底哪个checkbox需要被选中?
a) 将用户选中的checkbox变成数组
b) 判断当前的checkbox的值,是否在数组中:in_array(),判断当前元素是否在数组中,如果存在返回TRUE,否则返回FALSE

*******************************************************************************************
数据传输方式
字符数据传输方式
普通的数据传输都是基于此方式。
二进制格式传输
文件的传输:图片,普通文件
文件上传分为两个步骤:
1.客户端用户上传
a)增加文件上传的表单域
b)用户选择上传文件
c)点击上传,将文件发送给服务器
2.服务端接收
form表单使用post方式提交数据,因此使用post接收数据:接收到的是文件的名字
文件上传必须要在服务器端先开启文件上传的功能。(file_uploads = On)(pload_tmp_dir ='')(upload_max_filesize)(max_file_uploads)
post默认提交字符流数据,不能提交二进制数据,如果需要提交二进制数据,需要给表单额外增加一个属性:enctype=”multipart/form-data”
文件上传到服务器的时候,先存放在临时目录里。PHP会用一组变量来保存临时文件。当脚本执行结束,PHP会释放全部的所占内存,因此文件这部分信息都会被操作系统回收,从而看不到临时文件,最终也没有实现文件的上传。
文件上传原理

*******************************************************************************************
文件上传类的封装:
<?php
//上传文件函数
/*
* 文件上传
* @param1 array $file,上传的文件的信息,例$_FILES['file']
* @param2 array $files,允许上传文件的后缀名,给定默认值,例array('gif','png','jpeg','jpg')
*
* @return miexd,成功返回文件的路径,如果失败,返回数组,第一个值是FALSE,第二个是错误信息
*/
function upload($file,$allow = array('gif','png','jpg','jpeg')){
//1. 对$file进行判断,如果不是数组,就不存在上传文件
if(!is_array($file)){
//不是数组
return array(false,'当前不是上传的文件信息!');
}
//2. 文件是否上传成功
//定义一个错误字符串
$errorinfo = '';
switch($file['error']){
case 1:
$errorinfo = '文件超过服务器限制!允许上传的文件的最大值为:' . ini_get('upload_max_filesize');
break;
case 2:
$errorinfo = '文件超过浏览器允许大小!';
break;
case 3:
$errorinfo = '文件只上传成功一部分!';
break;
case 4:
$errorinfo = '没有选中要上传的文件!';
break;
case 6:
$errorinfo = '找不到服务器的临时目录!';
break;
case 7:
$errorinfo = '文件上传路径不可写!';
break;
}
//判断errorinfo
if($errorinfo){
//错误信息存在
return array(FALSE,$errorinfo);
}
//3. 文件类型判断
//获取文件后缀名
$extension = getExtension($file['name']);
//3.1 判断文件后缀是否存在
if(!$extension){
//文件后缀名不存在
return array(false,'当前文件没有后缀名!');
}
//3.2 当前文件是否允许上传
if(!in_array($extension,$allow)){
//文件后缀不允许
return array(false,'当前文件类型不允许上传,允许上传的类型有:' . implode(',',$allow));
}
//4. 上传文件
//4.1 重命名文件:获取一个随机的文件名字
$filename = getRandomFilename();
//拼凑文件全名
$filename .= '.' . $extension;
//4.2 移动文件
if(!@move_uploaded_file($file['tmp_name'],'./uploads/' . $filename)){
//文件移动失败
//将错误信息写入到错误日志
return array(false,'文件上传失败!');
}
//4.3 文件上传成功
return './upload/' . $filename;
}
/*
* 获取文件后缀名
* @param1 string $filename,文件路径
* @return mixed,如果成功返回文件后缀名,如果失败返回FALSE
*/
function getExtension($filename){
//获取文件后缀名
if(strrpos($filename,'.')){
return substr($filename,strrpos($filename,'.') + 1);
}
//如果没有.
return FALSE;
}
/*
* 获取一个随机的名字
* @return string $filename,返回一个随机字符串
*/
function getRandomFilename(){
//随机文件名规则:年月日时分秒+随机字符串(6)
$filename = '';
//获取年月日时分秒
$filename .= date('YmdHis');
//获取一个随机字符串
$str = 'abcdefghijklmnopqrstuvwxyz';
for($i = 0;$i < 6;$i++){
$filename .= $str[mt_rand(0,25)];
}
//返回文件名
return $filename;
}
*******************************************************************************************
文件(目录)操作
文件操作:对文件的增删改查。(文件夹也是文件)
为什么要使用文件操作? 1.有一些数据:不经常被修改,但是又经常被使用,数据量小,使用文件来保存数据(配置文件,xml文件,session文件) 2.系统日志文件:把一些系统错误,保存到日志文件供管理员或者程序员去分析。
文件操作步骤
1.得到文件路径对应的资源
opendir:打开一个目录,需要一个路径参数,返回一个资源
2.需要从资源里获取对应的数据
readdir:读取,从资源里读取一个对应文件,当前文件指针所指向的文件,将文件指针下移一位。返回当前文件的文件名字或者FALSE。可以显示的使用资源参数,也可以不提供,因为系统会向上自动寻找文件路径资源。
目录相关函数
rewinddir:重置目录资源的指针,回到第一个文件(.文件)
closedir:释放目录资源
scandir:浏览器目录,把所有的文件都获得,并存放到一个数组返回
文件相关函数
file_exists:判断文件是否存在。存在返回TRUE,不存在返回false
is_dir:判断给定的路径是否是一个路径,如果是路径返回TRUE,否则返回false
is_file:判断给定的路径是否是一个文件,如果是文件返回TRUE,否则返货false
mkdir:创建文件夹,不能创建同名文件夹(Linux下:必须保证当前文件夹有PHP所在组有权限进行写操作)
rmdir:删除文件夹
getcwd:获取当前操作目录
chdir:改变当前操作目录,代表进入到目标目录
文件操作
对文件内容的增删改查。
file_get_contents():获取文件的全部内容
file_put_contents():向某个文件写入内容
file_put_contents第三个参数用来设定是否覆盖原来的文件内容
FILE_USE_INCLUDE_PATH:表示会覆盖原来的数据
FILE_APPEND:在后面追加数据
文件操作相关函数
copy:拷贝,会保存原文件
unlink:删除文件
rename:重命名文件
filemtime:m代表modify,修改的意思,获取文件最后被修改的时间
filesize:获取文件的长度
fileperms:获取文件的权限(主要针对Linux),返回是一个八进制结果
文件下载
文件下载分为两种方式
html的a标签实现:
a标签实现下载的缺点:
1.导致服务器会自动解析相关文件(如果服务器能够识别)
2.路径是文件在服务器存在的真实路径,所以导致不安全

浙公网安备 33010602011771号