图像处理

裁剪与缩放

裁剪:
利用imagecopyresampled()函数,
imagecopyresampled(dst_image, src_image, dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h)
函数参数说明:
dst_image:目标图象
src_image:源图像资源(要采集的那个图像资源)
dst_x, dst_y:确定一个坐标,把采样到的部分,放到目标图像资源的什么位置。
src_x, src_y:确定一个坐标,确定一个坐标,(是要采样的原图像资源的某个部分的起始坐标)
dst_w, dst_h:确定放在目标图象资源上的尺寸
src_w, src_h:确定了裁剪部分的尺寸。

<?php
header('Content-type:image/jpeg');
$img=imagecreatefromjpeg('images/2.jpg');
$img1=imagecreatetruecolor(300, 300);
imagecopyresampled($img1, $img, 100, 100, 0, 0, 200, 200, 200, 200);
imagejpeg($img1);
imagedestroy($img1);//两个都要销毁。
imagedestroy($img);
?>

缩放:
demo示例:

<?php
header('Content-type:image/jpeg');
$width=200;
$img=imagecreatefromjpeg('images/2.jpg');
$imgWidth=imagesx($img);//得到源图像(需要缩小的图片)的x轴坐标
$imgHeight=imagesy($img);//得到源图像(需要缩小的图片)的y轴坐标
$height=$width/($imgWidth/$imgHeight);//确定放到目标图象上的尺寸,这里是全部放上去。所以是整个图片的尺寸
$img1=imagecreatetruecolor($width, $height);创建一个与源图像尺寸相同的图像。
imagecopyresampled($img1, $img, 0, 0, 0, 0, $width, $height, $imgWidth, $imgHeight);
imagejpeg($img1);
imagedestroy($img1);
imagedestroy($img);
?>

上面为缩小示例,等比例缩放,不仅是尺寸缩小了,而且它的图片所占空间(大小)也变小了。则用HTML的CSS进行缩小的时候,他的所占空间大小是不会变的,而且画质可能会有变化。

文件与目录操作

PHP可以在服务器上生成目录、创建、编辑、删除、修改文件属性等操作

判断普通文件和目录

1. is_file()//判断给定文件名是否为一个正常的文件

2. is_dir()//判断给定文件名是否为一个目录

文件属性

1. file_exists()//检查文件或目录是否存在(返回true或false)
2. filesize()//取得普通文件大小(单位是字节)//参数放文件名或文件路径
3. is_readable()//判断给定的文件是否可读
4. is_writeable()//判断给定文件是否可写
5. filectime()//获取文件的创建时间
6. filemtime()//获取文件的修改时间
7. fileatime()//获取文件的上次访问时间
8. stat()//获取文件大部分属性值

目录的基本操作

1. basename()//返回路径中的文件名部分
2. dirname()//返回路径中的目录部分
3. pathinfo()//返回文件路径的信息
4. opendir()//打开目录句柄
5. readdir()//从目录句柄中读取条目,返回目录中下一个文件的文件名
6. rewinddir()//倒回目录句柄
7. closedir()//关闭目录句柄
8. mkdir()//新建目录
9. rmdir()//删除指定的空目录
10. scandir()//列出指定路径中的文件和目录

文件的基本操作

1. fopen()//打开文件或者URL
2. fread()//读取文件
3. fgets()//从文件指针中读取一行
4. feof()//测试文件指针是否到了文件结束的位置
5. fwrite()//写入文件   返回值为写入的字节数
6. rewind()//倒回文件指针的位置
7. flock()//轻便的咨询文件锁定
8. ftruncate()//将文件截断到给定的长度
9. fclose()//关闭一个已打开的文件指针
10. file()//将整个文件读入一个数组中
11. copy()//拷贝文件
12. unlink()//删除文件
13. file_get_contents()//将整个文件读入一个字符串
14. file_put_contents()//将字符串写入文件中
15. rename()//重命名一个文件或目录
16. readfile()// 读入一个文件并写入到输出缓冲
17. fseek()//在文件指针中定位

文件上传

文见上传的过程是自动的,不需要管。上传的文件默认是放在一个临时的目录里面的,要做的就是把临时目录里的文件移动到需要它的地方就可以了。

1.html标签需要做的上传设置

form标签属性设置

  • method设置为post

  • enctype设置为multipart/form-data

  • form表单中设置隐藏类型的input其中name值设置为MAX_FILE_SIZE,value值设置为需要限制的上传文件的大小

2.在服务器端通过PHP处理上传文件,设计以下几条信息

在phpstudy中的设置路径:D:\phpStudy\PHPTutorial\php\php-5.4.45-nts

配置项 可能值 功能描述
file_uploads On 确定服务器上的PHP脚本是否可以接受http文件上传
memory_limit 128M 设置脚本可以分配的最大内存量,防止失控的脚本独占服务器内存
upload_max_filesize 2M 限制PHP处理上传文件的最大值,此值必须小于post_max_size的值
post_max_size 8M 限制通过POST方法可以接受的信息最大量
upload_tmp_dir 没有设定,自己设置一下 文件上传存放的临时路径,可以是一个绝对路径,这个目录对于拥有此服务器进程用户必须是可写的。

$_FILES多维数组,用于存储各种与上传有关的信息

$_FILES['file']['name']				客户端机器文件的原名称,包含扩展名
$_FILES['file']['size']				已上传文件的大小,单位为字节
$_FILES['file']['tmp_name']			文件上传之后,在服务器端存储的临时文件
$_FILES['file']['error']			文件上传时产生的错误
    0:表示没有发生任何错误,文件上传成功
    1:表示上传文件的大小超出在PHP配置文件中upload_max_filesize选项限制的值
    2:表示上传文件大小超出了HTML表单中MAX_FILE_SIZE选项所指定的值。
    3:表示文件只被部分上传
    4:表示没有上传任何文件
$_FILES['file']['type']				获取客户端上传文件的MIME类型,MIME类型规定了各种文件格式的类型,每种MIME类型都是由/分隔的主类型和子类型组成

PHP的文见上传处理函数,用于上传文件的后续处理

is_uploaded_file()判断指定的文件是否通过http post上传的
move_uploaded_file()文件上传后,首先会储存于服务器的临时目录中,可以使用该函数将上传的文件移动到新位置

文件的下载

1.发送指定的文件MIME类型的头信息

header('Content-type:MIME类型');

2.指定下载文件的描述

header('Content-Disposition:attachement;filename=文件名称');

3.指定下载文件的大小

header('Content-Length:文件大小');

4.读取文件内容至输出缓冲区

readfile();

关于fileinfo扩展。可以用来返回文件的MIME类型

$fileinfo=finfo_open(FILEINFO_MIME_TYPE);

打开资源,最后要记得用fileinfo_close()释放掉资源

会话控制

关于记录什么的,随时看随时学,只这一条链接就够了
cookie百度百科
Augenstern
1.向客户端电脑中设置cookie
setcookie()
2.在服务器端上读取cookie的内容
$_COOKIE
3.将多维数组应用于cookie中

setcookie("member[name]",'j4y');
setcookie("member[email]",'123456789@qq.com');

4.删除cookie

setcookie("member",time()-1);//时间单位是秒。
//补充
setcookie()有第四个参数,设定有效存放路径“/”表示web根目录,web下的所有目录有效。
默认目录是当前目录。

session

session技术与cookie相似,用来储存使用者的相关资料,但是最大的不同之处在于Cookie是将资料储存在客户端电脑中,而Session则是将数据存放在服务器上。
Augenstern
1.开启session

session_start();

开启一个会话,或者打开一个已存在的会话。
2.使用session存储数据

session_start();
$_SESSION['username']='j4y';
$_SESSION['email']='123456789@qq.com';

3.注销变量与销毁session

<?php
session_start();//打开要销毁的会话
session_unset();//free all session variables
session_destory();//销毁一个会话中的全部数据
setcookie(session_name(),'',time()-3600);//销毁保存在客户端的卡号(即session_id)
?>

基于cookie和session的登录页面

基于cookie

//login.php
<?php
header('Content-type:text/html;charset=utf-8');
if (isset($_POST['submit'])){
    if (isset($_POST['username']) && isset($_POST['password']) && $_POST['username']==='j4y' && $_POST['password']==='123456'){
        if (setcookie('username',$_POST['username'],time()+3600)){
            header('Location:1.php');//跳转到指定网页
        }
        else{
            echo 'cookie设置失败!';
        }
    }else{
        echo '对不起,登录失败,请检查您的用户名或者密码是否正确,注意密码安全,嘻嘻!';
    }
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8" />
    <title>请登录</title>
</head>
<body>
<form method="post" action="login.php">
    姓名:<input type="text" name="username" />
    密码:<input type="password" name="password" />
    <input type="submit" name="submit" value="登录" />
</form>
</body>
</html>

Augenstern

基于session

登录页面

//login.php
<?php
session_start();
header('Content-type:text/html;charset=utf-8');
if (isset($_SESSION['username']) && $_SESSION['username']==='j4y'){
    exit('您已登录,请不要重复登录');
}
if (isset($_POST['submit'])){
    if (isset($_POST['username']) && isset($_POST['password']) && $_POST['username']==='j4y' && $_POST['password']==='123456'){
        $_SESSION['username']=$_POST['username'];
        header('Location:skip.php?url=j4y.php&info=登录成功,正在跳转中····');
    }else{
        echo '对不起,登录失败,请检查您的用户名或者密码是否正确,注意密码安全,嘻嘻!';
    }
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8" />
    <title>请登录</title>
</head>
<body>
<form method="post" action="login.php">
    姓名:<input type="text" name="username" />
    密码:<input type="password" name="password" />
    <input type="submit" name="submit" value="登录" />
</form>
</body>
</html>

登录进去后显示的页面

//j4y.php
<?php
session_start();
header('Content-type:text/html;charset=utf-8');
if (isset($_SESSION['username']) && $_SESSION['username']==='j4y'){
    echo "欢迎回来!";
    echo "<a href='logout.php'>注销</a>";
}else{
    echo "<a href='login.php'>请登录</a>";
}
?>

登出(注销)页面

//logout.php
<?php
session_start();
header('Content-type:text/html;charset=utf-8');
if (isset($_SESSION['username']) && $_SESSION['username']==='j4y'){
    session_unset();
    session_destroy();
    setcookie(session_name(),'',time()-3600,'/');
    header('Location:skip.php?url=j4y.php&info=注销成功,正在跳转中···');
}else{
    header('Location:skip.php?url=j4y.php&info=注销失败,请您检查网络连接是否成功,并稍后再试!');
}
?>

跳转页面

//skip.php
<?php
if (!isset($_GET['url']) || !isset($_GET['info'])){
	exit();
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
	<meta charset="utf-8" />
	<meta http-equiv="refresh" content="3;URL=<?php echo $_GET['url']?>">
	<title>正在跳转中···</title>
</head>
<body>
	<div style="text-align: center;font-size: 20px;"><?php echo $_GET['info'] ?>3秒后自动跳转!</div>
</body>
</html>

经过这次学习,学到了很多有趣的东西,虽然同样是我不喜欢的敲代码,但是不知道为什么,我自己学编程语言,会有点成就感,又学到了技能,感觉很充实。继续加油。
Augenstern