[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

[NGINX] userdir 추가

WWW
[NGINX] userdir 추가 location ~ ^/~([^/]+)/(.+\.php|\.htm)$ { if (!-f /home/$1/www/$2) { rewrite ^ 404; } alias /home/$1/www/$2; } location ~ ^/~([^/]+)(/.*)?$ { alias /home/$1/www$2; autoindex on; }
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

[PHP] curl을 이용한 이미지 다운로드

PHP
curl를 이용해서 웹 이미지 다운로드 이번에는 전체 소스가 없습니다.초기에 만들고 계속 수정에 수정을 거듭하다보니 저 혼자만 사용할 수 있는 조금 난해한 코드들이 넘쳐나게 되 간한히 함수랑 사용방법의 코드만 올려 놓습니다. public function getImage($url) { curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 인증서 체크같은데 true 시 안되는 경우가 많다. curl_setopt($ch, CURLOPT_POST, false); // Post Get 접속 여부 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_TIMEOUT, 60); // TimeOut 값 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //http 응답코드가 302일때 redirect_url 로 따라감 curl_setopt($ch, CURLOPT_MAXREDIRS, 5); //if http server gives redirection responce curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 결과값을 받을것인지 $data = curl_exec($this->ch); $return = base64_encode($data); return $return; } 위에 함수를 사용하면은 웹에서 이미지를 가져 올 수 있습니다.이미지의 접속가능한 URL이 있어야 접속이 됩니다. $curlDataImg = new curlData(); $returnImgBase64 = $curlDataImg->getImage($urlImg); $imageSource = base64_decode( $returnImgBase64 ); 위에 코드를 이용해서 이미지의 바이너리를 확인해…
Read More
카카오톡으로 웹페이지 img src 사용시에 ‘./’ 인식문제

카카오톡으로 웹페이지 img src 사용시에 ‘./’ 인식문제

WWW
카카오톡으로 웹페이지 img src 사용시에 './' 인식문제 내용이랄것도 없습니다. 단순하게 소스만 올리고 캡쳐 사진만 올리기 보다는 한번 경험담을 적어 보는것도 좋지 않을까 싶어서 글을 작성하는 것입니다. 제가 겪은 상항이 100% 해결 방법도 아님을 미리 고지 합니다. 웹페이지를 제작해드리고 나서 스마트폰으로 카카오링크를 통해서 주소를 전달하면서 접속 할 수 있도록 하는것이였습니다. HTML 태그 중에서 " <img src"./이미지 파일 이름"> "으로 사용하는 경우도 제법 있습니다. " ./  " 은 아마 그 해당 디렉토리에서 처리하기 위해서 가끔 사용하기도 합니다.  하지만 이번에는 문제가 발생한 부분이 " ./ "로 하는 것이었습니다. 웹브라우저의 인식의 문제 인지 인앱의 문제인지는 확실하지 않습니다. 제가 겪은 부분은 문제가 있으니 한번 고쳐 달라는 단순한 요구 사항을 듣고, 이러하다는것을 토대로 그냥 상대 경로를 절대 경로로 변경하는 작업을 한것 뿐이기에 다시 한번더 정확하지 않음을 말씀드립니다. 위에 접부된 사진을 기준으로 설명을 하겠습니다. 1차 적으로 웹페이지의…
Read More
[PHP] skechers.com 스크래핑 웹페이지 소스 얻기

[PHP] skechers.com 스크래핑 웹페이지 소스 얻기

CSharp, PHP
# 요구사항 1. 전체 상품을 모두 가져와야 한다. 2. 각 상품의 모든 보여주는 이미즈를 모두 저장해야 한다. 3. 각 상품의 고유한 정보는 정리해서 모두 등록한다. # 작업환경 Visual Stuido 2013 C# WinForm, MySQL PHP 7.0.4 (cli) 초기 작업은 C#으로 이줘졌지만은 이후 작업은 Local에서 순수 PHP (cli)만드로 작업이 되었습니다. 1. 각 상품의 대분류에 따라서 이미지 저장을 달리함. 일단 영문자, - 외에는 모두 제거 하여서 Web상에서 사용할 경우에도 주소를 획일한 시켜드림 각 이미지 파일은 원본 사이트의 순수 이름 그대로 인용하여서 처리 하였습니다. 2. 각 상품상세정보 페이지에서 가져온 원본 소스와 해당 정보를 추리하는 JSON값을 추출하여서 별도로 분리하여서, 웹스크래핑 당시의 전체 웹페이지를 눈으로 확인 할 수 있습니다. 아울러 JSON으로 별도로 저장해서 상품상세페이지에서 정보를 한눈에 볼 수 있도록 파일을 만들어 드렸습니다. 아래의 캡쳐 화면은 원본 사이트의 순서 소스를 그대로 저정한 화면이기때문에 바로 로컬에서 웹페지를 확인해…
Read More
[C#] 연봉정보 검색 후 상세정보 수집

[C#] 연봉정보 검색 후 상세정보 수집

CSharp
[C#] 연봉정보 검색 후 상세정보 수집 Jobkorea의 연봉검색을 통해서 전체 기업명과, 기업의 연봉정보를 직급결로 수집하는것입니다. 한번에 전체 수집도 있지만, 개별적으로 검색해서 수집을 할 수 있는 기능을 포함을 요청 하였습니다. 작업환경 Visual Studio 2013 C# WinForm HtmlAgilityPack 라이브러리 사용 요구사항 1. Jobkorea 로그인 하여서 연봉 검색후 파일 저장 요청 2. 전체 기업 목록을 수집 3. 원하는 기업 검색후 해당 기업만 선택후 수집 4. 각 기업의 상세정보의 직급별 정보를 요청함 작업 화면 (※ 작업화면의 결과는 일반적으로 공개되지 않으면은 일부 내용을 삭제 처리하여서 난독화 시켜 놓습니다.) 1. 초기 화면 1-1. 연봉 전체 검색시 화면 1-2. 개별 검색 화면 2. 목록 파일 생성 결과 화면 해당 목록의 파일을 생성합니다. 중복을 최대한 억제하기 위해서 개별적으로 날짜와 시간을 넣어서 파일명의 동일할 경우에 덮어쓰지 않도록 하였습니다. 파일은 CSV(Tab 구분)으로 생성하여서 파일을 생성한 화면 입니다. 3. 개별 상세…
Read More

[PHP] fopen 옵션 정리

PHP
[PHP] fopen 옵션 정리 기본적으로 fopne 옵션을 사용할때 사용하는 옵션을 정리해 놓은것입니다.간단하게 쓰이지만 매번 잊어 먹어서 한번 정리를 해 놓습니다. "r" : 읽기 전용 모드. 파일이 없으면 NULL return."w" :쓰기 전용 모드. 파일이 없으면 생성되고 있으면 내용이 없어진다."a" : append모드. 파일이 없으면 생성. 이미 존재하는 파일 끝부분에 file pointer가 위치하게 되며 이 위치부터 뒷쪽으로만 write가능. 읽기는 불가능. fseek등으로 이 부분보다 앞으로 file pointer를 이동시키면 어떻게 될까 ? 아래 내용으로 봐서는 fseek등으로 file pointer를 이동하여도 이와 상관없이 파일 끝부분에 write가 되는 것으로 생각됨. "r+" : 읽고 쓰기 모드, 파일이 없으면 NULL return."w+" : 읽고 쓰기 모드 단, 파일이 없으면 만들고 있으면 기존 내용을 지움. write를 먼저 한 후 동일 파일 포인터로 읽기 수행이 필요한 경우 사용. 보통은 읽기 전용, 혹은 쓰기 전용으로 fopen하므로 w+가 필요한 일은 별로 없을 듯."a+" : append모드,…
Read More
[C#] skechers.com 스크래핑 웹페이지 Source 크롤링

[C#] skechers.com 스크래핑 웹페이지 Source 크롤링

CSharp
# 요구사항1. 전체 상품을 모두 가져와야 한다.2. 각 상품의 모든 보여주는 이미즈를 모두 저장해야 한다.3. 각 상품의 고유한 정보는 정리해서 모두 등록한다. # 작업환경Visual Stuido 2013 C# WinForm, MySQLPHP 7.0.4 (cli) skechers.com 작업은 조금 귀찮은 작업으로 이뤄졌습니다.일단 AJAX로 json 값을 가져와서 페이지에 로딩하기때문에 한번에 HTML 소스를 가져오지 못하였습니다. 위 사진과 같이 상품 진열 페이지가 일반적으로 보면은 웹페이지만은 AJAX로 추가되기 때문에 소스를 가져오는 방식이 조금 사물 다릅니다. 각 상품의 URL 주소를 번호를 주어서 아래와 같이 저장을 하여서 1~* 까지 번호로 저장을 하였습니다.물론 각기 원하는 방식으로 저장도 되지만은 숫자가 가장 편한 작업니다. 이후에 작업은 C#에서 처리 하지 않았습니다.PHP로 LOCAL로 처리 하였습니다
Read More

[C#] Webbrowser의 스크롤을 가장 하단으로 보내기

CSharp
웹브라우저를 사용할 경우에 가로 스크롤를 가장 하단으로 보내는것입니다. #파라미터 Bool # true : Top # false : bootom webBrowser1.Document.Body.ScrollIntoView(false); 사용하는 목적은 가로 스크롤이 길 경우에 화면에 보이는 부분을 가장 하단으로 하여서 지표를 보기 위해서 입니다.
Read More