버킷(vucket), 토픽을 생성하여 경험과 지식을 공유하고 많은 사람들과 함께 토론해보세요.
: 466    : 0
Topic Thumbnail
[Javascript] 자동 새창 크기 조절 : .resizeTo(width, height)
자바스크립트에서 윈도우 창 크기 조절에 대해 알아보겠습니다. window.open 함수를 통해 width와 height 값을 지정하여 새창을 띄우는 경우 브라우저마다 창의 크기가 조금씩 차이가 납니다. var url = 'http://vucket.com'; window.open(url,'vucket',"width=980, height=700"); 그 이유는 브라우저마다 UI에 따른 창의 크기가 달라질 수 있기 때문입니다.  (크롬) (오페라) 위 캡쳐 이미지는 각각 크롬과 오페라의 창을 캡쳐한 것 입니다. 새창에 대한 캡쳐는 아니지만 한눈에 보더라도 비슷한 창의 크기이지만 실제 웹사이트의 노출 크기를 다르다라는 것을 알 수 있습니다. 이제 우리는 window.outerWidth, window.innerWidth, window.outerHeight, window.innerHeight 값을 알아보겠습니다. - window.outerWidth : 창의 넓이 - window.innerWidth : 내부 웹사이트를 노출하는 부분 넓이(스크롤 포함) - window.outerHeight : 창의 높이 - window.innerHeight : 내부 웹사이트를 노출하는 부분 높이(스크롤 포함) 이렇게 창틀의 크기가 다르기 때문에 window.open 창 크기가 다르게 띄워지게 되며, 우리는 이를 극복하기 위해 새창으로 띄워진 웹페이지에 .resizeTo() 함수를 넣어 새창의 크기를 조절할 수 있습니다. resizeTo 의 가로 = 이미지의 width + (window.outerWidth - window.innerWidth)  resizeTo 의 세로 = 이미지의 height + (window.outerHeight - window.innerHeight) window.outerWidth - window.innerWidth 는 창바깥쪽 크기에서 안쪽 크기를 뺀 값이므로 창틀의 크기가 됩니다. - 전체 div의 class가 wrap일 경우 jQuery를 이용한 창크기 조절 예제 -  <script> window.resizeTo( $('.wrap').width() + (window.outerWidth - window.innerWidth), $('.wrap').height() + (window.outerHeight - window.innerHeight)); </script>
: 644    : 0
Topic Thumbnail
[PHP] 13자리 timestamp 생성 (밀리세컨드 단위)
Javascript 의 timestamp 출력 방법입니다. var millisecond = new Date().getTime(); console.log('timestamp : ' + millisecond); PHP의 timestamp 출력 방법입니다. $timestamp = time(); echo 'timestamp : ' . $timestamp; 하지만, 두 timestamp에는 차이가 있습니다. Javascript의 Timestamp는 13자리 즉 밀리세컨드 단위까지 출력해줄 수 있지만 PHP의 Timestamp값은 10자리 즉 밀리세컨드가 포함되지 않은 단위까지만 출력됩니다. 이렇다보니 밀리세컨드까지 비교 처리시 문제가 발생하게 됩니다. 따라서, PHP에서는 아래와 같이 밀리세컨드까지 출력하는 함수를 따로 만들어서 사용하시면 됩니다. - PHP - private function getMillisecond() { list($microtime,$timestamp) = explode(' ',microtime()); $time = $timestamp.substr($microtime, 2, 3); return $time; }
: 416    : 0
Topic Thumbnail
[jQuery] 모바일 <textarea> 붙여넣기 이벤트시 텍스트 카운트
PC환경에서는 keyup과 blur 이벤트만으로도 <textarea>의 텍스트 카운트 처리가 가능했는데 모바일환경인 경우에는 두 이벤트만으로는 처리가 안되는 상황이 있습니다. 특히, (모바일 환경에서) 다른 화면의 텍스트를 복사하여 <textarea>에 붙여넣기 했을 경우가 그렇습니다. 이런 경우 keyup 이벤트를 미리 구현해놓은 후 bind 함수를 통해 keyup 이벤트를 트리거하여 처리가 가능합니다. HTML <div class="inputWrap"> <textarea class="inputTextarea" maxlength="300" placeholder="내용을 입력하세요."></textarea> <span class="count">0/300</span> </div> JQUERY $('.inputTextarea').on('keyup', function(e) { e.preventDefault(); var content = $(this).val(); $('.inputWrap .count').text(content.length + '/300'); if (comment.length > 300) { $(this).val(comment.substring(0, 300)); } }); 여기까지는 keyup 이벤트를 활용하여 카운트 처리를 한 부분입니다. 모바일 붙여넣기 이벤트에 대한 트리거 처리는 아래와 같습니다. JQUERY MOBILE TRIGGER $('.inputTextarea').bind('input paste', function() { $(this).trigger('keyup'); }); 간단히 bind 함수로 input paste 이벤트가 실행되는 경우 trigger 함수로 keyup 이벤트를 실행해주는 형태입니다. 모바일 환경에서 <textarea> 텍스트 카운트 정보를 제공해주는 사이트라면 유용한 팁이 되겠네요.
: 456    : 0
Topic Thumbnail
[PHP] $_FILES 업로드 파일 접근
HTML form으로부터 넘어온(post) file 오브젝트는 php에서 $_FILES에 담겨있습니다. 이를 이용하여 업로드를 구현하면 됩니다. $_FILES에는 다음과 같은 변수로 값이 저장되어집니다. 아래는 file폼의 name값이 upfile이라는 가정하여 작성하였습니다. $_FILES['upfile']['tmp_name'] = 웹서버에 임시로 저장된 파일의 위치 $_FILES['upfile']['name'] = 사용자 시스템에 있을 때의 파일 이름 $_FILES['upfile']['size'] = 파일의 바이트 크기 $_FILES['upfile']['type'] = 파일의 MIME 타입 예)text/plain | image/png $_FILES['upfile']['error'] = 파일 업로드시 발생한 오류 코드 그렇다면 간단히 PHP에서는 어떻게 구성되는지 보겠습니다.   $uploadDir = 'upload/' $file = $_FILES['upfile']['name']; if (!empty($file)) { $target = $uploadDir . $file; if (move_uploaded_file($_FILES['upfile']['tmp_name'], $target)) { // insert 처리 : 파일 경로는 $target // 출력 시 $target 경로로 출력함 } } @unlink($_FILES['upfile']['tmp_name']); // 임시 파일 삭제
: 523    : 0
Topic Thumbnail
[PHP] MSSQL 드라이버 sqlsrv와 mssql은 무엇이 다른가?
sqlsrv (SQL Server Driver for PHP)는 2008년 7월부터 사용할 수 있지만 아직도 오래된 드라이버인 mssql 드라이버를 많이 보게됩니다. 지금도 많은 튜토리얼이나 포럼에서 mssql 드라이버를 기준으로 작성되거나 이야기 되어지고 있으며  sqlsrv과 mssql를 혼용하여 쓰는 경우가 많습니다. 실제로 드라이버명만 봐서는 "둘 중 아무거나 사용해도 다 같은거 아닐까?" 라고 혼란스러울 수 있으며 어떤 차이점이 있는지 궁금하게 생각할 수도 있습니다. 하지만, 이 sqlsrv와 mssql은 전혀 동일하지 않습니다. * 유지 관리의 주체가 다릅니다. - sqlsrv 드라이버는 Microsoft가 제작, 유지 관리 지원합니다.  - mssql 드라이버는 Community-build 드라이버 입니다. * 두 드라이버의 기본 기술이 다릅니다. - sqlsrv 드라이버는 ODBC를 기반으로 최신 SQL Server 릴리즈의 기능에 대한 엑세스를 제공합니다. 2012년 3월부터 for Linux도 제공하고 있습니다. - mssql 드라이버는 DB Lib(즉, Windows: ntwdblib.dll, Linux: freeTDS)를 기반으로 빌드되어 사용되고 있지만 Microsoft는 이를 더이상 지원하지 않고 있습니다. 최근 PHP 7.0로 릴리즈된 이후 부터는 mssql_connect() 함수가 삭제되었으며, php.net에서는 이에 대한 대안으로 세가지를 기술했습니다. - PDO::__construct() - sqlsrv_connect() - odbc_connect() 저의 경우에는 DB서버가 SQL Server 2016로 변경되면서 Linux 환경에서 PHP(Laravel 5.1)에서 가끔씩 아래와 같은 Exception 오류가 발생하는 문제를 발견하였습니다. 문제는 가끔씩 지속적으로 발생한다는 것입니다.  PDOException in Connector.php line 55: SQLSTATE[01002] Adaptive Server connection failed (severity 9) .. Linux 에서는 mssql 드라이버 + freeTDS(버전 7.2)를 사용하고 있었고 freeTDS 버전 8.0으로 올리는 것만으로도 해결되지 않고 Connection이 계속 불안한 상태를 보이고 있습니다. 이는 추후 테스트와 연구를 좀 더 하고 공유하겠습니다. 종합적으로 보면 최신 버전으로 구축을 진행하신다면 sqlsrv 드라이버로 php + mssql 연동 하시길 바랍니다. 관련 사이트들입니다. - http://php.net/manual/kr/book.sqlsrv.php - https://github.com/Microsoft/msphpsql - https://www.microsoft.com/en-us/sql-server/developer-get-started/php-ubuntu
: 651    : 0
Topic Thumbnail
[jQuery] 로딩 레이어(Loading Layer) 띄우기
웹사이트에 접속하면 브라우저는 웹 문서를 읽고 DOM 생성을 거친 후 요소들을 로드 후 웹페이지를 최종 로딩하여 사용자에게 출력하게 됩니다. 이 과정에 로딩이 완료되지 않은 이벤트는 작동하지 않는 상황이 발생되어 웹페이지 오류가 발생하여 다른 이벤트가 정상적으로 작동하지 않는 경우가 생길 수 있습니다. 또한, API를 통해 데이터를 리턴받아 웹페이지의 특정 요소에 넣어 출력해야 한다면 진행되는 동안 단 1초라도 아무것도 없는 빈페이지보다는 데이터를 로딩중이라는 로딩 레이어를 띄워 사용자에게 프로세스 상태를 알려주어 페이지 이탈을 막는 것도 중요합니다. 이를 방지하기 위해 웹페이지가 정상적으로 로딩될때까지 로딩 레이어(Layer)를 띄워주는 방법이 있습니다. (물론 웹페이지 로드를 위한 최적화 함께 진행되어야 합니다.) 그럼 아래 소스코드를 따라 jQuery를 이용한 로딩 레이어를 띄워보는 실습해보겠습니다. <style> 태그에 포함되는 소스코드 입니다. <style type="text/css"> .loading { width: 100%; height: 100%; position: absolute; top: -4px; left: 0; z-index: 99999; background: rgba(0, 0, 0, 0.5); display: none; } .loading p { position: relative; top: 50%; margin: -75px auto 0 auto; width: 200px; height: 50px; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; background: #fff; box-sizing: border-box; padding: 0 30px; text-align: center; font-size: 16px; color: #555; } .loading p strong { display: block; padding-top: 15px; font-style: italic; } </style> <body> 태그에 포함되는 html 코드입니다. <div id="wrap"> <section> <div style="text-align: center"><h1>Loading TEST</h1></div> <iframe src="http://vucket.com" width="100%" height="600px"></iframe> </section> <!--loading--> <section class="loading"> <p> <strong>로딩중..</strong> </p> </section> </div> <script> 태그에 포함되는 소스코드입니다. <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> <![endif]--> <!-- jQuery --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function() { console.log('로딩 활성화'); $('.loading').show(); }); $(window).on('load', function() { console.log('로딩 비활성화'); $('.loading').hide(); }); </script> Full source code <!DOCTYPE html> <html lang="en"> <head> <title>버킷(vucket) | Loading layer test</title> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, shrink-to-fit=no, initial-scale=1"> <meta name="description" content=""> <meta name="author" content=""> <style type="text/css"> .loading { width: 100%; height: 100%; position: absolute; top: -4px; left: 0; z-index: 99999; background: rgba(0, 0, 0, 0.5); display: none; } .loading p { position: relative; top: 50%; margin: -75px auto 0 auto; width: 200px; height: 50px; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; background: #fff; box-sizing: border-box; padding: 0 30px; text-align: center; font-size: 16px; color: #555; } .loading p strong { display: block; padding-top: 15px; font-style: italic; } </style> </head> <body> <div id="wrap"> <section> <div style="text-align: center"><h1>Loading TEST</h1></div> <iframe src="http://vucket.com" width="100%" height="600px"></iframe> </section> <!--loading--> <section class="loading"> <p> <strong>로딩중..</strong> </p> </section> </div> <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> <![endif]--> <!-- jQuery --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function() { console.log('로딩 활성화'); $('.loading').show(); }); $(window).on('load', function() { console.log('로딩 비활성화'); $('.loading').hide(); }); </script> </body> </html> 위 소스에서 보시면 $(document).ready() 에서 로딩을 활성화하고 $(window).on('load', ..) 에서 로딩을 비활성화 시키고 있습니다. 다시 말해 DOM생성된 이후 로딩이 활성화되고 최종 모든 요소들의 로드가 완료되면 로딩이 비활성화되는 것입니다.
: 356    : 0
Topic Thumbnail
[Javascript] window 객체
window 객체는 사용자의 Javascript 프로그램 즉, 웹 브라우저의 전역 객체입니다. 예를들어 Javascript의 alert(''); 함수를 통해 메세지창을 띄우는 최상위 객체가 window 객체입니다. 또한, 브라우저 새창을 만들어 띄우는 것 역시 window 객체에서 이뤄집니다. 이렇게 window 객체는 웹사이트를 통한 서비스와 밀접한 관련이 있기 때문에 어떠한 속성과 메서드가 존재하는지 알고 개발을 하시면 더 훌륭한 웹사이트를 제작하는데 도움이 됩니다. 하지만, 브라우저마다 지원되는 범위가 다르기 때문에 브라우저별 객체에 따른 지원여부를 꼭 확인바랍니다. 브라우저 내장 객체 Window : 브라우저 창이 열릴 때 마다 만들어지는 객체이며 브라우저 창 안에 존재하는 모든 요소의 최상위 객체입니다.   - Frame : 프레임마다 하나씩 만들어지며 <frame> 태그마다 만들어집니다.   - Location : 현재 문서에 대한 URL 정보를 가지고 있는 객체입니다.   - History : 현재 창에서 사용자의 방문 기록을 저장하는 객체입니다.   - Document : 웹 문서마다 하나씩 만들어지며 <body> 태그마다 만들어집니다. HTML 문서에 대한 정보를 가지고 있습니다.     > Layer : <layer> 태그 객체입니다.     > Image : <img> 태그 객체입니다.     > Link : <a href="..."> 태그 객체입니다.     > Area : <area> 태그 객체입니다.     > Anchor : <a name="..."> 태그 객체입니다.     > Form : <form> 태그 객체입니다.       # Text, Textarea, FileUpload, Hidden, Password, Submit, Reset, Button, Checkbox, Select - Option, Radio Navigator : 현재 사용하는 브라우저에 대한 정보를 가지고 있는 객체입니다.   - Plugin : 브라우저에 설치된 플러그인 정보를 저장하고 있는 객체입니다.   - MimeType : 브라우저의 마임(MIME) 지원 정보를 가지고 있는 객체입니다. window 객체 속성 - defaultStatus (Opera 외 지원불가) : 브라우저 상태 표시줄에 표시할 문자열의 초기 값을 설정합니다. - status (Opera 외 지원불가) : 상태 표시줄에 표시할 문자열을 지정합니다. - window : 창 자신을 의미합니다. - frames : 창에 포함된 프레임을 배열 형태로 지정합니다. - opener : open() 메소드를 사용해서 새 창을 열었을 경우, 새 창을 열도록 한 문서를 의미합니다. - parent : 주종 관계를 이루고 있는 프레임 문서에서 상위 프레임을 의미합니다. - self : 현재 작업 중인 창, 즉 자기자신을 의미합니다. - top : window 객체 간에 계층구조가 생길 때 최 상위 객체를 의미합니다. - classes : 문서 안에 정의된 모든 스타일시트의 정보를 갖고 있습니다. - tags : 문서 안에 정의된 모든 태그의 정보를 나타냅니다. - screenX : 창의 x 좌표를 반환합니다. - screenY : 창의 y 좌표를 반환합니다. - closed : 창이 닫혀 있는지 확인한 후 true, false를 반환합니다. - name : 창 이름을 반환합니다. - length : 창 안에 프레임 수를 반환합니다. (넷스케이프 네비게이터 전용) - innerHeight : 브라우저 내용의 높이를 반환합니다. - innerWidth : 브라우저 내용의 넓이를 반환합니다. - outerHeight : 브라우저 전체 높이를 반환합니다. - outerWidth : 브라우저 전체 넓이를 반환합니다. - pageXoffset : 현재 나타나는 페이지의 x 좌표를 반환합니다. - pageYofset : 현재 나타나는 페이지의 y 좌표를 반환합니다. window 객체 메서드 - alert() : 경고용 대화상자를 띄워줍니다. - confirm() : 확인, 취소를 선택할 수 있는 대화상자를 띄워줍니다. - open() : 새로운 창을 오픈합니다. - prompt() : 입력창이 있는 대화상자를 띄워줍니다. - setTimeout() : 일정 간격으로 함수를 호출하여 수행합니다. (Millisecond 단위) - clearTimeout() : setTimeout 메소드를 정지합니다. - eval() : 문자열을 숫자로 변환합니다. - toString() : 오브젝트를 문자열로 변환합니다. - blur() : focus가 다른 객체로 이동합니다. - focus() : focus를 지정합니다. - scroll() : 창을 스크롤 합니다. - valueOf() : 오브젝트 값을 반환합니다. - back() : 한 단계 전 URL(이전화면)로 돌아갑니다. (IE 지원 불가) - find() : 창안에 지정된 문자열이 있는지 확인, 있다면 true 없으면 false를 반홥합니다. (IE 지원 불가) - forward() : 한 단계 뒤의 URL(다음화면)로 이동랍니다. (IE 지원 불가) - home() : 초기화 홈페이지로 이동합니다. (IE 지원 불가) - moveby() : 창을 상대적인 좌표로 이동합니다. 수평방향과 수직방향의 이동량을 픽셀로 지정합니다. - moveto() : 창을 절대적인 좌표로 이동합니다 . 창의 왼쪽 상단 모서리를 기준으로 픽셀을 지정합니다. - resizeby() : 창의 크기를 상대적인 좌표로 재설정합니다 . 밑변의 모서리를 기준으로 수평방향, 수직방향을 픽셀로 지정합니다. - resizeto() : 창의 크기를 절대적인 좌표로 재설정합니다 . 창 크기를 픽셀로 지정합니다. - scrollby() : 창을 상대적인 좌표로 스크롤합니다. 창의 표시영역의 수평방향과 수직방향에 대해 픽셀로 지정합니다. - scrollto() : 창을 절대적인 좌표를 스크롤합니다. 창의 왼쪽 상단 모서리를 기준으로 픽셀로 지정합니다. - stop() : 불러오기를 중지합니다. (IE 지원 불가) - captureEvents() : 모든 타입의 이벤트를 판단합니다. - setInterval() : 일정시간마다 지정된 처리를 반복합니다. - clearInterval() : setInterval 메소드의 정지합니다. - print() : 화면에 있는 내용을 프린터로 출력합니다. - handleEvent() : 이벤트 취급자를 정합니다. - releaseEvent() : 다른 계층의 이벤트로 이벤트를 넘깁니다. - routeEvent() : 판단한 이벤트와 같은 계층의 이벤트입니다. - toSource() : 오브젝트값을 문자열로 반환합니다. window 객체 이벤트 핸들러 - onLoad : 문서를 읽을 때 발생합니다. - onUnload : 현재 문서를 지울려고 할 때 합니다. - onBlur : 브라우저가 포커스를 잃을 때 발생합니다. - onFocus : 브라우저에 포커스를 얻을 때 발생합니다. - onDragDrop : 사용자가 다른곳에서 객체를 브라우저 안에 넣으려고 할 때 발생합니다. (IE 지원 불가) - onError : 문서를 읽는 중에 에러가 생길 때 발생합니다. - onMove : 브라우저의 위치를 변경했을 때 합니다. (IE 지원 불가) - onResize : 창의 크기를 변경했을 때 합니다. (IE 지원 불가) 타이머 setTimeout(), setInterval()를 사용하면 지정한 시간이 흐른 후 한번 이상의 호출되는 함수를 등록할 수 있습니다. window 객체의 메서드로 정의되어 있지만 실제로는 브라우저 창과는 아무런 관련이 없습니다. 참고사이트 :  - http://www.w3schools.com/jsref/obj_window.asp - https://developer.mozilla.org/ko/docs/Web/API/Window
: 352    : 0
Topic Thumbnail
[jQuery] ready와 load의 차이
웹 브라우저 시작 -> 웹 문서 읽기 -> DOM 생성(ready) -> 요소 로드 -> 페이지 로딩 완료(load) ready : DOM이 생성되면 실행됩니다. (데이터가 바인딩 되기 이전)   $(document).ready(function() {     $('#loading').show(); }); ※ ready() 는 <body onload="">와 함께 사용해서는 안됩니다. load : 모든 요소(이미지 포함)들이 로드 완료되면 실행됩니다. (데이터 바인딩 된 후 호출)   $(window).load(function() {     $('#loading').hide(); }); 정리하자면 외부자원(images, styles(css), scripts(js), frame, iframe 등..)이나 window 객체가 모두 로드되었을 때 그 자원들을 가공할 필요가 있다면 load 메소드를 사용하고 생성된 DOM객체(html)들만 가공할 필요가 있다면 ready 메소드를 사용하면 됩니다.
: 401    : 0
Topic Thumbnail
[PHP] Unix timestamp와 날짜의 상호변환
Unix timestamp는 세계표준시(영국 그리니치 천문대) 기준으로 1970년 1월 1일 0시 0분 0초를 0으로 시작하여 1초마다 1을 더하는 방식으로 계산되는 시간 표시 방법입니다. 예를들어 1970년 1월 1일 00시 01분 00초는 60이 됩니다. (추가된 1분은 초당 +1이므로 60이 됩니다) php에서는 현재 시간을 Unix timestamp로 출력하기 위해서는 time() 함수를 사용합니다.   $timestamp = time(); echo $timestamp; 만약 지정된 날짜와 시간을 Unix timestamp로 출력하게 위해서는 strtotime() 함수를 사용하면 됩니다.   $timestamp = strtotime("2017-02-08 14:47:32"); echo $timestamp; 그렇다면 "2017-02-08 14:47:32"를 Unix timestamp로 출력해보면 1486565252 으로 출력되게 됩니다. 이것은 UTC 기준이라는 것을 잊지마세요. 참고로 우리나라 대한민국은 UTC보다 9시간이 빠릅니다.  만약 서버의 Date Time Zone 을 사용하여 Unix timestamp를 출력하고 싶다면 아래와 같이 사용하면 됩니다.   $date = new DateTime(null, new DateTimeZone('Asia/Seoul); echo 'Asia/Seoul timezone: ' . $date->getTimestamp() . '<br />'; $date = new DateTime(null, new DateTimeZone('Ameria/Los_Angeles); echo 'Ameria/Los_Angeles: ' . $date->getTimestamp() . '<br />'; 예제 // 현재 시간을 Unix timestamp로 변환합니다. $timestamp = time(); echo 'Timestamp 현재 날짜 : '; echo $timestamp; echo '<br />'; // 특정 날짜를 Unix timestamp로 변환합니다. $timestamp = strtotime('2017-02-08 14:47:32'); echo 'Timestamp 지정 날짜 : '; echo $timestamp; echo '<br />'; // date를 이용한 날짜 출력합니다. echo 'date() 날짜 : '; echo date('Y-m-d H:i:s', $timestamp); echo '<br />'; // gmdate를 이용한 날짜 출력합니다. echo 'gmdate() 날짜 : '; echo gmdate('Y-m-d H:i:s', $timestamp); echo '<br />';
: 846    : 0
Topic Thumbnail
[Linux] NFS와 SAMBA(SMB)의 차이
NAS(Network Attached Storage)가 보편화되면서 NFS와 SAMBA를 연결하여 자료를 관리하거나 공유하는 사례가 늘어나고 있습니다. 그렇다면 이 두 기술의 정의는 무엇이고 차이는 무엇인지 알아보겠습니다. NFS (리눅스계열)란 무엇인가? - Network File System(네트워크 파일 시스템) - 썬 마이크로시스템(SUN)에서 네트워크를 통해 파일을 공유할 수 있도록 만든 프로토콜 - 하드웨어, 운영체제 또는 네트워크 구조가 달라도 공유가 가능하도록 고안됨 - Network Lock Manager와 Network Status Monitor 프로토콜이 사용됨 - 기능상으로는 삼바(samba)와 비슷하지만 커널에서 NFS를 지원한다는 차이가 있음 - 리눅스머신에서 윈도우 파티션을 마운트하여 사용하듯 NFS서버의 특정 디렉토리를 마운트하여 사용할 수 있음 - 단점으로 클라이언트인양 속여서 서버에 접속하게 되면 디렉토리를 마음대로 조작할 수 있어 취약함 - 본래 스토리지가 고가인 시절 디스크가 없는 시스템을 지원하기 위해 개발되었으나 최근에는 파일 공유 및 파일 서버를 위해 사용됨 SAMBA (윈도우계열)란 무엇인가? - Server Message Block(서버 메시지 블럭) - 윈도우 계열 OS 환경에서 사용되는 파일/프린터 공유 프로토콜 - 리눅스, 유닉스계절 OS와 윈도우 OS와의 자료 및 하드웨어 공유 - 본래 MS-Networks나 LAN관리자 등 NetBEUI 환경에서 사용되었으나 최근에는 네트워크 클라이언트와 함께 널리 사용되고 있음 - SMB를 기초로 응용하여 라우터를 뛰어넘어 연결할 수 있는 프로토콜을 CIFS(Common Internet File System)이라 함 - 윈도우에서 표준 클라이언트 환경으로 처음부터 구성되었고 NFS 유닉스 표준 응용부터 운용상 쉽다는 장점이 있음 그렇다면 과연 어떠한 경우에 사용하는지 예를 들어보겠습니다. 웹서버에서 공통으로 사용하는 config파일을 파일서버(NAS)에 업로드 되어 있고 실제 운영하는 웹서버는 리눅스이고 내 로컬 개발 환경은 윈도우라 가정해보세요. 그렇다면 NAS와 리눅스 웹서버간의 마운트 또 NAS와 윈도우 개발 환경간의 마운트가 필요합니다. 이런 경우 NAS와 리눅스 웹서버간의 마운트를 위해 NFS를 NAS와 윈도우 개발 환경간의 마운트를 위해 SAMBA를 사용하여 연결하고 공유하여 사용할 수 있게 됩니다.  이 두 기술들은 네트워크 보안이 취약해질 수 있기 때문에 보안에 더 주의해주셔야 한다는 것도 잊지마세요.
: 1,292    : 0
Topic Thumbnail
[jQuery] 요소(Element) 존재 여부 확인
요소(Element)에 동적인 처리가 요구되는 경우 해당 요소(Element)가 존재하는지 먼저 확인 할 필요가 있습니다. 웹사이트를 개발하다보면 여러 요소들을 동적으로 생성하고 제거하는 등의 제어를 하는 경우가 많습니다. 이런 프로세스 속에서 Ajax 를 사용하여 데이터를 리턴 받은 후 해당 데이터를 특정 요소에 넣기전에 해당 요소가 존재하지 않는다면 오류를 일으키게 됩니다. 오류를 무시해도 무관하다면 상관없지만 세밀한 프로세스들이 작동하는 웹페이지라면 이런 오류 하나에도 원치 않는 결과를 만들어 낼 수 있습니다. 사소할 수도 있지만 위험 요소를 막기 위한 방어코드로 활용한다면 유용할 것 입니다. Javascript <script> if (document.getElementById('helloA')) {   document.getElementById('helloA').innerHTML = '안녕하세요'; } else {   console.log('[Javascript] helloA is not exist'); } </script> jQuery <script> if ($('#helloB').length) {     $('#helloB').text('안녕하세요'); } else {     console.log('[jQuery] helloB is not exist'); } </script> 전체 테스트 코드 <!DOCTYPE html> <html lang="ko-KR"> <head>     <meta charset="uft-8">     <title>요소(Element) 존재 여부 확인 테스트</title> </head> <body> <div id="helloA"></div> <div id="helloB"></div> <script src="https://code.jquery.com/jquery-1.12.4.js"></script> <script> if (document.getElementById('helloA')) {     document.getElementById('helloA').innerHTML = '안녕하세요'; } else {     console.log('[Javascript] helloA is not exist'); } if ($('#helloB').length) {     $('#helloB').text('안녕하세요'); } else {     console.log('[jQuery] helloB is not exist'); } </script> </body> </html>
: 336    : 0
Topic Thumbnail
반복(for)문에 i, j, k, l, m, n.. 변수명을 사용하는 이유
Javascript for(var i = 0; i < 10; i++) { .. PHP for($i = 0; $i < 10; $i++) { .. Java for(int i = 0; i < 10; i++) { ..   for(var i = 0; i < 10; i++) {     for(var j = 0; j < 10; j++) { .. 이렇듯 우리는 당연하다는 듯이 for문을 사용하면서 시작조건의 변수명에 i, j, k.. 를 사용하고 있습니다. 아마도 처음 프로그래밍을 시작하는 분이라도 a, b, c..가 아닌 i, j, k..로 배우거나 예제를 접하셨을 것입니다. 그렇다면 왜 이렇게 사용하는 것일까요?  1954년 IBM 704에서 과학적인 계산을 하기 위해 시작된 최초의 고급 프로그램 언어 FORTRAN이 발표되고 널리 이용되고 공학용 수치 계산에 많이 사용하게 된 FORTRAN은 많은 인기를 얻게 됩니다. 초기 FORTRAN은 숫자(Inteager) 변수로 쓸 수 있는 알파벳이 i, j, k, l, m, n 이었기 때문에 반복 횟수를 체크하기 위해 이 알파벳만을 사용할 수 밖에 없었다고 합니다. 이후 많은 프로그램 언어들이 발표되고 성장되어 왔지만 FORTRAN으로부터 생긴 관행은 오늘날까지도 코딩 관행, 관습처럼 이어지고 있습니다. 현재는 반복문의 시작조건의 변수명은 해당 언어의 변수명 규칙에 맞는 어떠한 변수명도 가능하지만 가독성이나 변수명 사용의 혼돈을 막기 위해 i, j, k, l, m, n 을 사용하니 협업을 통한 팀 프로젝트시 유념하여 개발하시길 바랍니다.
: 2,191    : 0
Topic Thumbnail
[PHP] 날짜 일수 차이 계산 date_diff()
date_diff() 함수를 이용하여 특정 날짜들 간의 일수 차이를 계산하는 방법을 알아보겠습니다. php에서는 (PHP 5 >= 5.3.0, PHP 7) 환경에서 사용할 수 있다고 되어 있습니다. 참고해주세요. 더 많은 내용 보기 : http://php.net/manual/kr/datetime.diff.php 절차식 형식 <?php date_default_timezone_set('Asia/Seoul'); $startDate = date_create(date('Y-m-d')); // 오늘 날짜입니다. $targetDate = date_create('2017-01-01'); // 타겟 날짜를 지정합니다. $interval = date_diff($startDate, $targetDate); echo '2017년 새해로부터 ' . $interval->days . '일이 지났습니다.'; 객체 기반 형식 <?php date_default_timezone_set('Asia/Seoul'); $startDate = new DateTime(date('Y-m-d')); // 오늘 날짜입니다. $targetDate = new DateTime('2017-01-01'); // 타겟 날짜를 지정합니다. $interval = $startDate->diff($targetDate); echo '2017년 새해로부터 ' . $interval->days . '일이 지났습니다.'; 출력값 2017년 새해로부터 OO일이 지났습니다. *응용 : 메소드 만들기 <?php date_default_timezone_set('Asia/Seoul'); function dateDiff($start, $target) {   $interval = date_diff($start, $target);   return $interval->days; } $startDate = date_create(date('Y-m-d')); // 오늘 날짜입니다. $targetDate = date_create('2017-01-01'); // 타겟 날짜를 지정합니다. echo '2017년 새해로부터 ' . dateDiff($startDate, $targetDate) . '일이 지났습니다.';
: 318    : 0
Topic Thumbnail
[Database] MySQL이란?
Web Application 개발시 회원가입, 로그인 및 데이터 저장 등을 위해서 데이터베이스라(이하 DB)는 소프트웨어가 필요합니다. DB의 종류는 유/무료 형태로 현재도 무수히 많이 배포되고 있습니다. 그 중 MySQL는 가장 널리 사용되어지고 있는 DB 중 하나이며 Release 업데이트가 되면서 기능면으로도 많이 향상되었습니다.  MySQL은 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)입니다. 다중 스레드, 다중 사용자 형식의 구조질의어 형식의 데이터베이스 관리 시스템으로서 MySQL AB가 관리 및 지원하였으나 썬 마이크로시스템즈에 인수되었다가 썬 마이크로시스템즈가 오라클로 인수되면서 소유권이 넘어가게 되었습니다. 이후 Enterprise와 Standard 버전의 유료 버전을 판매하고 있지만 여전히 Community 버전의 무료 버전을 다운로드 받아 사용할 수 있도록 지원하고 있습니다. 공식사이트 : https://www.mysql.com/ 다운로드 : https://dev.mysql.com/downloads/ 공식 툴(Tool)로는 MySQL 워크벤치(https://www.mysql.com/products/workbench/)가 있지만 공식 툴외에도 다양한 유/무료 소프트웨어가 있습니다. 그 중 무료 소프트웨어만 알아보겠습니다. MySQL Workbench (https://www.mysql.com/products/workbench/) 제일 큰 장점은 EER 을 그릴 수 있기때문에 설계할때 유용합니다. Windows, Linux, OS X를 모두 지원합니다. HideSQL (http://www.heidisql.com/download.php) 윈도우용 MySQL 클라이언트이며 깔끔 UI형태이지만 불안정한 부분이 조금 있습니다. Sequel Pro (https://www.sequelpro.com/) 맥 OS X용 MySQL 클라이언트이며 전체적으로 심플하고 가볍기 때문에 많은 맥 이용자들이 사용하고 있습니다.
: 654    : 0
Topic Thumbnail
[PHP] SMTP 이메일 전송 예제
이메일 알림 서비스는 웹사이트 서비스에서 사용자에게 이용약관 개정 및 웹사이트 사용 중 필요한 공지등을 알리는데 매우 유용한 서비스 입니다. 그렇기 때문에 현재로서는 필수적으로 사용해야 하는 서비스 중에 하나 입니다. SMTP 이메일 전송을 리눅스서버에서 처리하기 위해서는 sendmail 를 필수로 설치되어 있어야 합니다. 아래는 PHP로 구현된 이메일 전송 예제입니다. - PHP -   <?php $subject = "이것은 메일 제목입니다."; $fromName = "보내는이 이름 "; $fromMail = "보내는이 메일 주소"; $strDate = date('Y/m/d/D'); $contents = '<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1"> <title>여기는 타이틀 입니다.</title> </head> <body style="margin:10px;padding:0;"> <!-- EMS LETTER --> <div style="width:100%;max-width:798px"> <table cellpadding="0" cellspacing="0" border="0" width="798"> <!-- contents --> <tr valign="top"> <td align="left" width="698"> <table cellpadding="0" cellspacing="0" border="0" width="698"> <tr valign="top"> <td style="font-family:font-family:\'맑은 고딕\',Malgun Gothic,\'돋움\',Dotum,sans-serif;font-size:18px;font-weight:bold;color:#434343">안녕하세요.</td> </tr> </table> </td> </tr> <!-- //contents --> </table> <!-- //EMS LETTER --> </body> </html>'; $toName = "받는이 이름"; $mailTo = "받는이 이메일 주소"; $mailResult = sendMail($fromName, $fromMail, $toName, $mailTo, $subject, $contents, 0); echo $mailResult; function sendMail($fromName, $fromEmail, $toName, $toEmail, $subject, $contents, $isDebug=0){ //Configuration $smtp_host = "localhost"; //$smtp_host = "smtp.google.com"; $port = 25; $type = "text/html"; $charSet = "UTF-8"; //Open Socket $fp = @fsockopen($smtp_host, $port, $errno, $errstr, 1); if($fp){ //Connection and Greetting $returnMessage = fgets($fp, 128); if($isDebug) print "CONNECTING MSG:".$returnMessage."\n"; fputs($fp, "HELO YA\r\n"); $returnMessage = fgets($fp, 128); if($isDebug) print "GREETING MSG:".$returnMessage."\n"; // 이부분에 다음과 같이 로긴과정만 들어가면됩니다. /* fputs($fp, "auth login\r\n"); fgets($fp,128); fputs($fp, base64_encode("hoodist0@gmail.com")."\r\n"); fgets($fp,128); fputs($fp, base64_encode("jeongsu99")."\r\n"); fgets($fp,128); */ fputs($fp, "MAIL FROM: <".$fromEmail.">\r\n"); $returnvalue[0] = fgets($fp, 128); fputs($fp, "rcpt to: <".$toEmail.">\r\n"); $returnvalue[1] = fgets($fp, 128); if($isDebug){ print "returnvalue:"; print_r($returnvalue); } //Data fputs($fp, "data\r\n"); $returnMessage = fgets($fp, 128); if($isDebug) print "data:".$returnMessage; fputs($fp, "Return-Path: ".$fromEmail."\r\n"); $fromName = "=?UTF-8?B?".base64_encode($fromName)."?="; $toName = "=?UTF-8?B?".base64_encode($toName)."?="; fputs($fp, "From: ".$fromName." <".$fromEmail.">\r\n"); fputs($fp, "To: ".$toName." <".$toEmail.">\r\n"); $subject = "=?".$charSet."?B?".base64_encode($subject)."?="; fputs($fp, "Subject: ".$subject."\r\n"); fputs($fp, "Content-Type: ".$type."; charset=\"".$charSet."\"\r\n"); fputs($fp, "Content-Transfer-Encoding: base64\r\n"); fputs($fp, "\r\n"); $contents= chunk_split(base64_encode($contents)); fputs($fp, $contents); fputs($fp, "\r\n"); fputs($fp, "\r\n.\r\n"); $returnvalue[2] = fgets($fp, 128); //Close Connection fputs($fp, "quit\r\n"); fclose($fp); //Message if (preg_match("/^250/", $returnvalue[0])&&preg_match("/^250/", $returnvalue[1])){ $sendmail_flag = true; }else { $sendmail_flag = false; print "NO :".$errno.", STR : ".$errstr; } } if (! $sendmail_flag){ echo "메일 보내기 실패"; } return $sendmail_flag; } ?> 제가 테스트 용도로 사용한 코드이니 상황에 맞게 수정하여 사용하시면 됩니다.
: 436    : 0
Topic Thumbnail
키보드 특수 문자 및 기호 명칭
무의식적으로 당연한 듯이 사용하는 키보드의 특수 문자가 때로는 말로 표현해야 하는 경우가 있는데 어떻게 표현해야 하는지 몰라 난감한 경우가 발생할 수 있습니다. 특히 회의시간이라면 당황스럽겠죠? 이메일을 작성할때도 그때마다 구글에 물어봐야 할 수도 있습니다. (특수 문자(기호)는 영어로 Special Character 라고 표현하시면 됩니다.) 그래서 그러한 난감함(?)과 수고를 덜기 위해 정리해봤습니다. 조금만 시간내서 외워둔다면 유용하게 쓰일 수 있을 것 같네요. ​​​​​​​ ` English : Grave(그래이브), 한글 : 악센트 accent, backquote, left/open quote, backprime, unapostrophe backspark, birk, blugle, backtick, push, backglitch, backping, execute, boulder, rock, blip ~ English : Tilde(틸더), Wiggle(위글), 한글 : 물결, 지렁이 twiddle, tilda, tildee, wave, squiggle, swung dash, approx, wiggle, enyay, home, worm, not ! English : Exclamation(익스클러메이션), 한글 : 느낌표 (ex)clam, excl, wow, hey, boing, bang, shout, yell, shriek, pling, factorial, ball-bat, smash, cuss, store, potion, not, dammit @ English : At Sign(앳 사인), 한글 : 골뱅이 each, vortex, whirl, whirlpool, cyclone, snail, ape(tail), cat, snable-a, trunk-a, rose, cabbage, Mercantile symbol, strudel, fetch, shopkeeper, human, commercial-at, monkey(tail) # English : Crosshatch(크러스햇지), 한글 : 우물, 샵 pound, pound sign, number, number sign, sharp, octothorpe, hash, (garden) fence, crunch, mesh, hex, flash, grid, pig-pen, tictactoe, scratch (mark), (garden) gate, hak, oof, rake, sink, corridor, unequal, punch mark $ English : Dollar Sign(달러 사인), 한글 : 달러 표시 cash, currency symbol, buck, string, escape, ding, big-money, gold, Sonne % English : Percent(퍼센트), 한글 : 백분율, 퍼센트 mod, shift-5, double-oh-seven, grapes, food ^ English : Circumflex(서컴플렉스), 한글 : 삿갓, 웃음표 caret, carrot, (top)hat, cap, uphat, party hat, housetop, up arrow, control, boink, chevron, hiccup, power, to-the(-power), fang, sharkfin, and, xor, wok, trap, pointer, pipe, upper-than & English : Amperand(앰퍼샌드), 한글 : 앤드, 꽈배기 and, amper, address, shift-7, andpersand, snowman, bitand, donald duck, daemon, background, pretzel * English : Asterisk(애스터리스크), 한글 : 곱하기, 별 표시 star, splat, spider, aster, times, wildcard, gear, dingle, (Nathan) Hale, bug, gem, twinkle, funny button, pine cone, glob ( English : Left Parenthesis(레프트 퍼렌써시스), 한글 : 왼쪽 (소)괄호 (open) paren, so, wane, parenthesee, open, sad, tool ) English : Right Parenthesis(라이트 퍼렌써시스), 한글 : 오른쪽 (소)괄호 already, wax, unparenthesee, close (paren), happy, thesis, weapon () English : Round Brackets(라운드 브레킷), 한글 : 둥근 괄호 parentheses, curved brackets - English : Hyphen(하이픈), 한글 : 가운데 작대기, 빼기 minus (sign), dash, dak, option, flag, negative (sign), worm, bithorpe _ English : Underscore(언더스코어), 한글 : 밑줄 underline, underbar, under, score, backarrow, flatworm, blank, chain, gets, dash, sneak = English : Equal Sign(이퀄 싸인), 한글 : 등호, 같음, 는 표시 gets, becomes, quadrathorpe, half-mesh, ring + English : Plus Sign(플러스 싸인), 한글 : 더하기 add, cross, and, intersection, door, spellbook \ (₩) English : Backslash(백슬래쉬), 한글 : 원 표시, 돈 표시 => ₩ 는 한국자판에만 표시됨 reversed virgule, bash, (back)slant, backwhack, backslat, escape, backslak, bak, scan, expand, opulent throne, slosh, slope, blash | English : Vertical Bar(버티컬 바), 한글 : 수직 작대기 pipe, pipe to, vertical line, broken line, bar, or, bitor, vert, v-bar, spike, to, gazinta, thru, pipesinta, tube mark, whack, gutter, wall [ English : Left Bracket(래프트 브레킷), 한글 : 왼쪽 대괄호 bracket, bra, (left) square (brack[et]), opensquare, armor ] English : Right Bracket(라이트 브레킷), 한글 : 오른쪽 대괄호 unbracket, ket, rightsquare(brack[et]), unsquare, close, mimic [] English : Square Brackets(스퀘어 브레킷), 한글 : 대괄호  { English : Left Brace(레프트 브레이스), 한글 : 왼쪽 중괄호 brace, curly, leftit, embrace, openbrace, begin, fountain }  English : Right Brace(라이트 브레이스), 한글 : 오른쪽 중괄호 unbrace, uncurly, rytit, bracelet ,close, end, apoolcurly braces, squiggly braces, curly brackets, squiggle brackets, Tuborgs, ponds, curly chevrons, squirrly braces hitchcocks, chippendale brackets {} English : Curly Brackets(컬리 브레킷), 한글 : 중괄호 braces ; English : Semicolon(세미콜론), 한글 : 머무름표, 쌍반점 다른 표현 : semi, hybrid, giant eel, go-on : English : Colon(콜론), 한글 : 그침표, 쌍점 two-spot, double dot, dots, chameleon “ English : Quotation Mark(쿼테이션 마크), 한글 : 쌍따옴표 (double) quote, dirk, literal mark, rabbit ears, double ping, double glitch, amulet, web, inverted commas ‘ English : Apostrophe(어퍼스트로피), 한글 : 작은따옴표, 홑따옴표 (single) quote, tick, prime, irk, pop, spark, glitch, lurker above , English : Comma(커머), 한글 : 쉼표 tail, trapper . English : Period(피어리어드), 한글 : 점, 마침표, 소숫점 dot, decimal(point), (radix)point, spot, fullstop, put, floor < English : Less Than(레스 댄), 한글 : 왼쪽 부등호 less, read from, from, in, comesfrom, crunch, sucks, left chevron, open pointy (brack[et]), bra, upstairs, wes (left|open) widget > English : Greater Than(그레이럴 댄), 한글 : 오른쪽 부등호 more, write to, into/toward, out, gazinta, zap, blows, right chevron, closing pointy (brack[et]), ke downstairs, east, (right|close) widget <> English : Angle Brackets(앵글 브레킷), 한글 : 꺽쇠 괄호 / English : Slash(슬래쉬), 한글 : 사선, 빗금, 나누기 stroke, virgule, solidus, slant, diagonal, over, slat, slak, across, compress, reduce, replicate, spare, divided-by, wand forward slash, shilling ? English : Question Mark(퀘스천 마크), 한글 : 물음표 query, whatmark, what, wildchar, huh, ques, kwes, quiz, quark, hook, scroll, interrogation point 공백 English : Space(스페이스), 한글 : 공백, 여백, 빈칸 blank, ghost 참고사이트 : http://gomcine.tistory.com/130 : 키보드 특수 문자 이름 정리 http://mainia.tistory.com/1523 : 키보드 특수문자 영문이름과 한글이름 및 별칭  
: 474    : 0
Topic Thumbnail
[Linux] 우분투(Ubuntu) apt-get 명령어 정리
apt-get(Advanced Packaging Tool)은 우분투(Ubuntu)를 포함한 데비안(Debian)계열의 리눅스에서 사용하는 패키지 관리 명령어 도구 입니다. 우분투는 GUI 형태로 되어 있는 시냅틱 꾸러미 관리자가도 있기는 하지만 Command 방식의 리눅스를 운영 중이라면 apt-get 을 이용하여 패키지를 관리할 수 있습니다. apt-get은 인덱스를 가지고 있으며 그 인덱스는 /etc/apt/sources.list에 저장되어 사용할 패키지의 정소를 얻을 수 있습니다. 설치된 패키지 확인 # dpkg -l 또는 # dpkg -l | grep "패키지명" 1) 패키지 인덱스 정보 업데이트 # sudo apt-get update 2) 설치된 패키지 업그레이드 # sudo apt-get upgrade 3) 의존성 검사를 수행하면서 업그레이드 # sudo apt-get dist-upgrade 4) 패키지 설치 # sudo apt-get install 패키지명 5) 패키지 재설치 # sudo apt-get --reinstall install 패키지명 6) 패키지 삭제 (설정파일 제외) # sudo apt-get remove 패키지명 7) 패키지 삭제 (설정파일 포함) # sudo apt-get --purge remove 패키지명 8) 패키지 소스코드 다운로드 # sudo apt-get source 패키지명 9) 패키지 소스코드 의존성 빌드 # sudo apt-get build-dep 패키지명 10) 패키지 검색 # sudo apt-cache search 패키지명 11) 패키지 정보 보기 # sudo apt-cache show 패키지명 apt-get을 이용하여 설치된 deb패키지는 /var/cache/apt/archive/ 에 설치됩니다.  
: 395    : 0
Topic Thumbnail
[PHP] Include와 Require의 차이
include와 require는 얼핏보면 똑같은 처리 결과를 내놓기 때문에 자칫 같은 기능을 하고 있다고 오해를 할 수 있습니다. 하지만 이 두 함수는 절대로 똑같은 함수가 아니라는 것은 오류가 났을 경우 비로소 알 수 있습니다. 그럼 아래 예제를 통해 어떤 차이점이 있는지 살펴보겠습니다. hello.php <?php echo '안녕하세요. '; welcome.php <?php echo '버킷(vucket)에 오신 걸 환영합니다.'; test.php <?php include 'hello.php'; require 'welcome.php'; echo '<br />'; echo 'http://vucket.com'; - 실행결과 - 안녕하세요. 버킷(vucket)에 오신 걸 환영합니다. http://vucket.com 만약 hello.php가 아닌 hi.php를 include 함수로 호출한다면 어떻게 될까요? (hi.php는 실제로 생성되지 않은 php 파일입니다.) test.php <?php include 'hi.php'; require 'welcome.php'; echo '<br />'; echo 'http://vucket.com'; - 실행결과 - Warning: include(hi.php): failed to open stream: No such file or directory in D:\mytest\public\test.php on line 2 Warning: include(): Failed opening 'hi.php' for inclusion (include_path='.;C:\php\pear') in D:\mytest\public\test.php on line 2 버킷(vucket)에 오신 걸 환영합니다. http://vucket.com include 함수에 대한 warning 메세지가 뜨지만 이후 코드는 계속 실행되어 출력되었습니다. 이번에는 welcome.php 를 hi.php로 호출해보겠습니다. test.php <?php include 'hello.php'; require 'hi.php'; echo '<br />'; echo 'http://vucket.com'; - 실행결과 - 안녕하세요. Warning: require(hi.php): failed to open stream: No such file or directory in D:\mytest\public\test.php on line 3 Fatal error: require(): Failed opening required 'hi.php' (include_path='.;C:\php\pear') in D:\mytest\public\test.php on line 3 require 함수는 warning과 함께 fatal error(치명적인 오류)를 호출하고 이후 코드는 더이상 실행되지 않았습니다. 눈치채셨나요? 맞습니다. include 함수는 호출 실패가 나더라도 이후 코드를 계속 실행하지만 require 함수는 호출 실패가 나면 더 이상  코드 실행을 하지않고 중단합니다. 요구조건에 실패하면 이후 처리조차 할 필요없고 문제 발생을 피드백 할 경우에는 require 함수를 그렇지 않고 파일이 포함되지 않더라도 웹페이지를 노출해야 하는 경우에는 include 함수를 사용하여 코드 진행이 계속되도록 하면 됩니다. * include_once, require_once 는 위에 설명된 기능과 동일한 상태에서 파일을 중복으로 호출하지 않겠다는 기능이 추가되어 있습니다. 속도 측면에서는 include, require 함수가 _once 함수보다 빠르다고는 하지만 중복 호출에 대한 체크도 무시할 수는 없으니 이점 유의해서 사용하시길 바랍니다.  
: 274    : 0
Topic Thumbnail
[PHP] rand() vs mt_rand()
php에서 난수 생성을 위한 함수에는 rand()와 mt_rand()가 있습니다. 두 함수 모두 정수값을 랜덤하게 생성하는 함수입니다. 이 두 함수는 윈도우 환경에서만 실행하는 경우에 최대값의 기준이 아래와 같이 달라집니다. (반면, 리눅스 환경에서는 두 함수 모두 0 ~ 2,147,483,647 의 동일한 범위로 생성합니다.) - rand() : 0 ~ 32,767 의 범위내에서 난수를 생성합니다. - mt_rand() : 0 ~ 2,147,483,647 의 범위내에서 난수를 생성합니다. 그렇다면 어떻게 사용하는지 알아보겠습니다. - 예제 - <?php echo rand() . '<br />'; echo mt_rand() . '<br />'; echo rand(0, 999) . '<br />'; echo mt_rand(0, 999) . '<br />'; 출력결과는 각각의 범위내에서 난수가 출력됩니다. 그런데 한가지 php.net에서는 mt_rand() 함수가 rand() 함수보다 4배 빠른 난수를 생성한다고 설명하고 있습니다. 그렇다면 리눅스 환경이거나 난수 생성 조건 범위가 크지 않을 경우에는 mt_rand() 함수를 사용하는 것이 퍼포먼스에 도움이 되겠네요.  
: 327    : 0
Topic Thumbnail
앱 테스트센터 (서울)
1. 서울앱비즈니스센터 사이트 : http://appbiz.seoul.kr/시설공간/ 위치 : 서울특별시 마포구 상암동 1648번 S-PlexCenter 스마티움(S2동) 16층 이용시간 : 평일 (09:00~23:00), 주말(09:00~18:00), 공휴일(휴무) 비용 : 무료 예약 : http://appbiz.seoul.kr/테스트베드-예약/ (출처 : 서울앱비즈니스센터) (출처 : 서울앱비즈니스센터) 2. 앱센터 사이트 : http://appcenter.kr/archives/category/mobiletest 위치 : 서울특별시 강남구 남부순환로 3104 SBA컨벤션센터 3층 이용시간 : 월~금(주중) 1타임(10:00~12:00) / 2타임(14:00~16:00) / 3타임(16:00~18:00) 비용 : 무료 (단, 1일 10대 한정/상황에 따라 현장에서 추가 신청 가능) 예약 : http://appcenter.kr/archives/736 (출처 : 앱센터) 3. K-Startup 스마트세계로누림터 사이트 : https://www.k-startup.go.kr/homepage/businessManage/businessManageFunction.do?mid=1598&sid=130&itemSeq=1124 위치 : 서울특별시 금천구 벚꽃로 234 에이스하이앤드타워6차 2002호 문의 : 02-6299-5503, 5504 (출처 : K-Startup 스마트세계로누림터)
: 855    : 0
Topic Thumbnail
[jQuery] 툴팁 사용법
jQuery에서 제공하고 있는 Tooltip(툴팁) 기능에 대해 알아보겠습니다. Tooltip이란 도움말과 같은 박스 형태의 내용이 특정 위치에 노출되는 것을 말합니다. - head에 삽입되는 코드 <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> jQuery에서 기본적으로 제공하는 css UI 입니다. Customize가 필요하신 분은 추가적으로 style을 만들어주시면 됩니다. - body에 삽입되는 내용 <div> 안녕하세요. 후드입니다. <br/> jQuery <a href="javascript:void(0);" title="이렇게 툴팁이 생성됩니다" style="background-color: #333333; color: #FFB600"><strong>툴팁</strong></a> 테스트를 위한 예제입니다. </div> "툴팁" 텍스트에 마우스를 올리면 title 속성의 값을 툴팁으로 노출시켜줍니다. - body 하단에 삽입되는 Javascript <script src="https://code.jquery.com/jquery-1.12.4.js"></script> <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> <script type="text/javascript"> $(function() { $(document).tooltip(); }); </script> jQuery 툴팁 기능은 jquery-ui.js도 함께 로드되어야 사용할 수 있습니다. - 전체코드 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>버킷(vucket.com) | jQuery 툴팁 테스트</title> <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> </head> <body> <div> 안녕하세요. 후드입니다. <br/> jQuery <a title="이렇게 툴팁이 생성됩니다" style="background-color: #333333; color: #FFB600"><strong>툴팁</strong></a> 테스트를 위한 예제입니다. </div> <script src="https://code.jquery.com/jquery-1.12.4.js"></script> <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> <script type="text/javascript"> $(function() { $(document).tooltip(); }); </script> </body> </html> 참고 : https://jqueryui.com/tooltip/
: 351    : 0
Topic Thumbnail
[Javascript] 스크립트 로드 위치에 따른 차이점
Javascript는 <head></head>사이 또는 <body></body>사이에 위치하여 작동할 수 있습니다. - head에 삽입되는 경우 <head> <script type="text/javascript" src="링크주소"></script> <script type="text/javascript"> // 코드내용 <script> </head> 브라우저 렌더링에 방해되는 무거운 스크립트가 실행되는 경우 완성되지 못한 웹페이지를 한동안 볼 수 있기 때문에 문서를 초기화 또는 설정하는 가벼운 스크립트만 사용하기를 권장합니다. 또한, 문서의 DOM(Document Object Model)구조가 필요한 스크립트의 경우(html구문을 추가하는 스크립트 등)에는 document.onload의 로드 이벤트가 추가되어야 에러없이 작동 할 수 있습니다.  - body에 삽입되는 경우 <body> <!-- 페이지 내용 --> <script type="text/javascript" src="링크주소"></script> <script type="text/javascript"> // 코드내용 </script> </body> 브라우저 렌더링이 완료된 상태에서 스크립트가 실행되기 때문에 웹페이지 노출에는 영향을 끼치지 않기 때문에 대부분은 스크립트 위치로 선호하는 위치이며, 문서의 DOM구조가 완료된 상태이므로 따로 document.onload와 같은 이벤트 없이 DOM구조가 필요한 스크립트를 사용할 수 있습니다. 결국 Javascript 삽입 위치에 따라 스크립트 실행순서와 브라우저 렌더링에 영향을 미칠 수 있습니다. 만약 Javascript 로드 시간때문에 웹페이지가 제대로 노출되지 않는다면 정상적인 서비스를 제공하기 어려울 것 입니다. 그렇기 때문에 스크립트의 성격에 맞는 위치에 삽입하여 브라우저 렌더링에 영향이 없도록 사용하시면 됩니다.
: 262    : 0
Topic Thumbnail
[PHP] FreeTDS 라이브러리 (Ubuntu)
FreeTDS(Tabular Data Stream) 리눅스나 유닉스 OS에서 Microsoft SQL Server 및 Sybase 데이터베이스와 네이티브 연결을 도와주는 라이브러리입니다. 다운로드 : http://www.freetds.org/software.html PHP에는 FreeTDS와 함께 작동하는 Sybase API가 있습니다. 참고 : http://php.net/manual/en/function.sybase-connect.php 리눅스 환경에서 FreeTDS를 사용하기 위해 아래의 조건이 필요하다고 합니다. - FreeTDS - UnixOBDC - An Iguana instance running on a Linux Server - An MSSQL Server 자세한 설치 정보 : http://help.interfaceware.com/kb/904 아래는 제가 사용했던 설치 정보입니다. 참고만 하세요. [Ubuntu] # apt-get install -y unixodbc unixodbc-dev unixodbc-bin libodbc1 odbcinst1debian2 tdsodbc php5-odbc # apt-get install -y freetds-bin freetds-common freetds-dev libct4 libsybdb5 [Configuration] # vi /etc/odbcinst.ini [ODBC] Trace = No TraceFile = /tmp/odbc.log [FreeTDS] Description = FreeTDS Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so UsageCount = 1   # vi /etc/odbc.ini [dbserverdsn] Driver = FreeTDS Server = <server_name>.database.windows.net Port = 1433 Database = <database_name> Driver=/usr/local/lib/libtdsodbc.so UsageCount = 1 [Default] Driver=/usr/local/lib/libtdsodbc.so   # vi /etc/freetds/freetds.conf # $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $ # # This file is installed by FreeTDS if no file by the same  # name is found in the installation directory.   # # For information about the layout of this file and its settings,  # see the freetds.conf manpage "man freetds.conf".   # Global settings are overridden by those in a database # server specific section [global]   # TDS protocol version   tds version = 7.2   port = 1433   # Whether to write a TDSDUMP file for diagnostic purposes   # (setting this to /tmp is insecure on a multi-user system) ; dump file = /tmp/freetds.log ; debug flags = 0xffff   # Command and connection timeouts ; timeout = 10 ; connect timeout = 10   # If you get out-of-memory errors, it may mean that your client   # is trying to allocate a huge buffer for a TEXT field.     # Try setting 'text size' to a more reasonable limit  ; text size = 64512 # A typical Microsoft server [dbserverdsn]   database = <database_name>   host = <server_name>.database.windows.net   port = 1433   tds version = 7.2   client charset = UTF-8 참고페이지 : https://gist.github.com/ghalusa/97bf0b45a27d6b025d670752a7c62ec6 이렇듯 리눅스 환경에서는 MSSQL 서버 연결시 조금은 까다로운 부분이 있습니다. 하지만, FreeTDS가 있으니 당황하지 마시고 연동해보시길 바랍니다. 참고로 제 생각에는 리눅스 + PHP 개발시 데이터베이스는 MySQL 또는 MariaDB를 사용하는 것이 정신 건강에 좋은 듯 합니다.
: 474    : 0
Topic Thumbnail
[PHP] 개발툴 : Aptana Studio
* Aptana Studio 초기 Eclipse 플러그인으로 출발하여 완전한 IDE 형태로까지 개발된 Aptana Studio는 그 시작이 Eclipse 였던 만큼 전체적인 UI 와 기능이 비슷합니다. 물론 이미 Eclipse 를 설치하여 사용하는 중이라면 Plug-in 형태로 설치하여 사용할 수도 있습니다. Java Runtime Environment 를 바탕으로 구동되기 때문에 툴 설치전에 반드시 jre가 설치되어야  합니다. 버전이 업그레이드되면서 많은 기능이 탑재되었지만 아직까지도 무료로 배포되고 있다는 점에서 많은 분들이 이용하고 있습니다. 다운로드 : http://www.aptana.com (이미지출처 : aptana.com) - HTML, CSS 및 JavaScript 코드 지원   > HTML, CSS, JavaScript, PHP 및 Ruby 제작에 도움이됩니다. 최신 HTML5 사양을 지원합니다. 주요 웹 브라우저의 각 요소에 대한 지원 수준에 대한 정보가 포함됩니다. (이미지출처 : aptana.com) - 배포 마법사;Deployment Wizard   > 동기화 유지 설정을 지원합니다. FTP, SFTP, FTPS 및 Capistrano를 포함한 여러 프로토콜. Heroku 및 Engine Yard와 같은 호스팅 서비스에 Ruby & Rails 애플리케이션을 자동으로 게시 할 수있는 기능. (이미지출처 : aptana.com) - 통합 디버거;Integrated Debugger   > 중단 점 설정, 변수 검사, 실행 제어 통합 된 Ruby & Rails 및 JavaScript 디버거는 이러한 버그를 제거하는 데 도움을줍니다. (이미지출처 : aptana.com) - Git 통합;Git Integration   > 프로젝트를 git 소스 코드 컨트롤에 쉽게 넣을 수 있습니다. 팀 구성원과 협업하고 Github에서 호스팅되는 것과 같은 원격 저장소로 작업을 통합 및 푸시합니다. git 기반 배포를 용이하게합니다. (이미지출처 : aptana.com) - 빌트인 터미널;Built-in Terminal   > gem, rake 등과 같은 운영 체제 명령 및 언어 유틸리티 실행을 위해 명령 줄 터미널에 빠르게 액세스하십시오. (이미지출처 : aptana.com) - IDE 사용자정의;IDE Customization   > 사용자 지정 명령의 스크립팅을 통해 핵심 기능을 확장하여 원하는 방식으로 개발 환경을 정확하게 설정하십시오. Studio에는 수백 개의 명령이 포함되어 있지만 편집중인 파일 형식에 따라 항상 컨텍스트로 표시됩니다.