3核心技术

[TOC]

1.Cookie

Cookie 和 session 是两种不同的存储机制。cookie 是从一个外部页面到下一个页面的数据传递的方法,它一般是存储在客户端的。Session 是让数据在页面当中具有持续有效的一个方法。他一般是存储在服务器端。

1.1 什么是 cookie

Cookie 是一种在客户浏览器端存储数据,并且以此来去跟踪和识别用户的一种机制。简单的说呢,cookie 是 Web 服务器暂时存储在用户的硬盘上的一个文本文件。
web 服务器可以通过 Cookie 包含的信息来筛选或维护这些信息。用来判断 HTTP 传输的状态。

1.2 创建 cookie

在 PHP 中通过 setcookie()函数创建 Cookie,在创建 Cookie 之前,要了解 Cookie 是 HTTP 头标的组成部分。

bool setcookie(string name[,string value[,int expire[,string path[,string domain[,int secure]]]]]);
参数 说明
name Cookie 的变量名
value Cookie 变量的值,存储在客户端,不能保存敏感信息
expire Cookie 的失效时间,expire 是标准的 UNIX 时间标记,可以用 time()函数或 mktime()函数获取。
path Cookie 在服务器端的有效路径
domain Cookie 有效的域名
secure Cookie 是否仅通过安全的 HTTPS,值 0,1(如果值为 1.则 cookie 只能在 HTTPS 连接上有效。如果为 0,则 cookie 在 HTTP 和 HTTPS 连接上均有效)
<?php
setcookie('un','huskyuncle');
setcookie('pw','123456',time()+60);//设置Cookie有效时间为60秒
?>

1.3 读取 cookie

通过超全局变量数组$_COOKIE[]来读取浏览器端的 Cookie 值

$un=$_COOKIE['un'];
$pw=$_COOKIE['pw'];



if(!isset($_COOKIE['visittime'])){
    setcookie('visittime',date('y-m-d H:i:s'));
    echo '欢迎第一次访问网站';
}else{
    setcookie('visittime',date('y-m-d H:i:s'),time()+5);
    echo "您上次访问的时间为:".$_COOKIE['visittime'];
    echo '<br>';
}

echo '您本次访问的是时间'.date('y-m-d H:i:s');

<table> <tr><td bgColor="orange"><strong>注: 如果未设置Cookie的失效时间,则在关闭浏览器是自动删除Cookie数据,如果设置了失效时间,浏览器会记住Cookie数据,即使重启计算机,只要时间不到,都依然有效。</strong></td></tr></table>

1.4 删除 cookie

1.使用 setcookie()函数删除 Cookie

setcookie('un','',time()-1);

2.在浏览器中手动删除

1.5 Cookie 的生命周期

如果 Cookie 不设定失效时间,就表示它的生命周期,就为浏览器会话的期间的这个时间。只要关闭浏览器,Cookie 就会自动消失。这种 cookie 被称之为叫会话 cookie。一般情况下,啊,不存在硬盘上的,而是保存在这个内存里边。好了我把
如果设置失效时间,浏览器会把 cookie 保存到硬盘上,再次打开浏览器的时候,依然会有效,只要时间未过期,就一直有效。直到到达有效时间。
还有一点啊,虽然呢,cookie 可以长期保存在客户端的浏览器当中。因为浏览器最多允许存储 300 个 cookie 文件。而且每一个 Cookie 文件支持最大容量只有 4kb。每一个域名最多只支持 20 个 cookie。如果达到限制,浏览器会自动随机的删除 cookie 文件。

2. Session

2.1 什么是 session

Session 在翻译的时候呢也翻译为“会话”。他原本的意思就是指,有始有终的一系列的动作或者消息。比如你打电话的时候从拿起电话拨电话号码一直到挂断电话这一系列的过程就可以称之为一个 Session。
启动一个 session 会话时,会生成一个随机且唯一的 session_id。也就是 session 的文件名。session_id 存储在服务器的内存中。当你关闭页面的时候,这个 id 会自动注销。重新再登录这个页面的时候呢,会再次生成一个随机且唯一的 id。

2.2 创建 session 会话

创建一个会话需要的步骤
启动会话->注册会话->使用会话->删除会话
1.启动会话 注册会话
启动 PHP 会话的方式有两种方式:1、使用 session_start()函数,2.使用 session_register()函数为会话创建一个变量来隐含的启动会话

session_start();
$_SESSION['username']='huskyuncle'

2.使用会话

$_SESSION['username'];

3.删除会话 1.删除单个

unset($_SESSION['username']);

2.删除多个

$_SESSION['username']=array();

3.结束当前会话

session_destroy();

2.3 Session 设置时间

1.session_set_cookie_params() 设置 session 的失效时间,这个函数是 Session 结合 Cookie 设置失效时间。

$time=1*60;//设置Session的失效时间
session_set_cookie_params($time);
session_start();
$_SESSION['username']='huskyuncle';

此函数在一些浏览器上会出现问题。所以一般建议手动设置。
2.使用 setcookie()可以设置 Session 的失效时间,

session_start();
$time=1*10;
setcookie(session_name(),session_id(),time()+$time,'/');
$_SESSION['user']='huskyuncle';

3 图形图像的处理

3.1 创建一个图像

使用 GD2 函数库可以实现对各种图形图像的处理,先使用 GD2 函数库来创建画布。通过 imagecreate()实现.

<?php
header('content-type:image/gif');//定义输出的图像类型
$img=imagecreate(200,100);// 创建一个画布
imagecolorallocate($img,255,0,0);//设置图像的背景颜色
imagegif($img);//输出图像
?>

3.2 在图片上添加文字

使用 imageTTFText()函数将文字以 TTF 字体输出在图像中。 1.使用 header()函数定义输出的图像类型。
2.imagecreatefromjpeg()函数载入图片。
3.imagecolorallocate()函数设置输出字体颜色。 4.定义输出的中文字符串所使用的字体。 5.通过 iconv()函数对输出的中文字符串的编码格式进行转换。 6.使用 imageTTFText()函数向图片中添加文字。 7.创建图像,释放资源。

header('content-type:image/jpeg');
$img=imagecreatefromjpeg('imgs/timg.jpeg');
$textcolor=imagecolorallocate($img,255,0,0);
$font = 'arial.ttf';
$text=iconv('gb2312','utf-8',"Hello Word");
imageTTFText($img,200,0,500,300,$textcolor,$font,$text);
imagejpeg($img);
imagedestroy($img);

4 文件处理

文件处理包括读取、关闭、重写等。

4.1 打开/关闭文件

打开/关闭文件使用 fopen()函数和 fclose()函数。(千万小心,别误删了文件)
1.打开文件/关闭文件

resource fopen(string filename,string mode[,bool user_include_path]);
mode 模式名称 描述
r 只读 -
r+ 读写 -
w 只写(覆盖写入) -
w+ 读写 -
a 追加 追加模式打开文件,如果该文件已有内容,则从文件末尾开始追加内容,如果该文件不存在,会创建文件
$fres=fopen('testFolder/test1.txt','r');//以指定模式打开文件
// 对文件进行操作
fclose($fres);//操作完成后关闭文件

4.2 读写文件

1.从文件中读取数据

  • fread()函数 按照字符串长度读取文件
$fres=fopen('testFolder/test1.txt','r');
$str=fread($fres,10);
echo $str;
  • fgets()函数 按行读取文件
// 打开文件资源
$fres=fopen('testFolder/test1.txt','r');
// echo fgets($fres).'<hr>';
// echo fgets($fres).'<hr>';
// echo fgets($fres).'<hr>';
// echo fgets($fres).'<hr>';
// echo fgets($fres).'<hr>';
// echo fgets($fres).'<hr>';
// echo fgets($fres).'<hr>';
// echo fgets($fres).'<hr>';
// echo fgets($fres).'<hr>';
while($str=fgets($fres)){
    echo $str;
}
fclose($fres);
  • file() 函数 不需要调用 fopen 函数
$a=file('./testFolder/test1.txt');
// 数组  每行的内容是数组的元素
var_dump($a);
  • file_get_contents() 函数 不需要调用 fopen 函数
$a=file_get_contents('./testFolder/test1.txt');
var_dump($a);

2.文件写入

  • fwrite();
$resource=fopen('./testFolder/test1.txt','w');
// 写入内容
$res=fwrite($resource,'湖水库鱼cn饿了阿萨德解放军;啊');
var_dump($res);
fclose($resource);
  • file_put_contents() 覆盖写入
// 最常见的 写入(覆盖写入)
$res=file_put_contents('./testFolder/test2.txt',date('y-m-d H:i:s'));
echo $res;

4.3 操作文件

php 除了可以对文件进行读写之外,对文件本身同样也可以进行操作。比如说复制重命名,查看修改日期,等等都可以。

函数 说明 举例
php bool copy(string path1,string path2) 将文件从 path1 复制到 path2,成功 true,失败 false copy('test.txt','./../demo/new.txt')
php bool rename(string filename1,string filename2) 把 filename1 重命名为 filename2 rename('./1.txt','./2.txt')
php bool unlink(string filename) 删除文件,成功 true,失败 false unlink('1.txt')
php fileatime(string filename) 返回文件最后一次被访问的时间 fileatime('1.txt')
php array pathinfo(string name[,int options]) 返回一个数组,包含文件 name 的路径信息,有 dirname,basename,extension,filename,设置要返回的信息,有 PATHINFO_DIRNAME,PATHINFO_BASENAME,PATHINFO_EXTENSION
php file_exists(string filename) 判断文件是否存在
php is_file(string filename) 判断文件是否存在

5.目录处理

5.1 打开/关闭目录

1.打开目录
使用 opendir()函数打开目录

resource opendir(string path);

2.关闭目录
使用 closedir()函数关闭目录

closedir(resource $res);

5.2 浏览目录

1.使用 scandir()函数

array scandir(string directory[,int string_order])
$path='./../../02核心技术';
$res=scandir($path);
echo json_encode($res);

2.readdir() 函数

$resource=opendir('./');
while($res=readdir($resource)){
    echo $res.'<br>';
}

5.3 操作目录

函数 说明 举例
bool mkdir(string pathname) 新建一个指定的目录 mkdir('temp');
bool rmdir(string pathname) 删除所指定的目录,该目录必须是空的 rmdir('temp');
string getcwd() 取得当前工作的目录
bool rename(oldpath,newpath) 修改目录
fileatime(path) 返回修改时间
filectime(path) 返回创建时间
bool is_dir(path) 判定path是否是目录
bool is_file(path) 判定path是否是文件
// 创建目录
$path = './temp';
if (file_exists($path)) {
 echo '目录已经存在';
} else {
 $res = mkdir('./temp');
 var_dump($res);
}
// 删除空目录
$res=rmdir($path);
var_dump($res);
// 删除非空目录 
function delNotEmpDir($path)
{
    if(file_exists($path)){
        // 给一个指定的目录 浏览目录
        $dirArr = scandir($path);
        //  遍历目录 挨个操作
        foreach ($dirArr as $val) {
            //  不处理 . 和..两个目录
            if ($val == '.' || $val == '..') {
            } else {
                //   开始处理  只处理文件 不处理目录(因为目录不为空)
                //   先判断是否是目录
                $tmpPath = $path . '/' . $val;
                if (is_dir($tmpPath)) {
                    delNotEmpDir($tmpPath);
                } else {
                    unlink($tmpPath);
                }
            }
        }
        rmdir($path);
    }else{
        echo '目录不存在';
    }
}

5.4 修改目录权限

chmod($pathname,权限);

位数 说明
第一个数字 永远不变的 0
第二个数字 当前用户的权限
第三个数字 admin和当前的用户和用户组使用权限
第四个数字 表示所有人的使用权限

权限分别使用3个值:

说明
1 执行权限
2 写入权限
4 读取权限

6. 文件上传

要想去顺利地实现这个上传功能,我们要在php.ini这个文件里面去修改它的配置.

  • file_uploads: 如果值为true,说明服务器支持上传,如果为off,则不支持
  • upload_tmp_dir:上传文件临时目录,文件被成功上传之前,文件首先存放到临时目录中的。
  • upload_max_filesize: 服务器允许上传的文件的最大值,以MB为单位
  • max_execution_time:PHP中一个指令所能执行的最长时间,单位 秒
  • memory_limit: PHP中一个指令所分配的内存空间。MB

6.1 预定义变量$_FILES

$_FILES变量它存储的是上传文件的相关信息。对于我们去完成上传文件的这个功能提供一些参数信息。

属性名 说明
$_FILES[filename][name] 上传的文件的 文件名
$_FILES[filename][size] 上传的文件的大小,单位是字节
$_FILES[filename][tmp_name] 文件上传时,首先在临时目录中被保存成一个临时文件
$_FILES[filename][type] 文件的类型
$_FILES[filename][error] 上传文件的结果。如果值为0,上传成功

先在a.html 页面完成表单元素的创建,使用<input type="file">元素提供上传文件的入口。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="./upload.php" method="POST" enctype="multipart/form-data">
        <input type="file" name="upload_file">
        <input type="submit" value="提交">
    </form>
</body>
</html>

6.2 文件上传函数

move_uploaded_file(string filename,string destinationnpath)函数上传文件存储到指定的位置。
创建upload.php 文件用来处理客户端上传过来的文件的信息,包括文件的存储。

// 判断是否有上传文件
if(!empty($_FILES['upload_file']['name'])){
    if($_FILES['upload_file']['type']=="image/png"){
        $newpath=time().'.png';
    }
    $res=move_uploaded_file($_FILES['upload_file']['tmp_name'],'./uploads/'.$newpath);
    echo '上传成功';
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • 一、会话控制(session与cookie) 1.cookie简介 Cookie是存储在客户端浏览器中的数据,我们...
    空谷悠阅读 619评论 0 5
  • 背景在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cooki...
    时芥蓝阅读 2,357评论 1 17
  • 注:本文转载自前端大全 背景 在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称...
    楠小忎阅读 669评论 0 0
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 3,644评论 2 7
  • 幸福理我很遥远,或者说,它不应该是一个男人追寻的吧? 我老喜欢自讨没趣,每天做着毫无意义的事情,生活没有规律,干事...
    华丽的凋零丶阅读 391评论 0 1