php--编程

作者: DragonRat | 来源:发表于2018-05-21 18:38 被阅读2次

作者:烨竹

一、前后台数据传递

前台数据提交:get,post
后台数据接收:$GRT,$POST,$REQUEST
特殊表单提交:


二、文件上传

前台部分
form表单:
action属性要指向php文件,
method属性要设置为post
enctype 用于设置数据的传递方式
取值:
(默认的)application/x-www-url-encoded 只能上传文本数据
multipart/form-data 不仅仅传递文本数据,还可以进行文件上传

后台处理封装如下:

<?php
/**
 * @Author: Marte
 * @Date:   2018-03-07 21:24:31
 * @Last Modified by:   Marte
 * @Last Modified time: 2018-03-08 21:59:09
 */
  $author=$_POST["author"];
  $introduce=$_POST["introduce"];

  echo $_FILES["filename"]["size"];
  if($_FILES["filename"]["size"]>1024*1024){
    echo "<br>上传文件不能超过2M<br>";
    exit();
  }


  $type=$_FILES["filename"]["type"];
  if($type!=="image/jpeg" && $type!=="image/jpg"){
    echo "<br>只能上传图片格式<br>";
    echo $type;
    exit();
  }
  if(is_uploaded_file($_FILES["filename"]["tmp_name"])){
       //把文件转存到你希望的目录iconv===>转换字符编码
    $uploadFile=$_FILES["filename"]["tmp_name"];
    $user_path=$_SERVER["DOCUMENT_ROOT"]."/file/up/".$author;
    if(!file_exists($user_path)){
        mkdir($user_path);
    }
    $file_true_name=$_FILES["filename"]["name"];
            $move_to_file=$user_path."/".time().rand(1,1000).substr($file_true_name,strrpos($fil    e_true_name,"."));
    if(move_uploaded_file($uploadFile,iconv("utf-8","gb2312",$move_to_file))){
        echo "上传成功";
    }else{
        echo "上传失败";
    }
  }
?>

三、MYDQL数据库操作

登陆mysql:mysql_connect('host:port','user','password');
设置客户端字符集:mysql_query(sql);
选择数据库:mysql_select_db(‘数据库名’);
mysql_error(); 用于获取最近执行的一条sql的错误信息,如果没错误返回的是’’
mysql_errno(); 用于获取最近执行的一条sql的错误代码,如果没错误返回的是0

<?php 
header('content-type:text/html;charset=utf-8');
//连接数据库
$mysqli = mysqli_connect('127.0.0.1:3306','root','root','blog') or die('数据库连接失败');
    //设置客户端字符集
  $sql ='set names utf-8';
  $res = $mysqli -> query($sql) or die('2');
  //增删改查
   $sql ="select username from tp_admin where username = '$username' and password='$password'";

   $res = $mysqli -> query($sql)  or die('3');;  
if(mydql_errno()){
  echo 'sql语句错误';
  echo '错误代码:',mysql_error(),'<br>';
  echo '错误信息:',mysql_error(),'<br>';;
}
?>

四、文件和目录操作

文件相关信息:
file_exists(filename);文件是否存在
filemtime($filename);用于判断文件的最后修改时间
filesize(filename) ;用于判断文件的大小
basename(path);用于获取path字符串的文件名 path是一个表示文件的完整路径
realpath(filename);用于规范文件的路径,如果不存在返回false,如果存在,如果是相对路径会转换为绝对路径

打开文件 :fopen(filename,mode)
filename是一个表示文件的字符串
mode表示的打开的模式,取值
如果打开文件成功会返回资源类型(stream)

关闭文件fclose(handle);
handle是使用fopen()函数的返回值。

写入文件
fwrite(handle,data);
handle是fopen()函数返回的值,data是所要写的数据。
file_put_contents(filename,data);
filename是一个表示文件名的字符串
data是所要书写的数据

读取文件内容:
fgetc(handle);
handle是fopen函数的返回值
每次只读取1个字节
fgets(handle【,len】);
handle是fopen函数的返回值
每次只读取len-1个字节,如果len省略表示的是1024,如果遇到换行回车,会结束读取
fgetstring(handle,len)
handle是fopen函数的返回值
每次只读取len-1个字节,如果遇到换行回车,不会结束读取
ile(filename)
filename是一个表示文件的字符串
将文件的每一行,转换为数组的一个元素
readfile(filename)
filename是一个表示文件的字符串
将读取到的文件的内容,直接放到输出缓存。
file_get_contents(filename);
filename是一个表示文件的字符串
用于读取文件的全部内容,并返回

拷贝文件
copy(source,dest)
拷贝一个文件,同时可以进行改名

删除文件
unlink(filename)
filename是一个表示文件的字符串

文件的判断
is_file(filename);
主要用于区分文件与文件夹

文件指针(了解)
fseek(handle,n【,whence】); 用于移动文件的指针
n表示的所要移动的位置
whence表示相对于谁进行移动,取值:
SEEK_SET (缺省)相对于文件头部
SEEK_CUR 相对于当前位置
SEEK_END 相对于文件不尾部
ftell(handle); 用于获取文件的指针

文件锁(了解):flock(handle,type)
handle是fopen函数的返回值
type 是锁的类型,取值:
LOCK_EX 独占锁
LOCK_UN 解锁

目录操作

创建目录
mkdir(path【,mode,【recursive】】);
主要有于创建一个文件夹
path 所要创建文件夹
mode 所要创建的文件夹的权限(linux)
recursive 如果是true可以可以创建多层文件夹

打开目录
opendir(folder)

关闭目录
closedir(handle);

目录重命名
rename(source,dest)
用于对文件进行更名

删除目录
rmdir(folder);
用于删除文件夹
注意删除文件夹,文件夹必须为空,而且不能一次删除多级

读取目录内容
readdir(handle)
handle是个opendir函数的返回值
用于读取文件夹的内容每次只读取一个条目录
注意:不能读取子文件夹中的内容

扫描目录
scandir(folder)
用于扫描文件夹,一次性将当前文件夹中所有的内容都读取出来,并以数组的形式返回。
注意:不能读取子文件夹中的内容

判断文件夹还是文件
is_dir(dir);

案例:遍历文件夹
①、使用函数遍历指定文件夹的当前层级的内容(不包含子查询)



②、将文件夹以红色输出,文件以蓝色输出



③、如果是文件夹再遍历

五、HTTP协议

在PHP中也允许我们通过调用header()函数,来操作http协议的响应头来,实现某些功能。
①、设置浏览器的显示编码
header('Content-type:text/html;charset=utf-8');
②、跳转
header('location:http://www.baidu.com');
③、实现下载

六、数据采集
①、初始化curl
curl_init();
用于初始化curl功能。(相当于打开了一个浏览器)。
②、设置curl的参数
curl_setopt(ci,参数名,参数值);
ci curl的资源
参数: CURLOPT_URL 用于设置所要访问的网址
CURLOPT_RETURNTRANSFER 如果是true,那么返回值并不会显示在界面,而是返作为curl_exec()函数的返回值
③、执行curl
curl_exec($ci);
如下代码:

  <?php
/**
 * Class Curl  curl简单封装 get post
 */
class Curl
{

/**
 * @brief                  get请求
 * @param $url             请求的url
 * @param array $param     请求的参数
 * @param array $header    头部数据
 * @param int $timeout     超时时间
 * @param int $followAction 是否允许被抓取的链接跳转
 * @param int $gzip         是否启用gzip压缩
 * @param string $format    格式
 * @param int $log       是否启用日志
 * @return mixed
 */
public static function get($url, $param = array(), $header = array(), $timeout = 3, $followAction = 0, $gzip = 0, $format = 'html',$log=0)
{
    $ch = curl_init();
    if (is_array($param)) {
        $url = $url . '?' . http_build_query($param);
    }
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)");
    if ($followAction) {
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //允许被抓取的链接跳转
    }
    if ($gzip) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Encoding: gzip, deflate'));
        curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
    }
    //curl_setopt($ch, CURLOPT_REFERER, '');
    $data = curl_exec($ch);
    if ($format == 'json') {
        $data = json_decode($data, true);
    }

    if($log){
        if($format=='html'){
            self::_logCurlInfo($ch,$param,'');
        }else{
            self::_logCurlInfo($ch,$param,$data);
        }
    }
    curl_close($ch);
    return $data;
}

/**
 * @brief                   post请求
 * @param $url              请求的url地址
 * @param array $param      请求的参数
 * @param array $header     http头
 * @param int $ssl          是否启用ssl
 * @param string $format    返回的格式
 * @param int $log          是否启用日志
 * @return mixed
 */
public static function post($url, $param = array(), $header = array(), $ssl = 0, $format = 'json',$log=0)
{
    $ch = curl_init();
    if (is_array($param)) {
        $urlparam = http_build_query($param);
    } else if (is_string($param)) { //json字符串
        $urlparam = $param;
    }
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 120); //设置超时时间
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回原生的(Raw)输出
    curl_setopt($ch, CURLOPT_POST, 1); //POST
    curl_setopt($ch, CURLOPT_POSTFIELDS, $urlparam); //post数据
    if ($header) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    }
    if ($ssl) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
    }

    $data = curl_exec($ch);
    if ($format == 'json') {
        $data = json_decode($data, true);
    }

    if($log){
        if($format=='html'){
            self::_logCurlInfo($ch,$param,'');
        }else{
            self::_logCurlInfo($ch,$param,$data);
        }
    }
    curl_close($ch);
    return $data;
}


/**
 * 请求信息记录日志
 * @param $ch       curl句柄
 * @param $request  请求参数
 * @param $response 响应结果
 */
private static function _logCurlInfo($ch,$request,$response)
{
    $info = curl_getinfo($ch);
    $resultFormat =  "耗时:[%s] 返回状态:[%s] 请求的url[%s] 请求参数:[%s] 响应结果:[%s] 大小:[%s]kb 速度:[%s]kb/s";
    $resultLogMsg =  sprintf($resultFormat,$info['total_time'],$info['http_code'],$info['url'],var_export($request,true),var_export($response,true),$info['size_download']/1024,$info['speed_download']/1024);
    error_log($resultLogMsg.PHP_EOL,3,self::CURL_LOG_PATH);
}

}

/* example:
    echo Curl::get('http://www.baidu.com');
    $arr = Curl::post('127.0.0.1/test/test.php',['a'=>1,'b'=>2],'',0);
    var_dump($arr);
*/

七、cookie和session
cookie

设置cookie
①、设置cookie
语法:
setcookie(name,value【,expire【,path【,domain【,secure【,httponly】】】】】);
name 设置cookie的名
value 设置cookie的值
②、cookie的有效时间
语法:
setcookie(name,value,expire);
说明:
 expire是用于设置有效期,单位是秒,如果省略表示这个cookie是进程cookie。
 有效时间是浏览器关闭。
 expire是从时间原点(计算机世界内将1970年1月1日0时0分0秒设置为时间原点)算起。
 如果有效时间过期,那么浏览器将不会再携带此cookie的数据给服务器端
③、cookie的路径
语法:
setcookie(name,value,expire,path);
说明:
 php文件有自己的位于服务器的路径
 cookie有自己的位于客户端的显示路径
 一个php文件究竟那读取哪些cookie,要看cookie的显示路径是否是当前php文件的父路径。
 实际工作中使用最多的就是一个cookie整站有效(将要设置的cookie如何让站点中的任何一个php文件都能读取到)。
④、cookie的域
语法:
setcookie(name,value,expire,path,domain);
说明:
主要有生实现cookie跨域,前提是必须是二级域名相同。
语法:
setcookie(name,value,expire,path,domain,secure)
说明:
secure参数表示cookie只能使用https协议进行传输
http
https = http + ssl
⑥、httponly
语法:
setcookie(name,value【,expire【,path【,domain【,secure【,httponly】】】】】);
说明:
用于设置当前cookie是否只允许php进行访问。

读取cookie
$_COOKIE预定义的变量,就是用于保存客户端在请求服务器进,携带的cookie数据

删除cookie
只要是将cookie的用效期设置为过期,那么下次访问服务器时,cookie就不会携带过来。
方法1:设置过期时间为当前时间之前



方法2:将cookie的值设置为字符‘’


关于cookie值的类型
cookie的值只能字符串,所以不能存储数组、对象。
但实际开发中,确实有需数组的需求。可以使用如下变通的方法来实现


session

简单理解:ession也是会话技术中的一种,它是以cookie为基础,将重要的数据保存在服务器上,再将能够唯一标识用户数据以cookie的形式保存客户端

开启session
session_start()

session操作——设置session
本质就是向$_SESSION变量中写数据 $_SESSION['name']='zhangsan';
session操作——读取session
读取session就是从$_SESSION这个变量中读取数据 echo $_SESSION['name'];
session操作——获取session ID
session_id() echo session_id();
session数据
$_SESSION数组的下标只能是字符,但是$_SESSION中可以存储任何类型的数据

销毁session
session_destroy();

八、绘画gd2,验证码,水印,缩略图

创建画布
imagecreatetruecolor(w,h)
分配颜色
imagecolorallocate(img,r,g,b)
填充颜色
imagefill(img,x,y,color);

基本图形的绘制
绘制矩形
imagerectangle(img,x1,y1,x2,y2,color);
绘制直线
imageline(img,x1,y1,x2,y2,color);
绘制字母
imagestring(img,size,x,y,string,color);
绘制汉字
imagettftext(img ,size,angle,x,y, ,color,font,string);

输出画布
imagepng(img【,filename】)
imgjpeg(img【,filename】);
imagegif(img【,filename】);
说明:filename就是所要保存的图片文件的名子,如果省略表示,输出到浏览器

验证码

简单理解:验证码的本质就是用于区分人与计算机,就是减少对站点的一个访问频率。
制作验证码:制作验证码的本质就是将随机生成的字符串绘制到画布
验证码类:一般框架会有封装,就不多做介绍了。

水印

简单理解:版权标识,起到宣传的作用;
原理:在张图片上嵌入另一个图片
图片合并:
imagecopymerge($dest,$src,$dx,$dy,$sx,$sy,$sw,$sh,optical);
说明:
$dest (目标图片)是用户图片
$src (源图片)logo图片
$dx,$dy 目标图片上的某个点
$sx,$sy 源图片上的某个点
$sw,$sh 在源图片是所获取的宽高
optical 透明度取值0至100
在src上从sx,sy为起点,截取sw为宽sh为高的区域,放在dest上的dx,dy点上。



缩略图

简单理解:节省网络带宽,增加用户的体验度。
原理:将用户图片,等比缩放,并放到一个指定的画布中
imagecopyresampled ($dest , $src, $dx , $dy , $sx ,$sy ,$dw , $dh , $sw ,$sh )
说明:
dest 目标图片(最终的缩略图)
src 源图(用户图片)
dx,dy 目标图片上的某个点
sx,sy 源图上的某个点
dw,dh 目标图片的宽高
sw,sh 源图上的宽高
在src图片从sx,sy点开始取sw为宽sh为高的区域,,放在dest画布的以dx,dy为左上角顶点,以sw为宽,sh为高的区域


相关文章

  • php--编程

    作者:烨竹 一、前后台数据传递 前台数据提交:get,post后台数据接收:$GRT,$POST,$REQUEST...

  • PHP--基础

    PHP:一种创建动态交互性站点的强有力的服务器脚本语言。 标记: 注意:在php中,每...

  • PHP--函数

    最简单的一个函数: function tranceHelloPHP() { echo "Hello world"...

  • fastadmin PHP--小记

    1.list() 2.标签位 2.1扩展理解 钩子(中间件):应用前后,模型,控制器初始化前后等想做的一些事情提供...

  • PHP--仿微信, 通过登陆者用户名显示好友列表,显示头像和昵称

    PHP--仿微信, 通过登陆者用户名显示好友列表,显示头像和昵称。实现微信好友提取 ?php $uid = ...

  • PHP--【日期函数】--mktime()

    本系列笔记主要是回顾了一下PHP中和日期操作相关的函数 作用 取得指定日期的时间戳 语法 说明 根据给出的参数返回...

  • PHP--【日期函数】--date()

    本系列笔记主要是回顾了一下PHP中和日期操作相关的函数 作用 — 格式化一个本地时间/日期 语法 string d...

  • php--常见魔术常量

    我们可以自定义常量,同时php中也自定义了一些好用的常量,这些常量会根据其所在的位置而自动变化。 我们称之为魔...

  • PHP--序列化与反序列化详解

    PHP--序列化与反序列化详解 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有...

  • PHP--【日期函数】--设置时区

    本系列笔记主要是回顾了一下PHP中和日期操作相关的函数 在PHP中设置时区有三种方法: 1、直接在php的配置文件...

网友评论

    本文标题:php--编程

    本文链接:https://www.haomeiwen.com/subject/gbqqjftx.html