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.路径是文件在服务器存在的真实路径,所以导致不安全

 

posted @ 2017-05-30 12:11  坚持奔跑在路上  阅读(126)  评论(0)    收藏  举报