개발 꿀팁/PHP

php 자주 사용하는 사용자 정의 방법

Jammie 2022. 8. 23. 15:28
반응형

1.월표시

/** 월표시
*   @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('', '1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월')
            );
    return $month[$type][$m];
}

2. 스트링 필터링, UTF8 영숫자 중국어 및 부분 기호 유지

/** 문자열 필터링, 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('/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00ff}|\x{4e00}-\x{9fff}]+/u', $str, $matches);
        $str = join('', $matches[0]);
    }
    return $str;
}

3.바이너리 스트림 생성 파일

/** 이진 스트림 생성 파일
*   $_POST바이너리 스트림을 해석할 수 없습니다. $GLOBALS['HTTP_RAW_POST_DATA'] 또는 php://input
*   $GLOBALS['HTTP_RAW_POST_DATA'] 和 php://input 다 못 써요 enctype=multipart/form-data
*   @param    String    $file   생성할 파일 경로
*   @return   boolean
*/
function binary_to_file($file){
    $content = $GLOBALS['HTTP_RAW_POST_DATA'];  // php.ini 설정 필요
    if(empty($content)){
        $content = file_get_contents('php://input');    // 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 = '';
    if(!isset($_COOKIE['force_reload_page_'.$version])){ // 업데이트되었는지 여부 판단
        setcookie('force_reload_page_'.$version, true, time()+2592000);
        $html .= '<script type="text/javascript">'."\r\n";
        $html .= 'window.onload = function(){'."\r\n";
        $html .= 'setTimeout(function(){window.location.reload(true); },1000);'."\r\n";
        $html .= '}'."\r\n";
        $html .= '</script>';
        echo $html;
        exit();
    }else{  // Chrome에 최적화된 한 번의 그림 읽기
        if($files){
            $html .= '<script type="text/javascript">'."\r\n";
            $html .= "<!--\r\n";
            for($i=0,$max=count($files); $i<$max; $i++){
                $html .= 'var force_reload_file_'.$i.' =new Image()'."\r\n";
                $html .= 'force_reload_file_'.$i.'.src="'.$files[$i].'"'."\r\n";
            }
            $html .= "-->\r\n";
            $html .= '</script>';
        }
    }
    return $html;
}

5.base64와 base64로 파일 이동

/** 파일 이동base64 출력
* @param  String $file 파일 경로
* @return String base64 string
*/
function fileToBase64($file){
    $base64_file = '';
    if(file_exists($file)){
        $mime_type = mime_content_type($file);
        $base64_data = base64_encode(file_get_contents($file));
        $base64_file = 'data:'.$mime_type.';base64,'.$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.16진수색 10진수색 회전

/** 16진수 색상 10진수 색상, 예 #FF0000 rgb(255, 0, 0);
* @param  String $hexcolor
* @return Array
*/
function hex2rgb($hexcolor){
    $color = str_replace('#', '', $hexcolor);
    if (strlen($color) > 3) {
        $rgb = array(
            'r' => hexdec(substr($color, 0, 2)),
            'g' => hexdec(substr($color, 2, 2)),
            'b' => 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(
            'r' => hexdec($r),
            'g' => hexdec($g),
            'b' => hexdec($b)
        );
    }
    return $rgb;
}

7.두 시간대 차이 취득

/**두 시간 간격 가져오기
* @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.' 하늘';
    }elseif($hours>0){
        $ret = $hours.' 시간';
    }else{
        $ret = '1시간 미만';
    }
    return $ret;
}

8.지연출력내용

/** 출력 내용을 지연시키다
* @param int $sec 초수,소수 예를 들어 0.3일 수 있다
*/
function cache_flush($sec=2){
    ob_flush();
    flush();
    usleep($sec*1000000);
}

9.배타적 논리합(xor)+키를 사용하여 복호화 파일

/** 파일 암호화는 키를 사용하여 원문과 배타적 논리합(XOR)으로 암호문을 생성하고 복호화는 배타적 논리합을 한 번 더 수행하면 된다
* @param String $source 암호화하거나 복호화할 파일
* @param String $dest   암호화 또는 복호화된 파일
* @param String $key    키
*/
function file_encrypt($source, $dest, $key){
	if(file_exists($source)){
		
		$content = '';          // 처리된 문자열
		$keylen = strlen($key); // 키 길이
		$index = 0;
 
		$fp = fopen($source, 'rb');
 
		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. 파일이나 폴더 가져오기의 소유자 및 사용자 권한으로 팀이다

/** 파일이나 폴더의 소유자, 그룹 사용자, 권한 가져오기
* @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('%o',fileperms($filename)),-4);
 
    $ret = array(
        'owner' => $owner['name'],
        'group' => $group['name'],
        'perms' => $perms
    );
 
    return $ret;
 
}

11.빈 디렉터리 및 빈 하위 디렉터리 삭제

/** 모든 빈 디렉터리 삭제
* @param String $path 디렉터리 경로
*/
function rm_empty_dir($path){
    if($handle = opendir($path)){
        while(($file=readdir($handle))!==false){     // 폴더 이동
            if($file!='.' && $file!='..'){
                $curfile = $path.'/'.$file;          // 현재 디렉터리
                if(is_dir($curfile)){                // 카테고리
                    rm_empty_dir($curfile);          // 디렉터리라면 계속 둘러보기
                    if(count(scandir($curfile))==2){ // 디렉터리가 비어 있습니다. = 2는( 는) 존재하기 때문입니다
                        rmdir($curfile);             // 빈 디렉터리 삭제
                    }
                }
            }
        }
        closedir($handle);
    }
}

12.유니코드 중국어 옮기기

/* 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);
}

 

반응형