Maison  >  Article  >  développement back-end  >  Comment utiliser les méthodes personnalisées courantes de PHP

Comment utiliser les méthodes personnalisées courantes de PHP

jacklove
jackloveoriginal
2018-06-09 14:53:032863parcourir

1. Affichage du mois

/** 月份顯示
*   @param  int    $m       1-12
*   @param  int    $type    0:long 1:short(default) 2:chinese
*   @return String
*/
function format_month($m, $type=0){
    $month = array(
                array('', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'),
                array('', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'),
                array('', '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月')
            );
    return $month[$type][$m];
}

2. Filtrer les chaînes et conserver le chinois alphanumérique UTF8 et certains symboles

/** 過濾字符串,保留UTF8字母數字中文及部份符號
*   @param  String  $ostr
*   @return String
*/
function filter_utf8_char($ostr){
    preg_match_all('/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00ff}|\x{4e00}-\x{9fff}]+/u', $ostr, $matches);
    $str = join('', $matches[0]);
    if($str==''){   //含有特殊字符需要逐個處理
        $returnstr = '';
        $i = 0;
        $str_length = strlen($ostr);
        while ($i<=$str_length){
            $temp_str = substr($ostr, $i, 1);
            $ascnum = Ord($temp_str);
            if ($ascnum>=224){
                $returnstr = $returnstr.substr($ostr, $i, 3);
                $i = $i + 3;
            }elseif ($ascnum>=192){
                $returnstr = $returnstr.substr($ostr, $i, 2);
                $i = $i + 2;
            }elseif ($ascnum>=65 && $ascnum<=90){
                $returnstr = $returnstr.substr($ostr, $i, 1);
                $i = $i + 1;
            }elseif ($ascnum>=128 && $ascnum<=191){ // 特殊字符
                $i = $i + 1;
            }else{
                $returnstr = $returnstr.substr($ostr, $i, 1);
                $i = $i + 1;
            }
        }
        $str = $returnstr;
        preg_match_all(&#39;/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00ff}|\x{4e00}-\x{9fff}]+/u&#39;, $str, $matches);
        $str = join(&#39;&#39;, $matches[0]);
    }
    return $str;
}

3. Fichier de génération de flux binaire

/** 二进制流生成文件
*   $_POST 无法解释二进制流,需要用到 $GLOBALS[&#39;HTTP_RAW_POST_DATA&#39;] 或 php://input
*   $GLOBALS[&#39;HTTP_RAW_POST_DATA&#39;] 和 php://input 都不能用于 enctype=multipart/form-data
*   @param    String    $file   要生成的文件路径
*   @return   boolean
*/
function binary_to_file($file){
    $content = $GLOBALS[&#39;HTTP_RAW_POST_DATA&#39;];  // 需要php.ini设置
    if(empty($content)){
        $content = file_get_contents(&#39;php://input&#39;);    // 不需要php.ini设置,内存压力小
    }
    $ret = file_put_contents($file, $content, true);
    return $ret;
}

4.

/** 強制更新圖片緩存
*   @param Array $files 要更新的圖片
*   @param int $version 版本
*/
function force_reload_file($files=array(), $version=0){
    $html = &#39;&#39;;
    if(!isset($_COOKIE[&#39;force_reload_page_&#39;.$version])){ // 判斷是否已更新過
        setcookie(&#39;force_reload_page_&#39;.$version, true, time()+2592000);
        $html .= &#39;<script type="text/javascript">&#39;."\r\n";
        $html .= &#39;window.onload = function(){&#39;."\r\n";
        $html .= &#39;setTimeout(function(){window.location.reload(true); },1000);&#39;."\r\n";
        $html .= &#39;}&#39;."\r\n";
        $html .= &#39;</script>&#39;;
        echo $html;
        exit();
    }else{  // 讀取圖片一次,針對chrome優化
        if($files){
            $html .= &#39;<script type="text/javascript">&#39;."\r\n";
            $html .= "<!--\r\n";
            for($i=0,$max=count($files); $i<$max; $i++){
                $html .= &#39;var force_reload_file_&#39;.$i.&#39; =new Image()&#39;."\r\n";
                $html .= &#39;force_reload_file_&#39;.$i.&#39;.src="&#39;.$files[$i].&#39;"&#39;."\r\n";
            }
            $html .= "-->\r\n";
            $html .= &#39;</script>&#39;;
        }
    }
    return $html;
}

5. Fichier en base64 et base64 en fichier

/** 文件转base64输出
* @param  String $file 文件路径
* @return String base64 string
*/
function fileToBase64($file){
    $base64_file = &#39;&#39;;
    if(file_exists($file)){
        $mime_type = mime_content_type($file);
        $base64_data = base64_encode(file_get_contents($file));
        $base64_file = &#39;data:&#39;.$mime_type.&#39;;base64,&#39;.$base64_data;
    }
    return $base64_file;
}
/** base64转文件输出
* @param  String $base64_data base64数据
* @param  String $file        要保存的文件路径
* @return boolean
*/
function base64ToFile($base64_data, $file){
    if(!$base64_data || !$file){
        return false;
    }
    return file_put_contents($file, base64_decode($base64_data), true);
}

6. Convertir la couleur hexadécimale en couleur décimale

/** 16进制颜色转10进制颜色,例#FF0000转rgb(255, 0, 0);
* @param  String $hexcolor
* @return Array
*/
function hex2rgb($hexcolor){
    $color = str_replace(&#39;#&#39;, &#39;&#39;, $hexcolor);
    if (strlen($color) > 3) {
        $rgb = array(
            &#39;r&#39; => hexdec(substr($color, 0, 2)),
            &#39;g&#39; => hexdec(substr($color, 2, 2)),
            &#39;b&#39; => hexdec(substr($color, 4, 2))
        );
    } else {
        $r = substr($color, 0, 1) . substr($color, 0, 1);
        $g = substr($color, 1, 1) . substr($color, 1, 1);
        $b = substr($color, 2, 1) . substr($color, 2, 1);
        $rgb = array(
            &#39;r&#39; => hexdec($r),
            &#39;g&#39; => hexdec($g),
            &#39;b&#39; => hexdec($b)
        );
    }
    return $rgb;
}

7 Obtenez la différence de temps entre deux périodes

/** 获取两时间段相差时间
* @param datetime $starttime
* @param datetime $endtime
* @return String
*/
function diff_time($starttime, $endtime){
    $diff = abs(strtotime($starttime) - strtotime($endtime));
    $days = (int)($diff/86400);
    $hours = (int)($diff/3600);
    if($days>0){
        $ret = $days.&#39; 天&#39;;
    }elseif($hours>0){
        $ret = $hours.&#39; 小时&#39;;
    }else{
        $ret = &#39;不足1小时&#39;;
    }
    return $ret;
}

8. Contenu de sortie retardé

/** 延时输出内容
* @param int $sec 秒数,可以是小数例如 0.3
*/
function cache_flush($sec=2){
    ob_flush();
    flush();
    usleep($sec*1000000);
}

9. Utiliser le cryptage exclusif OR (xor)+key Décrypter les fichiers.

/** 文件加密,使用key与原文异或(XOR)生成密文,解密则再执行一次异或即可
* @param String $source 要加密或解密的文件
* @param String $dest   加密或解密后的文件
* @param String $key    密钥
*/
function file_encrypt($source, $dest, $key){
	if(file_exists($source)){
		
		$content = &#39;&#39;;          // 处理后的字符串
		$keylen = strlen($key); // 密钥长度
		$index = 0;
		$fp = fopen($source, &#39;rb&#39;);
		while(!feof($fp)){
			$tmp = fread($fp, 1);
			$content .= $tmp ^ substr($key,$index%$keylen,1);
			$index++;
		}
		fclose($fp);
		return file_put_contents($dest, $content, true);
	}else{
		return false;
	}
}

10. Obtenez le propriétaire, l'utilisateur du groupe et les autorisations du fichier ou du dossier

/** 获取文件或文件夹的拥有者,组用户,及权限
* @param  String $filename
* @return Array
*/
function file_attribute($filename){
    if(!file_exists($filename)){
        return false;
    }
    $owner = posix_getpwuid(fileowner($filename));
    $group = posix_getpwuid(filegroup($filename));
    $perms = substr(sprintf(&#39;%o&#39;,fileperms($filename)),-4);
    $ret = array(
        &#39;owner&#39; => $owner[&#39;name&#39;],
        &#39;group&#39; => $group[&#39;name&#39;],
        &#39;perms&#39; => $perms
    );
    return $ret;
}

11. Supprimer les répertoires et sous-répertoires vides

/** 删除所有空目录
* @param String $path 目录路径
*/
function rm_empty_dir($path){
    if($handle = opendir($path)){
        while(($file=readdir($handle))!==false){     // 遍历文件夹
            if($file!=&#39;.&#39; && $file!=&#39;..&#39;){
                $curfile = $path.&#39;/&#39;.$file;          // 当前目录
                if(is_dir($curfile)){                // 目录
                    rm_empty_dir($curfile);          // 如果是目录则继续遍历
                    if(count(scandir($curfile))==2){ // 目录为空,=2是因为. 和 ..存在
                        rmdir($curfile);             // 删除空目录
                    }
                }
            }
        }
        closedir($handle);
    }
}

12. Convertir l'Unicode en chinois

/* unicode 转 中文
* @param  String $str unicode 字符串
* @return String
*/
function unescape($str) {
    $str = rawurldecode($str);
    preg_match_all("/(?:%u.{4})|&#x.{4};|&#\d+;|.+/U",$str,$r);
    $ar = $r[0];
    foreach($ar as $k=>$v) {
        if(substr($v,0,2) == "%u"){
            $ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,-4)));
        }elseif(substr($v,0,3) == "&#x"){
            $ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,3,-1)));
        }elseif(substr($v,0,2) == "&#") {
            $ar[$k] = iconv("UCS-2BE","UTF-8",pack("n",substr($v,2,-1)));
        }
    }
    return join("",$ar);
}

Cet article présente les méthodes de personnalisation courantes utilisant PHP Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois.

Recommandations associées :

Comment crypter/décrypter des fichiers à l'aide du OU exclusif (XOR) via php

Comment obtenir via php Le nom d'une variable

En savoir plus sur le clonage d'objet PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn