단일 테이블에서 실시간 가동률 뽑기

단일 테이블에서 실시간 가동률 뽑기

Database, PHP
일단 하기는 하였는데, 말이 안된다고 생각함! 문제가 뭐냐 하면은 모니터링 데이터를 제가 가공하는것이 아니라, 누군가 가동해 놓은 데이터를 가지고 실시간으로 전달해주는 행단위로 입력된것으로 데이터를 뽑습니다. 위와 같은 화면을 뽑기 위해서 처리해야 될 일은 많지만 이미 내가 만들지 않았고, 있는 정보를 가지고 처리를 해야 합니다. 위와 같은 형식으로 행단위로 엄청나게 쌓이기 시작합니다. 매일 몇초 단위로 데이터가 계속 들어오는 상태입니다. 1개의 Table를 가지고 데이터를 뽑는게 이렇게 힘들것이라고 이번에 처음 느꼈습니다.※ 가능하면 2번 다시 하고 싶지 않음 이제 이름별로 해서 가동률을 한번 뽑아보도록 하겠습니다. MySQL에서 다음의 쿼리문들 사용하였습니다. 위의 화면에 필요한 부분이 아래의 Query 입니다. 보기보다 쉽죠? 만들어 내는대는 하루지만 정리해 놓고 보면은 쉽게 보여집니다. // 이름별 가동율 SELECT A.MACHINE_NAME, CAST(IFNULL(B.MACHINE_PCNT, 0) AS UNSIGNED ) AS MACHINE_PRODUCT_CNT, MIN(C.MACHINE_DATETIME_MIN) AS MACHINE_TIME_MIN, MAX(C.MACHINE_DATETIME_MAX) AS MACHINE_TIME_MAX, CAST(IFNULL(C.USE_TIME, '0') AS UNSIGNED ) AS USE_TIME, CAST(IFNULL(E.USE_TIME_STOP, '0') AS…
Read More

[PHP] 2차원 배열 정렬

PHP
DB에서 결과값을 가져올때 OrderBy를 할 수 있으면 더없이 좋지만 피치못할 상정으로 Query문을 수정할수가 없는 경우가 생깁니다. 이럴경우에 이미 만들어진 결과 값을 사용자에게 보여주기 전에 정렬를 해서 결과를 보여 주면 될것 같습니다. foreach ((array) $result as $key => $value) { $sort[$key] = $value['objNumber']; // 정렬를 위한 키값 } array_multisort($sort, SORT_DESC, $result); //array_multisort($sort, SORT_ASC, $result); 최근에 위 정렬 방법으로 정렬을 함으로 인해서 기존의 코드를 수정하지 않고 결과를 재정렬해서 보여줄수 있도록 해 본적이 있습니다.
Read More

[PHP] 라인 Notify 기능

PHP
API 토큰 생성 사이트 : https://notify-bot.line.me/my/ 위 사이트에서 토큰을 발행 합니다. 아래의 기능으로 PHP 파일을 작성해서 데몬에 올려도 되고, cron에 작업해도 됩니다. $APIURL = "https://notify-api.line.me/api/notify"; $APIKey = "발행한 Key"; if ($imgUrl === null) { $postData = [ "message" => $msg ]; } else { $postData = [ "message" => $msg, "imageThumbnail" => $imgUrl, "imageFullsize" => $imgUrl ]; } $fields = ''; foreach ($postData as $dataKey => $dataValue) { $fields .= $dataKey . '=' . $dataValue . '&'; } rtrim($fields, '&'); $curlOptions = [ CURLOPT_URL => $this->APIURL, CURLOPT_POST => 1, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_POSTFIELDS => $fields, CURLOPT_HTTPHEADER => [ "authorization: Bearer ". $APIKey, "content-type: application/x-www-form-urlencoded" ], ]; $curl = curl_init(); curl_setopt_array($curl, $curlOptions); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl);
Read More

[PHP] date, 날짜 포맷 설정

PHP
년도와 관련된 포멧  문자  설명  예 Y 4자리 숫자로 표시  1999, 2003 y 2자리 숫자로 표시 99, 03 o ISO-8601에 맞는 포맷으로 표시 (Y랑 같으나, ISO 규격에 맞는 W가 포함한 년을 사용) 1999, 2003 L 윤년 여부 윤년 : 1아닐경우 : 0 월과 관련된 포맷 문자  설명 예  F 달을 영어로 표시  January, December M 3자리의 짧은 영어로 표시 Jan, Dec m 0을 앞에 붙인 2자리 숫자  01, 12 n 월을 숫자로 표시 1, 12 t 해당하는 달의 수를 표시 28, 30, 31 일과 관련된 포맷 문자 설명 예 d 0을 앞에 붙인 2자리 숫자 01 ~ 31 j 일을 숫자로 표시 1 ~ 31  z 1년의 n번째 날  0 ~ 365 S 날짜 뒤에 영어 2글자 suffix 추가 st, nd, rd or th (j와 잘 연동됨) 예: 1st, 2nd, 3rd,…
Read More

[PHP] MySQL 데이터 출력

PHP
1. mysql_fetch_row()mysql_fetch_row()는 데이터를 0으로 시작하는 숫자형 인덱스 배열로 반환합니다. $row = mysql_fetch_row($result); echo $row[0]; 2. mysql_fetch_assoc()mysql_fetch_assoc()는 데이터를 문자형 연관 배열로 반환합니다.배열의 키 이름으로는 필드의 이름을 갖습니다. $row = mysql_fetch_assoc($result); echo $row['key']; 3. mysql_fetch_array()mysql_fetch_array()는 $result_type의 값에 따라 반환될 배열의 형태가 다릅니다. $result_type의 값으로는 아래와 같은 상수가 올 수 있으며, 기본값은 MYSQL_BOTH입니다.  - MYSQL_NUM: 이 상수를 사용하면 숫자형 인덱스 배열을 반환합니다.  =  mysql_fetch_row()  - MYSQL_ASSOC: 이 상수를 사용하면 문자형 연관 배열을 반환합니다.  =  mysql_fetch_assoc()  - MYSQL_BOTH: 이 상수를 사용하면 인덱스 배열과 연관 배열을 동시에 반환합니다. ex) $row = mysql_fetch_array($result, MYSQL_BOTH) echo $row['key']; 4. mysql_result()mysql_result($query,0,0);    =>  ' 0행 0열 값 'mysql_result($query,0,1)     =>  ' 0행 1열 값 'mysql_result($query,1,1)     =>  ' 1행 1열 값 ' 5. 주의 사항mysql_fetch_row(), mysql_fetch_assoc(), mysql_fetch_array() 세 함수는 한 행에서 데이터를 읽습니다.또한 데이터를 읽은 후 함수 내부의 포인터를 증가시켜 다시…
Read More

[PHP] twitter API를 통해서 데이터 얻기

PHP
API 파일 출처 : http://github.com/j7mbo/twitter-api-php 위 사이트에서 API 파일을 획득 하였으며, 해당 기능을 위해서 사용을 합니다.트위터에 글을 올릴수도 있지만 현재 제가 사용하는 기능은 특정 계정의 글을 수집해서 서버에 저장 하기 위해서 필요한 기능입니다.API 파일에는 그 밖에도 많은 기능이 있지만은 전 일방적으로 글 내용을 가져오는 기능으로만 코드를 정리 합니다. /** * API 사용을 위한 기본 설정 **/ $SETTINGS = array( 'consumer_key' => "트위터에서 제공해주는 값", 'consumer_secret' => "트위터에서 제공해주는 값", 'oauth_access_token' => "트위터에서 제공해주는 값", 'oauth_access_token_secret' => "트위터에서 제공해주는 값" ); $URL = 'https://api.twitter.com/1.1/statuses/user_timeline.json'; /** * 트위터에 요청하고 결과값 받기 **/ $getfield = '?screen_name=트위터 계정명&count=받아올 숫자'; $twitterObj = new TwitterAPIExchange($SETTINGS); $response = $twitterObj->setGetfield($getfield)->buildOauth($URL, 'GET')->performRequest(); $response = json_decode($response, true); 이 이후 설정을 자신의 결과값을 보고 필요한 형태로 가공을 하면 됩니다.현재 가공 정보가 제가 독자적으로 가공하는 정보여서 기본 형태를 새롭게 만들경우에 해당 글을…
Read More

[PHP] 랜덤 문자열 생성

PHP
코딩시 가끔 무작위문자열이 필요할때가 있는데 시스템이나 내장함수에서 제공하는 방식은 원하는 기준으로 맞추기가 번거롭다.단순 비교만 사용되는 토큰이나 인증코드 등은 기본난수를 해시화해서 다루면 되지만 암호찾기 등으로 변경된 암호를 사용자에게 알릴 필요가 있을때에는 상황에 따라 정돈된 무작위문자열이 필요한 경우가 있다.랜덤문자를 원하는 조합으로 원하는 길이만큼 생성할 수 있도록 만들어 보았다. function get_random_string($type = '', $len = 10) {     $lowercase = 'abcdefghijklmnopqrstuvwxyz';     $uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';     $numeric = '0123456789';     $special = '`~!@#$%^&*()-_=+\\|[{]};:\'",<.>/?';     $key = '';     $token = '';     if ($type == '') {         $key = $lowercase.$uppercase.$numeric;     } else {         if (strpos($type,'09') > -1) $key .= $numeric;         if (strpos($type,'az') > -1) $key .= $lowercase;         if (strpos($type,'AZ') > -1) $key .= $uppercase;         if (strpos($type,'$') > -1) $key .= $special;     }     for ($i =…
Read More

[PHP] PHP MySQL PDO Class 파일 Ver. 2

PHP
[PHP] PHP MySQL PDO Class 파일 Ver. 2 기존에 동일한 게시물이 있습니다. 물론 크게 변하지는 않았지만 요구하는 조건이 서로 다르기에 글을 하나더 늘리는 방향으로 잡았습니다.다소 중복된 글이 있더라도 양해해주시기 바랍니다.이전 게시물을 보기 위해서는 이곳(PHP MySQL PDO Class 파일)을 클릭해주십시오. 이렇게 변경한 이유는 게시판에 사용을 하기 위해서 하다보니 매일 limit 를 사용하고 전체 게시물을 구하는 작업을 좀 줄여 보기 위해서 입니다.실제적으로는 MySQL에 쿼리를 2번 조회하지만 실행 파일에서는 1번만 하면은 모든것이 됩니다.limit , offset을 조합해서 사용할 수 있도록 수정을 한 버전입니다. <?php class DbMysqlLocal { private $host = 'localhost'; private $user = 'user '; private $pass = 'pass '; private $dbname = 'dbname '; private $port = '3306'; private $dbh; private $error; private $stmt; private $stmt1; private $foundrow; public function __construct() { // Set DSN $dsn = 'mysql:host='.$this->host.';port='.$this->port.';dbname='.$this->dbname; // Set options //…
Read More

[PHP] class 자동 로딩(autoload)

PHP
[PHP] class 자동 로딩(autoload) 지속적으로 class 파일이 늘어 남으로 인해서 include, require 를 사용하기도 힘들어지기도 합니다.그래서 최상단에 모든 파일이 1개 파일을 호출 하면은 class 파일은 자동으로 로딩하도록 하기 위해서 PHP에서 제공하는것을 사용해서 사용을 하고 있습니다. /* 편의상 comm.php 라고 해당 파일을 명명하겠습니다. */ define('_CLASSPATH_', '/home/user/class'); spl_autoload_register(function ($class) { require_once (_CLASSPATH_.'/class/'.$class.'.class.php'); }); 위에 파일을 하나 만들고 사용하고 싶은곳은 파일에서 위의 파일을 include, require 하면 됩니다. 이렇게 하면은 class 파일간에 상속이 필요하지 않습니다.제가 만들다가 알게 된것이라서 100% 공식적인 기능이라고 생각 하지 않지만 저는 잘 사용하는 편입니다. class 파일은 welcome.class.php , getout.class.php 파일입니다.실제 실행되는파일은 main.php 파일입니다. main.php 파일은 welcome.class.php 을 선언하고 사용을 하지만은 올바르지 않으면은 쫒아 내려고 합니다.welcome.class.php 파일은 일단 환영을 하도록 되어 있지만 쫒아내는 기능은 없습니다. 저는 예전에는 main.php 파일에서 welcome.class.php 도 포함하고 getout.class.php 도 포함해서 사용을 했지만은 지금은 이렇게 사용을 하고…
Read More

[PHP] SSH2 함수들

PHP
SSH2 함수들 . ssh2_auth_agent - ssh agent를 사용하여 SSH를 인증합니다. 2. ssh2_auth_hostbased_file - 공용 hostkey를 사용하여 인증합니다. 3. ssh2_auth_none - "none"으로서 인증합니다. 4. ssh2_auth_password - 일반적은 비밀번호를 사용하여 SSH를 인증합니다. ssh2_auth_password(컨넥션, 아이디, 비밀번호) 5. ssh2_auth_pubkey_file - 공용 키를 사용하여 인증합니다. 6. ssh2_connet - SSH 서버에 접속합니다. ssh2_connect(서버주소, 포트); 7. ssh2_exec - 원격 서버에 명령어를 실행합니다. ssh2_exec(컨넥스, 절대경로/파일명령어); 8. ssh2_fetch_stream - 확장된 데이터 스트림을 가져옵니다. 9. ssh2_fingerprint - 원격 서버들로 부터 fingerprint를 복구 합니다. 10. ssh2_methods_negotiated - negotiated 메소드들의 리스트를 리턴 합니다. 11. ssh2_publickey_add - 인증된 publickey를 추가합니다. 12. ssh2_publickey_init - publickey 서브시스템을 초기화 합니다. 13. ssh2_publickey_remove - 인증된 publickey를 제거합니다. 14. ssh2_scp_recv - SCP를 통해 파일을 요청합니다. ssh2_scp_recv(컨넥션, 리모트 경로, 로컬 경로); 15. ssh2_scp_send - SCP를 통해 파일을 전송합니다. (컨넥션, '/경로/옴길파일명', '/복사될경로/복사될파일명', 퍼미션(0644)) 16. ssh2_sftp_chmod - 파일 모드를 변경합니다. (컨넥션,…
Read More

[PHP] 문자 타입 체크

PHP
function StrTypeCheck($str, $type){ switch ($type){ case "digit": //숫자만 $filter = "'^[[:digit:]]*$'"; break; case "alpha": //영문만 $filter = "'^[[:alpha:]]*$'"; break; case "alnum": //영문,숫자만 $filter = "'^[[:alnum:]]*$'"; break; case "falnum": //영문,숫자만(첫자는 영문) $filter = "'^[a-zA-Z][0-9a-zA-Z]*$'"; break; case "lalpha": //소-영문만 $filter = "'^[a-z]*$'"; break; case "ualpha": //대-영문만 $filter = "'^[A-Z]*$'"; break; case "lalnum": //소-영문,숫자만 $filter = "'^[0-9a-z]*$'"; break; case "ualnum": //대-영문,숫자만 $filter = "'^[0-9a-z]*$'"; break; case "email": //이메일 $filter = "'^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$'"; break; case "domain": //도메인 $filter = "'^[a-zA-Z0-9]*((-|\.)?[a-zA-Z0-9])*\.([a-zA-Z]{2,4})$'"; break; case "koralnum": //한글숫자영문 $filter = '/^([\xEA-\xED][\x80-\xBF]{2}|[0-9a-zA-Z])+$/'; break; case "koralnumspace": //한글숫자영문공백 $filter = '/^([\xEA-\xED][\x80-\xBF]{2}|[0-9a-zA-Z\s])+$/'; break; case "kor": //한글 $filter = '/^([\xEA-\xED][\x80-\xBF]{2})+$/'; break; } if( preg_match($filter, $str, $matches) ) return true; else return false; }
Read More

[PHP] PHP MySQL PDO Class 파일

PHP
평소 작업을 하기 위해서 SQL 인젝션도 생각해야 되고 조금 귀찮은 부분이 있었는데....이제는 그냥 PDO를 사용해 버립니다. 그럼으로 인해서 인젝션는 그냥 조금 무시하는 편입니다. <?php class dbMysql { private $host = "localhost"; private $user = "사용자"; private $pass = "암호"; private $dbname = "데이터베이스"; private $dbh; private $error; private $stmt; public function __construct() { // Set DSN $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname; // Set options $options = array( PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ); // Create a new PDO instanace try{ $this->dbh = new PDO($dsn, $this->user, $this->pass, $options); $this->dbh->exec("SET CHARACTER SET utf8"); } // Catch any errors catch(PDOException $e){ $this->error = $e->getMessage(); } } /** * @brief * **/ public function query($query){ $this->stmt = $this->dbh->prepare($query); //echo $query.chr(10); } public function bind($param, $value, $type = null){ if…
Read More

[PHP] 텔레그램봇으로 정보 수신 받기

PHP
가공된 정보를 텔레그램으로 수진하는것입니다. 네이버 LINE이나 kakaotalk도 있지만 해당 메신저들은 공개된 API가 없어서 우회해서 받아야 하기 때문에 귀찮은 작업이 동반되지만 텔레그램은 봇을 통해서 제가 직접 메세지를 작성해서 보내면은 제가 수진을 할 수도 있습니다. 제가 활용하는것은 RSS수집후 필요한 정보 알림과, 서버의 정보를 일정시간마다 수신하는 방법으로 쓰고 있습니다. 이 방법외에도 봇을 통해서 계속 메세지를 받을 수 있습니다. 뭐 거창한것도 아니며, 제가 PHP로 사용하는 소스 코드입니다.class를 흉내내서 만들어 둔것입니다. ※ PHP (cli)에서 작동합니다. <?php /* https://telegram.me/botfather 접속하여 봇아빠를 채팅창에 호출 하고 다음 커맨드를 입력 ------------------------------- 봇이름 /newbot 봇실제아이디(끝에 bot을 붙여준다) /token /setabouttext 봇정보 안내문구 /setdescription 접속문구 ------------------------------- token이 바로 api */ class telegram { // 기본환경설정 private $tokenKey = '토큰키'; private $baseUrl = 'https://api.telegram.org/bot'; private $sendBool = false; private $messageChatId = ''; private $messageText = ''; /** * @brief * **/ public function…
Read More
[PHP] 카페 게시물 알림 SMS로 받기

[PHP] 카페 게시물 알림 SMS로 받기

PHP
우리나라 굴지의 포털이 네이버 카페의 새글을 알림은 분명히 네이버 앱으로도 받아 볼 수 있습니다. 하지만 ID라는것이 여러사람이 공용으로 사용하기에도 뭐한부분입니다. 카페 입장에서는 대표 ID가 있는데 별도로 관리자 설정을 해주기 위해서는 부담 스러운 부분도 존재하고, 작업사업자이다 보니 몇개월 있다가 나가면은 또 다시 카페의 최고관리자에게 ID삭제 요청등의 귀찮은 일도 생기기 바련입니다. 그외에도 게시물을 자신이 등록할 수도 있는데, 앱을 통해서 하다보면은 앱 알림 인원에게 모두 날아가게 됩니다. 카페에 가입한게 1~2개도 아니고 무수히 날라오기 시작하면은 앱을 구동하고 봐야 하고 귀찮은것도 있다고 생각을 합니다. 제가 이런것을 만들어 달라고 하신분은 단순하게 게시물을 수집하고 언제 등록되었는지 바로 알고 싶다는 정말 단순한 이유에서 였습니다. 아래 사진은 그냥 카페의 일반적인 샘플 사진입니다. (공개된것을 사용할 수가 없어서요) 이렇게 게시판 형태로 되어 있는 부분을 제목을 가지고 개인적으로 SMS를 받기 원하시는 부분이었습니다. 물론 분석 작업과 파싱 작업은 이전에 많이 하여서 약간의 변형과…
Read More