php常用函数

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

$sql 要发送的sql语句

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

    // 如果sql语句错误,输出错误信息 并退出脚本 如果成功,返回结果集 
    if(!$res){
        echo mysql_error().'<br />';
        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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • php usleep() 函数延迟代码执行若干微秒。 unpack() 函数从二进制字符串对数据进行解包。 uni...
    思梦PHP阅读 1,980评论 1 24
  • PHP常用函数大全 usleep() 函数延迟代码执行若干微秒。 unpack() 函数从二进制字符串对数据进行解...
    上街买菜丶迷倒老太阅读 1,350评论 0 20
  • assert($a)检查$a是否为false,是返回true getenv($str)获取一个环境变量的值 php...
    iscona阅读 228评论 0 1
  • 一、写入文件 fopen($filename,$mode) 打开资源(文件)...
    銭兎孑阅读 283评论 0 0
  • 娜拉带着耳机,一个人在屋子里,独自跳舞。旋律有时很快,有时很慢。娜拉随着这旋律,快着,慢着。所在的屋,三面墙都是镜...
    倪思quliss阅读 644评论 0 0