• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

$PHP_THREE

php 搞代码 3年前 (2022-01-22) 24次浏览 已收录 0个评论
文章目录[隐藏]

本篇文章介绍的是$PHP_THREE,内容挺不错的,有需要的朋友可以参考一下,大家一起来看看吧

PHP_THREE

PhpStorm的使用

PhpStorm的设置

1.设置默认编码字符集

路径:Settings->Editor->File Encodings

2.显示行号

路径:Editor->General->Appearance

3.版权信息

/** * COPYRIGHT (C) ${YEAR} BY ${user} SOFTWARE. ALL RIGHTS RESERVED. * * @author:${user} * @date:${YEAR}/${MONTH}/${DAY} * @since:1.0 * @description: */

4.添加PHP解释器

试着run当前PHP文件,如果没有添加php解释器,会提示”interpreter is not specified or invalid”,此时,点击Fix,添加php解释器(php.exe)。

PhpStorm的常用快捷键

  • Ctrl+j:自动代码补全

  • Ctrl+d: 复制当前行

  • Shift+2:快速定位错误

  • Alt+1:弹出文件列表

  • Ctrl+g:跳转到指定行

  • F4:查找变量来源

  • Ctrl+y:删除当前行

PhpStorm的调试使用

  • step into [F7]:单步执行,遇到子函数就进入并且继续单步执行(简而言之,进入子函数);

  • step over [F8]:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。有一点,经过我们简单的调试,在不存在子函数的情况下是和step into效果一样的(简而言之,越过子函数,但子函数会执行)。

  • step out:当单步执行到子函数内时,用step out就可以执行完子函数余下部分,并返回到上一层函数。
    run to cursor 跳到光标的位置


Cookie

cookie信息会以字符串的形式保存

会话

用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。

要解决的问题

  • 在一个会话过程中,用户会产生一些数据,比如购物车,每个用户查看购物车时,看到自己选的商品,这是怎么实现的?

  • 为什么有些视频网站可以保存你上次看过的记录?

  • 如何保存用户上次浏览的信息,如何保存用户在一定时间内,不用反复登录?

创建cookie

<?php    //演示如何创建cookie信息    //把用户名和密码保存到客户端的cookie    //1:key;2:value;3:interval(秒)    setcookie("name", "hoki", time() + 10);//当前时间+10秒    echo "保存成功";?>
  1. 如果不加第三个参数,cookie不会保存到客户端,当浏览器的会话结束,我们的cookie就失效

  2. cookie只能保存字符串

获取cookie信息

    echo "<pre>";    print_r($_COOKIE);    echo "<pre>";    //获取指定的key对应的值    if(!empty($_COOKIE['name'])){        echo $_COOKIE['name'];        return;    }    echo "cookie失效了";?>
  1. 如果cookie有效时间到,则不能取出;

  2. cookie通过http协议传输到服务器;

  3. 客户端可以保存多个键值对;

  4. cookie也可以保存中文,默认将会对中文进行urlencode进行编码;

  5. cookie可以给不同的键值对指定不同的有效时间

更新cookie信息

就是重置cookie,跟创建cookie一样

删除cookie信息

要删除cookie需要确保它的失效期是在过去,才能触发浏览器的删除机制

  • 删除指的定某个键值对

<?php    //如果要删除某个键,只需要把time()-秒数即可    setcookie("name","",time()-200);    echo "删除name键成功";?>
  • 删除所有的键值对

<?php    //遍历删除    foreach($_COOKIE as $key=>$val){            setcookie("$key","",time()-200);    }    echo "删除所有的键值对成功";?>

cookie的小细节

  • 如果你要删除的cookie没有删除完,则这个cookie在客户端依然是有保留的;如果你把这个网站的所有cookie都删除了,则浏览器会把整个文件都删除据。

  • cookie可以进行md5加密

    setcookie("name", md5("hoki"), time() + 10);

Session

如何实现登陆某个网站后能在任何一个网页上查看用户名?

graph LR浏览器-->|将数据保存到session文件中|session01.phpsession01.php-->|写入|session文件浏览器-->|取出该浏览器保存的session数据|session02.phpsession02.php-->|读取|session文件

为什么选择session而不是数据库或cookie?

  1. 数据库实现起来较为复杂

  2. cookie需要在网络传数据具有不安全性和数据量过大的问题

保存session数据

保存的数据格式: name|s:8:”hoki”;
– name: key
– s: Data Type
– 8: Data Size(Byte)

<?php    echo "<br>--演示如何保存session数据?--<br>";    //1. 初始化session    session_start();//可通过手册获取(函数扩展->Session扩展->Session函数)    //2. 保存数据    $_SESSION['name']="hoki";    //3. session文件可以保存double,integer,bool,array,object等类型    $_SESSION['age']=100;//integer    $_SESSION['isBoy']=true;//bool    //save array    $arr=array("hoki","lin","handsome");    $_SESSION['arr']=$arr;    //save object    class Cat{        private $name;        private $age;        private $intro;        function __construct($name,$age,$intro){            $this->name = $name;            $this->age = $age;            $this->intro = $intro;        }        public function getName(){            return $this->name;        }        public function getAge(){            return $this->age;        }        public function getIntro(){            return $this->intro;        }    }    $cat = new Cat("猫","2","well");    $_SESSION['cat'] = $cat;    echo "保存成功";?>

获取session数据

<?php    echo "<br/>获取session数据<br/>";    session_start();    //1. 获取所有session    echo "<pre>";    print_r($_SESSION);    echo "</pre>";    //2. 通过key来指定获取某个值    echo "名字是:".$_SESSION[name];    $arr = $_SESSION['arr'];    echo "<br>数组的数据是:";    foreach($arr as $key=>$val){        echo "<br>$val";    }    //3. 获取对象    //因为对象没有串行化,所以要把类的定义也搬过来    //当然,也可以把类的定义独立出来,要用到时require_once调用即可    class Cat{        private $name;        private $age;        private $intro;        function __construct($name,$age,$intro){            $this->name = $name;            $this->age = $age;            $this->intro = $intro;        }        public function getName(){            return $this->name;        }        public function getAge(){            return $this->age;        }        public function getIntro(){            return $this->intro;        }    }    $cat = $_SESSION['cat'];    echo "<br>猫的名字是:".$cat->getName();    echo "<br>猫的年龄是:".$cat->getAge();    echo "<br>猫的介绍是:".$cat->getIntro();?>

更新session数据

<?php    session_start();    $_SESSION['name'] = "小明";    echo "更新成功";?>

删除session数据

<?php    session_start();    //1. 删除某一个键值对    unset($_SESSION['name']);    //2. 删除所有键值对,相当于把当前这个浏览器对应的session文件删除    session_destroy();    echo "删除session数据成功";?>

session的特点

  1. 要使用session,都需要初始化session_start();

  2. session文件中可以放入多个键值对,但要注意键不能重复,值则可以为基本数据类型或数组,对象

  3. 如果要获取对象,则需要声明类的定义

  4. 一个会话对应一个session文件

  5. session.gc_maxlifetime = 1440 秒

  6. 在php.ini文件中搜索session.save_path,可以查看session文件的默认保存路径

Cookie与Session的区别

  • Cookie是把用户的数据写给用户的浏览器

  • Session是把用户的数据写到用于独有的$_SESSION中,存在服务器的某个路径的文件中

session的应用例子

F12查看效果更佳;记得清除浏览器缓存;

MyHall.php

<?php    //购物界面    echo "<h1>欢迎购买</h1>";    echo "<a href='ShopProcess.php?bookid=sn001&bookname=三国演义'>三国演义</a><br/>";    echo "<a href='ShopProcess.php?bookid=sn002&bookname=红楼梦'>红楼梦</a><br/>";    echo "<a href='ShopProcess.php?bookid=sn003&bookname=水浒传'>水浒传</a><br/>";    echo "<a href='ShopProcess.php?bookid=sn004&bookname=西游记'>西游记</a><br/>";    echo "<hr/>";    echo "<a href='ShowCart.php'>查看已购商品列表</a>"?>

ShowProcess.php

<?php    //接收用户购买请求并把书存到session中    $bookid = $_GET['bookid'];    $bookname = $_GET['bookname'];    //保存到session中    session_start();    $_SESSION[$bookid] = $bookname;    echo "<br/>购买商品成功";    echo "<br/><a href='MyHall.php'>返回购物界面继续购买</a>";?>

ShowCart.php

<?php    echo "<h1>购物车商品列表</h1><br/>";    session_start();    foreach($_SESSION as $key=>$val){        echo "书号:".$key.";书名:".$val."<br/>";    }    echo "<br/><a href='MyHall.php'>返回购物界面继续购买</a>";?>

禁用cookie的处理

浏览器->工具->Internet选项->隐私->高级

如果用户禁用cookie后,服务器每次session_start();都会创建一个全新的session文件,后果就是无法让多个php页面共享同一份session文件。

有三种方式可以实现在客户端禁用cookie后共享session

  1. 在每个超链接上添加一个PHPSESSID=sessionId;同时在每个页面加入:

    if(isset($_GET['PHPSESSID'])){        session_id($_GET['PHPSESSID']);    }    session_start();
  1. 使用常量SID
    在超链接action ,header(“Location:xx”)可以直接拼接SID常量即可

echo "<a href='ShopProcess.php?bookid=sn004&bookname=西游记&".SID."'>西游记</a><br/>";
  1. 启用session.use_trans_sid=1

如何防止用户非法登录

登录页面

session_start();$_SESSION['loginuser']=$name;

目标页面

session_start();if(empty($_SESSION['loginuser'])){    header("Location: login.php");}

session垃圾回收机制

当某个用户操作session的时候,会使用到session_start(),该函数会调用gc,但是其概率是session.gc_probability/session.gc_pisor;如果网站的规模越大,应该把这个概率设置得越小。


PHP文件编程

获取文件的信息

  • [atime] => 1523005390 该文件上一次被访问的时间戳

  • [mtime] => 1523005397 该文件上一次内容被修改时间戳

  • [ctime] => 1523005390 该文件上一次文件所有者/文件所在组被修改的时间戳

<?php    //第一种方式获取文件信息    //打开文件    $file_path = "test.txt";    //fopen函数返回一个指向文件的指针    if ($fp = fopen($file_path,"r")){        //fstat函数返回文件指针的文件统计信息        $file_Info = fstat($fp);        echo "<pre>";        print_r($file_Info);        echo "</pre>";        //获取文件大小等        echo "<br>文件大小:".$file_Info['size'];        //如果会出现警告,可能是没有在php.ini中设置时区        //修改date.timezone = UTC后重启即可        echo "<br>文件上次修改时间:".date("Y-m-d H:i:s",$file_Info['mtime']);        echo "<br>文件上次访问时间:".date("Y-m-d H:i:s",$file_Info['atime']);        echo "<br>文件上次change时间:".date("Y-m-d H:i:s",$file_Info['ctime']);    }else{        echo "打开文件失败";    }    //关闭文件指针    fclose($fp);    //第二种方式获取文件信息    echo "<br/>".filesize($file_path);    echo "<br/>".fileatime($file_path);    echo "<br/>".filectime($file_path);    echo "<br/>".filemtime($file_path);?>

读文件

<?php    $file_path = "test.txt";    /**************第一种读取方式*******************/    //判断文件是否存在/*  if(file_exists($file_path)){        //打开文件        $fp = fopen($file_path,"a+");        //读内容,并输入        $con = fread($fp,filesize($file_path));        echo "文件的内容是:<br/>";        //在默认情况下,得到内容输出到网页后,不会换行,因为网页不认为\r\n是换行符        $con = str_replace("\r\n","<br/>",$con);        echo $con;    }else{        echo "文件不存在";    }    //关闭文件    fclose($fp);*/    /**************第二种读取方式*******************//*  $con = file_get_contents($file_path);//连关闭的动作都不用写    //在默认情况下,得到内容输出到网页后,不会换行,因为网页不认为\r\n是换行符    $con = str_replace("\r\n","<br/>",$con);    echo $con;*/    /**************第三种读取方式*******************/    $fp = fopen($file_path,"a+");    //设置一次读取1024个字节    $buffer = 1024;    $str = "";    //一边读,一边判断是否到文件结束位置    while(!feof($fp)){        //读内容        $str.= fread($fp,$buffer);    }    //在默认情况下,得到内容输出到网页后,不会换行,因为网页不认为\r\n是换行符    $con = str_replace("\r\n","<br/>",$str);    echo $str;    //关闭文件    fclose($fp);

文件读取的实际用法

连接数据库的时候,可以把用户名,密码等配置到一个外部文件

db.ini

host=127.0.0.1user=adminpassword=123456

readIni.php

<?php    $arr = parse_ini_file("db.ini");    print_r($arr);    echo "<br/>";    echo $arr['host'];    echo "<br/>";    echo $arr['user'];    echo "<br/>";       echo $arr['password'];?>

写文件

<?php    $file_path="C:/test.txt";//路径名的斜杆必须是/    //传统方式写入/*  if(file_exists($file_path)){        //如果是追加内容,则使用a+的方式打开        $fp = fopen($file_path,"a+");        $con = "\r\n这是追加的内容";        for($i=0;$i<10;$i++){            fwrite($fp,$con);        }    }else{        echo "执行失败";    }    echo "添加成功";    //关闭文件    fclose($fp);*/      //第二种方式写入    $con = "\r\nhello";    file_put_contents($file_path,$con,FILE_APPEND);//底层封装了fopen(),fwrite()和fclose()    //如果用第二种方式来循环添加内容的话,效率就没有传统的方式写入高了    //因为第二种方式总是需要走三步执行一次,如果一定要用第二种方式写<p>5本文来源gao!daima.com搞$代!码#网#</p><pre>搞代gaodaima码

入的话, //应该先把字符串拼接完再调用file_put_contents函数写入,效率才高 echo "添加成功";?>

复制文件(image)

<?php    //路径不要带中文,否则会提示失败信息    $file_path = "E:\\phpAll\\Apache24\\htdocs\\file\\jay.jpg";    //路径名转码    $file_target = iconv("utf-8","gb2312","d:\\周杰伦.jpg");    //copy(数据源,目标地址);    if(!copy($file_path,$file_target)){        echo "error";        return;    }    echo "success";?>

文件及文件夹的创建和删除

<?php    $file_path = "d:/hoki_test/a/b";    //创建一个文件夹 /*  if(!is_dir($file_path) && mkdir($file_path)){        echo "create success";        return;    }    echo "create failed";*/      //创建多个文件夹(递归创建) /*  if(!is_dir($file_path) && mkdir($file_path,0777,true)){        //777:可读可写可执行;        echo "create success";        return;    }    echo "create failed";*/      //删除一个文件夹(如果是多级的就删除最外面的那个)    //如果文件夹下有文件,或者目录,均不能删除成功/*  if(is_dir($file_path) && rmdir($file_path)){        echo "delete success";        return;    }    echo "delete failed";*/    //在指定现有目录下创建一个文件并写入内容/*  $file_name = "/test.txt";    $fp = fopen($file_path.$file_name,"w+");    $content = "hello world";    fwrite($fp,$content);    fclose($fp);    echo "create file success";*/    //删除文件    $file_name = "/test.txt";    if (is_file($file_path.$file_name)){        if (unlink($file_path.$file_name)){            echo "delete file success";            return;        }        echo "delete file failed";        return;    }    echo "file none found";?>

php文件上传案例

<!DOCTYPE html><html>    <head>        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />        <title>文件上传案例</title>    </head>    <body>        <h1>上传文件</h1>        <form action="upload.php" method="post" enctype="multipart/form-data">            请选择文件:            <input type="file" name="file" />            <input type="submit" value="上传" />        </form>    </body></html>
<?php    //取文件信息    $arr = $_FILES["file"];    //var_dump($arr);    //加限制条件    //1.文件类型    //2.文件大小    //3.保存的文件名不重复    if(($arr["type"]=="image/jpeg" || $arr["type"]=="image/png" ) && $arr["size"]<10241000 )    {        //临时文件的路径        $arr["tmp_name"];        //上传的文件存放的位置        //避免文件重复:         //1.加时间戳.time()加用户名.$uid或者加.date('YmdHis')        //2.类似网盘,使用文件夹来防止重复        $filename = "./images/".date('YmdHis').$arr["name"];        //保存之前判断该文件是否存在        if(file_exists($filename))        {            echo "该文件已存在";        }        else        {            //中文名的文件出现问题,所以需要转换编码格式            $filename = iconv("UTF-8","gb2312",$filename);            //移动临时文件到上传的文件存放的位置(核心代码)            //括号里:1.临时文件的路径, 2.存放的路径            move_uploaded_file($arr["tmp_name"],$filename);        }    }else{        echo "上传的文件大小或类型不符";    }?>

PHP绘图

像素是密度单位,不是长度单位

步骤

在php.ini中启动gd库(extension=php_gd2.dll)

  1. 创建画布

  2. 绘制需要的各种图形

  3. 输出图像到网页,也可另存

  4. 销毁图片(服务器端的),释放内存

图片格式的比较

  • GIF:压缩率高,但是只能显示256色,会造成颜色丢失,可以显示动画

  • JPG/JPEG:压缩率高(有损压缩),可以用较小的文件来显示,网页上用的比较多

  • png:该格式综合了GIF和JPG的优势,缺点是不能显示动画

基本步骤模板

<?php    //1. 创建画布,默认背景是黑色的    $im = imagecreatetruecolor(800,600);    //修改背景颜色    $white = imagecolorallocate($im,255, 255, 255);    imagefill($im,0,0,$white);    //2. 绘制需要的各种图形    //创建三个颜色    $red = imagecolorallocate($im,255, 29, 0);    $blue = imagecolorallocate($im,6, 81, 244);    $gary = imagecolorallocate($im,178, 174, 170);    //3. 输出图像到网页,也可另存    header("content-type: image/png");    imagepng($im);    //4. 销毁图片(服务器端的),释放内存    imagedestroy($im);?>

例子

<?php//  1. 创建画布,默认背景是黑色的    $im = imagecreatetruecolor(800,600);//  2. 绘制需要的各种图形    //创建一个颜色    $red = imagecolorallocate($im,255,0,0);    //ellipse:椭圆    imageellipse($im,20,20,20,20,$red);    //直线    imageline($im,0,0,400,300,$red);    //矩形    imagerectangle($im,150,150,40,50,$red);    //填充矩形    imagefilledrectangle($im,0,0,40,50,$red);//PHP设计者设计函数名时设计得不好    //弧线(顺时针)    imagearc($im,100,100,50,50,0,180,$red);    //扇形    imagefilledarc($im,100,100,50,50,180,270,$red,IMG_ARC_PIE);    imagefilledarc($im,100,100,50,50,270,360,$red,IMG_ARC_PIE);    //拷贝图像到画布    //加载源图片/*  $srcImage = imagecreatefromjpeg("cat.jpg");    //获取图片的宽和高存于数组中    $srcImageInfo = getimagesize("cat.jpg");    //拷贝源图片到目标画布    imagecopy($im,$srcImage,0,10,200,0,$srcImageInfo[0],$srcImageInfo[1]);*/      //字符串    $str = "hello world,中文";//  imagestring($im,10,400,200,$str,$red);//中文显示乱码    //在字体库C:\Windows\Fonts中找中文字体//  imagettftext($im,10,0,50,50,$red,"STFANGSO.TTF",$str);//  3. 输出图像到网页,也可另存    header("content-type: image/png");    imagepng($im);//  4. 销毁图片(服务器端的),释放内存    imagedestroy($im);?>

饼状统计图的绘制

可封装为一个函数,方便使用

<?php    //1. 创建画布,默认背景是黑色的    $im = imagecreatetruecolor(800,600);    //修改背景颜色    $white = imagecolorallocate($im,255, 255, 255);    imagefill($im,0,0,$white);    //2. 画出扇形    //创建三个颜色    $red = imagecolorallocate($im,255, 29, 0);    $darkred = imagecolorallocate($im,144, 0, 0);    $blue = imagecolorallocate($im,6, 81, 244);    $darkblue = imagecolorallocate($im,0, 0, 80);    $gary = imagecolorallocate($im,178, 174, 170);    $darkgary = imagecolorallocate($im,144, 144, 144);    //立体扇形其实就是多个扇形的叠加    for ($i=200;$i>=150;$i--){        imagefilledarc($im,350,$i,200,150,0,35,$darkblue,IMG_ARC_PIE);        imagefilledarc($im,350,$i,200,150,35,75,$darkgary,IMG_ARC_PIE);        imagefilledarc($im,350,$i,200,150,75,360,$darkred,IMG_ARC_PIE);    }    //在上面加个盖    imagefilledarc($im,350,150,200,150,0,35,$blue,IMG_ARC_PIE);    imagefilledarc($im,350,150,200,150,35,75,$gary,IMG_ARC_PIE);    imagefilledarc($im,350,150,200,150,75,360,$red,IMG_ARC_PIE);    //3. 输出图像到网页,也可另存    header("content-type: image/png");    imagepng($im);    //4. 销毁图片(服务器端的),释放内存    imagedestroy($im);?>

验证码

<?php    echo "<img src=yanzhengma.php>";?>
<?php    function random($len){        $srcstr = "ABCDEFGHIJKLMNONPQRSTUVWXYZ0123456789";        mt_rand();        $strs = "";        for($i=0;$i<$len;$i++){            $strs.=$srcstr[mt_rand(0,35)];        }        return strtoupper($strs);    }    $str = random(4);//随机生成的字符串    $width = 50;    $height = 25;    @header("Content-Type: image/png");    $im = imagecreate($width,$height);    $back = imagecolorallocate($im,0xFF,0xFF,0xFF);    //模糊点颜色    $pix = imagecolorallocate($im,187,230,247);    //字体色    $font = imagecolorallocate($im,41,163,238);    //绘制模糊作用的点    mt_srand();    for($i=0;$i<1000;$i++){        imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pix);      }    imagestring($im,5,7,5,$str,$font);    imagerectangle($im,0,0,$width-1,$height-1,$font);    imagepng($im);    imagedestroy($im);?>

相关推荐:

PHPTree——php快速生成无限级分类_php技巧

php中tree类的使用方法

以上就是$PHP_THREE的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:$PHP_THREE

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址