php常用函数

发送一条sql语句,并且在sql语句错误的时候输出sql的错误信息

$sql 要发送的sql语句

function query($sql){
    // 发送一条查询语句
    $res = mysql_query($sql);

    // 如果sql语句错误,输出错误信息 并退出脚本 如果成功,返回结果集 
    if(!$res){
        echo mysql_error().'
'; exit(); } return $res; }

获取一个文件或者目录的8进制权限

function getFilePerms($fileName){
    return substr(base_convert(fileperms($fileName),10,8), -4);
}

计算一个整数的阶乘

function factorial($num){
    if($num==1) return 1;
    return $num*factorial($num-1);
}

统计出一个文件夹下面目录的数量和文件的数量(引用传值)

$dir 目录名

function countFilesNumA($dir,&$dirNum=0,&$fileNum=0){
    // 打开句柄
    $handle = opendir($dir);
    // 读取. 和..
    readdir($handle);
    readdir($handle);

    while($fileName = readdir($handle)){

        // 拼接成路径
        $newFile = "$dir/$fileName";

        // 如果是目录递归
        if(is_dir($newFile)){
            $dirNum++;
            countFilesNum($newFile,$dirNum,$fileNum);
        }else{
            $fileNum++;
        }
    }

    // 关闭句柄
    closedir($handle);

    // 返回目录数量和文件数量
    return array($dirNum,$fileNum);
}

统计出一个文件夹下面目录的数量和文件的数量

string $dir 目录名

function countFilesNumB($dir){
    // 打开句柄
    $handle = opendir($dir);
    // 读取. 和..
    readdir($handle);
    readdir($handle);

    $dirNum  = 0;
    $fileNum = 0;

    while(($fileName = readdir($handle))||($fileName!==false)){
        // 拼接成路径
        $newFile = "$dir/$fileName";

        // 如果是目录递归
        if(is_dir($newFile)){
            $dirNum++;
            $res = countFilesNumB($newFile);
            $dirNum  += $res[0];
            $fileNum += $res[1];
        }else{
            $fileNum++;
        }
    }

    // 关闭句柄
    closedir($handle);

    // 返回目录数量和文件数量
    return array($dirNum,$fileNum);
}

** 删除一个目录**

$dir 目录名

function delDir($dir){
    // 打开句柄
    $handle = opendir($dir);

    // 读取.和..
    readdir($handle);
    readdir($handle);

    // 循环
    while(($fileName = readdir($handle))||($fileName!==false)){
        // 拼接路径
        $newFile = "$dir/$fileName";
        if(is_dir($newFile)){
            if(!delDir($newFile)){return false;}
        }else{
            unlink($newFile);
        }
    }

    // 关闭句柄
    closedir($handle);
    // 删除目录
    if(rmdir($dir)) return true;
    return false;
}

实现一个文件的下载

$fileName 下载文件的路径

function doDownload($fileName){
    // 1、设置响应头为八进制数据流
    header('Content-type:application/octet-stream');

    // 2、告诉浏览器传送数据编码方式为2进制
    header('Content-Transfer-Encoding: binary');

    //3、支持断点续传  需要服务器支持断点续传功能
    header('Accept-Ranges:bytes');

    // 4、告诉客户端文件大小
    $filesize = filesize($fileName);
    header("Accept-Length:$filesize");

    // 5、告诉浏览器文件下载方式,以及下载的文件名
    $tmpName = explode('/', $fileName);
    $tmpName = array_pop($tmpName);
    header("Content-Disposition:attachment;filename=$tmpName");

    // 清空前面输出
    ob_end_clean();

    //6、输出文件流
    $handle = fopen($fileName, 'rb');
    while($con = fread($handle, 1024)){
        echo $con;
    }
}

生成一个3-6位的验证码

function makeCode($len=4){
    // 限制长度为3-6
    $len = ($len>6) ? 6 : $len;
    $len = ($len<3) ? 3 : $len;

    // 创建真彩画布
    $img = imagecreatetruecolor(100, 40);

    // 给画布分配随机背景颜色
    $bgColor = imagecolorallocate($img, mt_rand(180,255), mt_rand(180,255), mt_rand(180,255));

    // 给画布填充背景颜色
    imagefill($img, 0, 0, $bgColor);

    // 字符库
    $str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    // 取出最大下标
    $maxIndex = strlen($str)-1;

    // 定义验证码初始值
    $code = '';
    $flag = 0;
    while($flag<$len){
        // 给文字随机颜色
        $color = imagecolorallocate($img, mt_rand(0,100), mt_rand(0,100), mt_rand(0,100));

        // 随机取出一个字符
        $tmpStr = $str{mt_rand(0,$maxIndex)};
        $code .=  $tmpStr;
        $x = (105-$len*15)/2+$flag*15;

        // 写入字符串
        imagestring($img, 5, $x, 10, $tmpStr, $color);
        $flag++;
    }

    // 将验证码存储到session中
    session_start();
    $_SESSION['code'] = $code;

    // 循环100个像素点
    for($i=0; $i<100; $i++){
        $color = imagecolorallocate($img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
        imagesetpixel($img, mt_rand(0,100), mt_rand(0,40), $color);
    }
     
    // 输出验证码并释放内存
    header('Content-type:image/jpeg');

    // 清空前面输出
    ob_end_clean();
    
    imagejpeg($img);
    imagedestroy($img);
}

上传一个文件

$file 里面包含五个元素
$fileMaxSize 上传文件最大的大小
$extArray 允许的扩展名数组
$mimeArray 允许的mime类型数组
$path 上传文件保存的路径
return array('upload_success'=>bool,'error_code'=>int,'error_info'=>'错误信息','file_path'=>'上传后文件保存的路径')

function doUpload($file, $fileMaxSize, $extArray, $mimeArray, $path){
    // 系统错误
    if($file['error'] != 0){
        return changeCode($file['error']);
    }

    // 逻辑需要
    // 判断文件大小
    if($file['size']>$fileMaxSize){
        return changeCode(5);
    }

    // 判断扩展名是否符合规范
    $ext = $file['name'];
    $ext = explode('.', $ext);
    $ext = array_pop($ext);
    if(!in_array($ext, $extArray)){
        return changeCode(8);
    }

    // 安全需要 
    // 取出文件的真实的mime类型
    $finfo = finfo_open(FILEINFO_MIME);
    $mime = finfo_file($finfo, $file['tmp_name']);
    $mime = explode(';', $mime);
    $mime = array_shift($mime);
    if(!in_array($mime, $mimeArray)){
        return changeCode(9);
    }

    // 拼接基于分钟的文件夹
    $dir = $path.'/'.date('Y-m-d-H-i');

    // 目录不存在生成目录
    if(!is_dir($dir)){
        mkdir($dir,0777,true);
    }

    // 随机永不重复名字
    $tmpName = uniqid().$file['name'];

    // 拼接成完整路径
    $destination = $dir.'/'.$tmpName;

    // 移动上传文件
    if(move_uploaded_file($file['tmp_name'], $destination)){
        return array('upload_success'=>true,'error_code'=>0,'error_info'=>'上传成功','file_path'=>$destination);
    }
}

将错误的编号转为错误的信息

$code 错误编号

function changeCode($code){
    switch($code){
        // 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
        case 1: $error_info = '上传文件过大';
        break;

        // 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 
        case 2: $error_info = '上传文件过大';
        break;

        // 文件只有部分被上传。
        case 3: $error_info = '上传错误,请重新上传';
        break;

        // 没有文件被上传。 
        case 4: $error_info = '上传错误,请重新上传';
        break;

        // 找不到临时文件夹。
        case 6: $error_info = '上传异常,请联系管理员';
        break;

        // 文件写入失败。
        case 7: $error_info = '上传异常,请联系管理员';
        break;

        // 超过了自定义的文件大小
        case 5: $error_info = '上传文件过大';
        break;

        // 扩展名不正确
        case 8: $error_info = '上传文件类型不符合规范';
        break;

        // mime类型不正确
        case 9: $error_info = '/(ㄒoㄒ)/~~';
        break;

        default;
    }
    return array('upload_success'=>false,'error_code'=>$code,'error_info'=>$error_info,'file_path'=>null);
}

实现图像的等比缩放

$fileName 图像的完整路径
$scale 缩放比例 比如0.5表示等比缩放0.5倍
return string $newFile 生成的新的图像的路径

function geometricScaling($fileName,$scale=0.5){
    $ext = array('', 'gif', 'jpeg', 'png');

    // 获取旧图像的信息
    $imgInfo = getimagesize($fileName);

    // 拼接和图像相对应函数名
    $funName = 'imagecreatefrom'.$ext[$imgInfo[2]];

    // 旧图像资源
    $src_image = $funName($fileName);

    // 旧图像宽度
    $src_w = $imgInfo[0];

    // 旧图像高度
    $src_h = $imgInfo[1];

    // 新图像宽度
    $dst_w = $src_w*$scale;

    // 新图像的高度
    $dst_h = $src_h*$scale;

    // 创建一个空画布,用来容纳裁剪后的图像
    $dst_image = imagecreatetruecolor($dst_w, $dst_h);

    // 实现图像等比缩放
    imagecopyresampled($dst_image, $src_image,0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);

    // 拼接输出函数名
    $funName = 'image'.$ext[$imgInfo[2]];

    // 生成一个新的地址
    $newName = explode('/', $fileName);
    // 求数组最大下标
    $maxIndex = count($newName)-1;
    // 将文件名重新赋值
    $newName[$maxIndex] = $scale.'_'.$newName[$maxIndex];
    // 拼接成新的路径
    $newName = implode('/', $newName);

    // 保存图像
    $funName($dst_image,$newName);

    // 释放内存
    imagedestroy($dst_image);
    imagedestroy($src_image);
    return $newName;
}

你可能感兴趣的:(php常用函数)