You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
411 lines
11 KiB
PHP
411 lines
11 KiB
PHP
<?php
|
|
|
|
use Illuminate\Http\UploadedFile;
|
|
use Illuminate\Support\Facades\File;
|
|
use Illuminate\Support\Str;
|
|
use Jenssegers\Agent\Agent;
|
|
|
|
function human_distance($distance)
|
|
{
|
|
$distanceText = number_format($distance, 2) . 'm';
|
|
|
|
if($distance > 1000) $distanceText = number_format(round($distance / 1000, 2), 2) . 'Km';
|
|
|
|
return $distanceText;
|
|
}
|
|
|
|
function human_filesize($bytes, $decimals = 2)
|
|
{
|
|
if ($bytes == 0) return $bytes;
|
|
|
|
$s = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
|
|
if ($bytes) {
|
|
$e = floor(log($bytes) / log(1024));
|
|
return sprintf("%.{$decimals}f ".$s[$e], ($bytes/pow(1024, floor($e))));
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
function filesize_mb($bytes)
|
|
{
|
|
return $bytes / pow(1024, 2);
|
|
}
|
|
|
|
function removeHyphen($phone) {
|
|
return trim(str_replace("-", "", $phone));
|
|
}
|
|
|
|
function filterPhone($phone) {
|
|
$search = ["-", "#", "+", ".", ",", " ", "(", ")"];
|
|
$phone = str_replace($search, "", $phone);
|
|
return trim($phone);
|
|
}
|
|
|
|
function trimSignoutText($text) {
|
|
$trext = preg_replace("/#[0-9]+/", "", $text);
|
|
return trim($trext);
|
|
}
|
|
|
|
function formatPhone($phone) {
|
|
$phone = preg_replace("/[^0-9]/", "", $phone);
|
|
$length = strlen($phone);
|
|
|
|
switch($length){
|
|
case 11 :
|
|
return preg_replace("/([0-9]{3})([0-9]{4})([0-9]{4})/", "$1-$2-$3", $phone);
|
|
break;
|
|
case 10:
|
|
return preg_replace("/([0-9]{3})([0-9]{3})([0-9]{4})/", "$1-$2-$3", $phone);
|
|
break;
|
|
case 9:
|
|
return preg_replace("/([0-9]{2})([0-9]{3})([0-9]{4})/", "$1-$2-$3", $phone);
|
|
break;
|
|
default :
|
|
return $phone;
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create a Random String
|
|
*
|
|
* Useful for generating passwords or hashes.
|
|
*
|
|
* @param integer number of characters
|
|
* @param string type of random string. basic/alpha/alunum/numeric/nozero/unique/md5/encrypt/sha1
|
|
* @return string
|
|
*/
|
|
function randomString($len = 10, $type = 'alnum') {
|
|
$str = '';
|
|
switch ($type) {
|
|
case 'basic' :
|
|
$str = mt_rand();
|
|
break;
|
|
case 'alnum' :
|
|
case 'numeric' :
|
|
case 'nozero' :
|
|
case 'alpha' :
|
|
case 'allowernum' :
|
|
case 'aluppernum' :
|
|
switch ($type) {
|
|
case 'alpha' :
|
|
$pool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
break;
|
|
case 'alnum' :
|
|
$pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
break;
|
|
case 'allowernum' :
|
|
$pool = '0123456789abcdefghijklmnopqrstuvwxyz';
|
|
break;
|
|
case 'aluppernum' :
|
|
$pool = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
break;
|
|
case 'numeric' :
|
|
$pool = '0123456789';
|
|
break;
|
|
case 'nozero' :
|
|
$pool = '123456789';
|
|
break;
|
|
}
|
|
for ($i = 0; $i < $len; $i++) {
|
|
$str .= substr($pool, mt_rand(0, strlen($pool) -1), 1);
|
|
}
|
|
break;
|
|
case 'unique' :
|
|
case 'md5' :
|
|
$str = md5(uniqid(mt_rand()));
|
|
break;
|
|
case 'encrypt' :
|
|
case 'sha1' :
|
|
$str = sha1(uniqid(mt_rand(), true));
|
|
break;
|
|
default :
|
|
$str = mt_rand();
|
|
}
|
|
|
|
return $str;
|
|
}
|
|
|
|
/**
|
|
* Calculates the great-circle distance between two points, with
|
|
* the Haversine formula.
|
|
* @param float $latitudeFrom Latitude of start point in [deg decimal]
|
|
* @param float $longitudeFrom Longitude of start point in [deg decimal]
|
|
* @param float $latitudeTo Latitude of target point in [deg decimal]
|
|
* @param float $longitudeTo Longitude of target point in [deg decimal]
|
|
* @param float $earthRadius Mean earth radius in [m]
|
|
* @return float Distance between points in [m] (same as earthRadius)
|
|
*/
|
|
function distance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000)
|
|
{
|
|
// convert from degrees to radians
|
|
$latFrom = deg2rad($latitudeFrom);
|
|
$lonFrom = deg2rad($longitudeFrom);
|
|
$latTo = deg2rad($latitudeTo);
|
|
$lonTo = deg2rad($longitudeTo);
|
|
|
|
$latDelta = $latTo - $latFrom;
|
|
$lonDelta = $lonTo - $lonFrom;
|
|
|
|
$angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) +
|
|
cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2)));
|
|
return $angle * $earthRadius;
|
|
}
|
|
|
|
function dateAgo($time) {
|
|
if (!$time) {
|
|
return '방금';
|
|
}
|
|
|
|
$stat = ' 전';
|
|
if ($time < 0) {
|
|
$time *= -1;
|
|
$stat = ' 후';
|
|
} // $time=abs($time);
|
|
|
|
$ago = array();
|
|
$ct = array(31536000,2592000,604800,86400,3600,60,1); // 대략(년:365일,월:30일 기준)
|
|
$tt = array('년','달','주','일','시간','분','초');
|
|
|
|
foreach ($ct as $k => $v) {
|
|
if ($n=floor($time/$v)) {
|
|
$ago[] = $n.$tt[$k];
|
|
$time-=$n*$v;
|
|
}
|
|
}
|
|
|
|
return implode(' ', array_slice($ago,0,2)) . $stat;
|
|
}
|
|
|
|
function getNamespace($model) {
|
|
if (!$model) {
|
|
return null;
|
|
}
|
|
$class_name = get_class($model);
|
|
$reflection_class = new \ReflectionClass($class_name);
|
|
|
|
return $reflection_class->getName();
|
|
}
|
|
|
|
/**
|
|
* Prepare URL
|
|
*
|
|
* Simply adds the http:// part if no scheme is included
|
|
*
|
|
* @param string $url
|
|
* @return string
|
|
*/
|
|
function prepareURL($url = '') {
|
|
if (empty($url) || $url == 'http://' || $url == 'https://') {
|
|
return '';
|
|
}
|
|
|
|
$urls = parse_url($url);
|
|
|
|
if (!$urls || !isset($urls['scheme'])) {
|
|
$url = 'http://'. $url;
|
|
}
|
|
|
|
return $url;
|
|
}
|
|
|
|
/**
|
|
* 한글요일 변환
|
|
*
|
|
* @param datetime
|
|
* @param integer
|
|
* @return string
|
|
*/
|
|
function getWeekName($date, $full = 0) {
|
|
$weeks = array('일','월','화','수','목','금','토');
|
|
$week = date('w', strtotime($date));
|
|
if ($full) {
|
|
return $weeks[$week] . '요일';
|
|
} else {
|
|
return $weeks[$week];
|
|
}
|
|
}
|
|
|
|
// 휴대폰번호 마스킹
|
|
function maskingPhone($str) {
|
|
$str = str_replace('-','',$str);
|
|
$len = mb_strlen($str, 'utf-8');
|
|
$mValue = "";
|
|
|
|
switch($len){
|
|
case 10:
|
|
$mValue = mb_substr($str,0,3)."-".mb_substr($str,3,1)."**"."-*".mb_substr($str,7,3);;
|
|
break;
|
|
case 11:
|
|
$mValue = mb_substr($str,0,3)."-".mb_substr($str,3,2)."**"."-*".mb_substr($str,8,3);
|
|
break;
|
|
case 0:
|
|
break;
|
|
}
|
|
return $mValue;
|
|
}
|
|
|
|
// ID 마스킹
|
|
function maskingID($str) {
|
|
$mValue = preg_replace('/.{3}$/', '***', $str);
|
|
return $mValue;
|
|
}
|
|
|
|
// 이메일 마스킹
|
|
function maskingEmail($str) {
|
|
//$str = preg_replace('/(?:^|@).\K|\.[^@]*$(*SKIP)(*F)|.(?=.*?\.)/', '*', $str);
|
|
$pattern = '/(\w+)(\w{3})(@.{1})(?=.*?\.)(.+)/i';
|
|
$replace = '\1***\3*\5';
|
|
//$str = preg_replace('/(\w+)(\w{3})@(\w+)/i','\1***@\3',$str);
|
|
$str = preg_replace('/(\w+)(\w{3})(@.{1})([\w*?]+)(.+)/i','\1***\3*\5',$str);
|
|
return $str;
|
|
}
|
|
|
|
// IP Address 마스킹
|
|
function maskingIP($ip, $pos = 2, $mask = "♡", $admin = false) {
|
|
if ($admin !== false) {
|
|
return $ip;
|
|
}
|
|
$arr = explode('.', $ip);
|
|
$arr[4 - $pos] = $mask;
|
|
|
|
return implode('.',array_reverse($arr));
|
|
}
|
|
|
|
// 문자열 마스킹
|
|
function strMasking($str) {
|
|
$str = str_replace('-','',$str);
|
|
$len = mb_strlen($str, 'utf-8');
|
|
$mValue = "";
|
|
|
|
switch($len){
|
|
case 2:
|
|
$mValue = mb_strcut($str, 0, 3, "UTF-8").'*';
|
|
break;
|
|
case 3:
|
|
$mValue = mb_strcut($str, 0, 3, "UTF-8").'*'.mb_strcut($str, 8, 11, "UTF-8");
|
|
break;
|
|
default:
|
|
$mValue = mb_strcut($str, 0, 3, "UTF-8").'**'.mb_strcut($str, 12, 15, "UTF-8");
|
|
break;
|
|
}
|
|
return $mValue;
|
|
}
|
|
|
|
/**
|
|
* 자동 링크 변환 함수
|
|
*
|
|
* @param string
|
|
* @return string
|
|
*/
|
|
function setAutoLink($str) {
|
|
$regex['file'] = "gz|tgz|tar|gzip|zip|rar|mpeg|mpg|exe|rpm|dep|rm|ram|asf|ace|viv|avi|mid|gif|jpg|png|bmp|eps|mov|mp4";
|
|
$regex['file'] = "(\.(". $regex['file'] .")\") target=\"_blank\"";
|
|
$regex['http'] = "(http|https|ftp|telnet|news|mms):\/\/(([\xA1-\xFEa-z0-9:_\-]+\.[\xA1-\xFEa-z0-9,:;&#=_~%\[\]?\/.,+\-]+)([.]*[\/a-z0-9\[\]]|=[\xA1-\xFE]+))";
|
|
$regex['mail'] = "([\xA1-\xFEa-z0-9_.-]+)@([\xA1-\xFEa-z0-9_-]+\.[\xA1-\xFEa-z0-9._-]*[a-z]{2,3}(\?[\xA1-\xFEa-z0-9=&\?]+)*)";
|
|
|
|
// < 로 시작해서 3줄뒤에 > 가 나올 경우와
|
|
// IMG tag 와 A tag 의 경우 링크가 여러줄에 걸쳐 이루어져 있을 경우
|
|
// 이를 한줄로 합침 (합치면서 부가 옵션들은 모두 삭제함)
|
|
$src[] = "/<([^<>\n]*)\n([^<>\n]+)\n([^<>\n]*)>/i";
|
|
$tar[] = "<\\1\\2\\3>";
|
|
$src[] = "/<([^<>\n]*)\n([^\n<>]*)>/i";
|
|
$tar[] = "<\\1\\2>";
|
|
$src[] = "/<(A|IMG)[^>]*(HREF|SRC)[^=]*=[ '\"\n]*(". $regex['http'] ."|mailto:". $regex['mail'] .")[^>]*>/i";
|
|
$tar[] = "<\\1 \\2=\"\\3\">";
|
|
|
|
// email 형식이나 URL 에 포함될 경우 URL 보호를 위해 @ 을 치환
|
|
$src[] = "/(http|https|ftp|telnet|news|mms):\/\/([^ \n@]+)@/i";
|
|
$tar[] = "\\1://\\2_HTTPAT_\\3";
|
|
|
|
// 특수 문자를 치환 및 html사용시 link 보호
|
|
$src[]= "/&(quot|gt|lt)/i";
|
|
$tar[] = "!\\1";
|
|
|
|
// 3.0.11 에서 추가
|
|
$src[] = "/"/i";
|
|
$tar[] = "\"";
|
|
$src[] = "/'/i";
|
|
$tar[] = "'";
|
|
$src[] = "/}/";
|
|
$tar[] = "}";
|
|
$src[] = "/<a([^>]*)href=[\"' ]*(". $regex['http'] .")[\"']*[^>]*>/i";
|
|
$tar[] = "<A\\1HREF=\"\\3_orig://\\4\" target=\"_blank\">";
|
|
$src[] = "/href=[\"' ]*mailto:(". $regex['mail'] .")[\"']*>/i";
|
|
$tar[] = "HREF=\"mailto:\\2#-#\\3\">";
|
|
$src[] = "/<([^>]*)(background|codebase|src)[ \n]*=[\n\"' ]*(". $regex['http'] .")[\"']*/i";
|
|
$tar[] = "<\\1\\2=\"\\4_orig://\\5\"";
|
|
|
|
// 링크가 안된 url및 email address 자동링크
|
|
$src[] = "/((SRC|HREF|BASE|GROUND)[ ]*=[ ]*|[^=]|^)(". $regex['http'] .")/i";
|
|
$tar[] = "\\1<A HREF=\"\\3\" target=\"_blank\">\\3</a>";
|
|
$src[] = "/(". $regex['mail'] .")/i";
|
|
$tar[] = "<A HREF=\"mailto:\\1\">\\1</a>";
|
|
$src[] = "/<A HREF=[^>]+>(<A HREF=[^>]+>)/i";
|
|
$tar[] = "\\1";
|
|
$src[] = "/<\/A><\/A>/i";
|
|
$tar[] = "</A>";
|
|
|
|
// 보호를 위해 치환한 것들을 복구
|
|
$src[] = "/!(quot|gt|lt)/i";
|
|
$tar[] = "&\\1";
|
|
$src[] = "/(http|https|ftp|telnet|news|mms)_orig/i";
|
|
$tar[] = "\\1";
|
|
$src[] = "'#-#'";
|
|
$tar[] = "@";
|
|
$src[] = "/". $regex['file'] ."/i";
|
|
$tar[] = "\\1";
|
|
|
|
// email 주소를 변형한 뒤 URL 속의 @ 을 복구
|
|
$src[] = "/_HTTPAT_/";
|
|
$tar[] = "@";
|
|
|
|
// 이미지에 보더값 0 을 삽입
|
|
$src[] = "/<(IMG SRC=\"[^\"]+\")>/i";
|
|
$tar[] = "<\\1 BORDER=0>";
|
|
|
|
$str = preg_replace($src,$tar,$str);
|
|
|
|
return $str;
|
|
}
|
|
|
|
/**
|
|
* 검색어 스타일 변환
|
|
*
|
|
* @param string 검색어
|
|
* @param string 원본문자열
|
|
* @return string
|
|
*/
|
|
function setSearchStyle($word = '', $str) {
|
|
if (!trim($word)) {
|
|
return $str;
|
|
}
|
|
|
|
// 검색어 전체를 공백으로 나눈다
|
|
$words = explode(' ', $word);
|
|
|
|
$pattern = '';
|
|
$bar = '';
|
|
|
|
// "/(검색1|검색2)/i" 와 같은 패턴을 만듬
|
|
foreach ($words as $val) {
|
|
if (trim($val) == '') continue;
|
|
$tmp_str = quotemeta($val);
|
|
$tmp_str = str_replace(array("/", "|"), array("\/", "\|"), $tmp_str);
|
|
$pattern .= $bar . $tmp_str . "(?![^<]*>)";
|
|
$bar = "|";
|
|
}
|
|
|
|
$replace = "<em>\\1</em>";
|
|
|
|
return preg_replace("/(". $pattern .")/i", $replace, $str);
|
|
}
|
|
|
|
function setDefault($val) {
|
|
if ($val === null) {
|
|
return '';
|
|
}
|
|
return $val;
|
|
}
|