[Node.js] Google Spread Sheet 연동하기[Node.js] Google Spread Sheet 연동하기

Posted at 2019.06.10 17:05 | Posted in Node.js/Google Spread Sheet




참고 : https://www.npmjs.com/package/googl-spreadsheet

API : https://github.com/theoephraim/node-google-spreadsheet





■ Node.js에서 google-spreadsheet 모듈 설치하기





제일 먼저 노드에서 구글 스프레드 시트를 제어할 수 있게 해주는


google-spreadsheet 모듈을 설치한다.


 $ npm install google-spreadsheet

 








■ Google Spread Sheet API 생성하기



01. 먼저 https://console.developers.google.com/에 접속 하여 상단 메뉴의 프로젝트 명을 클릭한다.

※ 필자는 기존에 생성해둔 프로젝트가 있기때문에 위와 같은 화면부터 시작되었다.





02. 팝업창이 뜨맨 새 프로젝트 버튼을 클릭하여 새로운 프로젝트를 생성한다.






03. 프로젝트의 이름을 생성해 준다.

 ① 먼저 프로젝트의 이름은 자동으로 생성된다, 그렇지만 직접 입력하여 수정이 가능하다.

 ② 만들기 버튼을 클릭하여 프로젝트를 생성한다.





04. 정상적으로 프로젝트가 생성되었다면 아래와 같은 프로젝트 선택 팝업창을 확인 할 수 있다.





05. 좌측의 라이브 러리를 클릭하여 구글 시트 라이브 러리를 생성해 보자.





06. 검색창에 Google Sheets API를 입력하면 구글 시트 라이브 러리를 찾아온다.

    구글 시트의 API를 선택한다.






07. 사용 설정을 누르면 구글 시트 API의 사용이 가능해 진다.





08. 이제 좌측 메뉴에서 사용자 인증 정보 를 클릭한다.





09. 해당 작업을 진행하기 위한 인증 KEY는 서비스 계정 키 이다.

 ① 사용자 인증 정보 만들기를 클릭한다.

 ② API 키, OAuth 클라이언트 ID, 서비스 계정 키의 3가지 항목 중에서 서비스 계정 키를 선택한다.





10. 이제 서비스 계정 키를 생성해야 한다.

 ① 서비스 계정의 이름과 아이디를 생성한다.

     서비스 계정 ID는 구글 시트와 노드.js와의 연동에 필요할 수 있으니 카피해 두자.

 ② 키 유형은 JSON 파일을 선택한다.

 ③ 생성버튼을 클릭한다.





11. 서비스 계정의 JSON 파일이 자동으로 생성된다.

     다운을 받아두도록 하자.





12. 그럼 아래와 같이 사용자 계정 키가 정상적으로 생성 되었다.
















■ 구글 스프레드 시트 문 생성하고 읽기, 쓰기 권한 부여하





01. 자신의 구글 드라이브(https://drive.google.com/drive/my-drive) 페이지에 접속하여 새로운 스프레드 시트문서를 생성해 보자.





02. 문서가 생성되면 우측의 공유 버튼을 클릭한다.







03. 해당 구글 스프레드 시트를 외부에서 사용하기 위한 권한을 설정해야 한다.

① 링크 공유를 통해 모든 사용자 혹은 링크를 알고있는 사용자의 접속을 허용한다.

② 다른 방법으로는 위에서 생성한 서비스 키의 메일 주소에 읽기 및 쓰기 권한을 주는 것이다.

 








04. 설정이 완료되면 해당 스프레드 시트의 URL에서 ID에 해당하는 내용을 복사해 둔다.





그럼 이제 Node.js와 Google Sheets의 연동에 필요한 사전 준비는 마무리 되었다.


이제 정상적으로 작동하는지를 한번 확인해 보자.









■ Node.js와 Google Spreadsheet 연동하기




모든 밑작업이 완료 되었다면 이제 노드.js와 스프레드 시트를 연동해 보자.


위 작업들에서 따로 보관해 두어야 한다고 했던 서비스 계정 키.json 파일과


작업을 진행할 구글 스프레드 시트의 아이 값이 사용된다.



# 소스 코

 google_sheets.js

const googleSpreadsheet = require("google-spreadsheet");


// Google APIs 페이지에서 생성한 서비스 계정 키의 JSON 파일을 배치한다.

const creds = require("./서비스 계정 키.json");


// 작업을 수행할 Google Spreadsheet 문서의 ID값

const doc = new googleSpreadsheet("구글 스프레드 시트 ID");


doc.useServiceAccountAuth(creds, function(err) {

doc.getInfo(function(err, info) {

                // 해당 시트의 정보가 info에 담겨있다.

// console.log(info);

console.log("구글 시트의 제목  : " + info.title);

console.log("구글 시트의 URL  : " + info.id);

                console.log("마지막으로 업데이트된 날짜 및 시간  : " + info.updated);

console.log("스프레드시트의 생성자 아이디  : " + info.author.name);

console.log("스프레드시트의 생성자 메일주소  : " + info.author.email);

});

});




# 출력 결과




이로서 노드.js와 구글 스프레드 시트의 연동이 성공적으로 되는 모습을 확인 할 수 있다.










Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[Ubuntu] SAMBA 파일 서버설치하고 Windows에서 접근[Ubuntu] SAMBA 파일 서버설치하고 Windows에서 접근

Posted at 2018.12.23 22:45 | Posted in Linux/Ubuntu




참고 : http://www.dreamy.pe.kr/zbxe/CodeClip/163216

참고 : http://hamonikr.org/board_bFBk25/16609

참고 : http://developinghappiness.com/?p=82





■ 우분투에 삼바 파일서버 설치하고 파일 공유하기




#01. 우분투에 삼바 서버 설치




우선우분투에 삼바를 설치한다.


아래와 같이 입력하여 우분투에 삼바를 설치하자.


 $ sudo apt-get install samba

 계속 하시겠습니까? [ Y / n ] Y





삼바가 설치가 완료되었다면


다음으로 해야할일은 삼바로 접근할 계정을 생성하는것 이다.


p.s 해당부분은 생략하고 우분투 계정으로 해도 되는것으로 보여진다.


자세한건는 좀더 테스트를 하고 추후 포스팅을 수정할 예정이다.



 $ sudo smbpasswd -a wicked

 New SMB password : 

 Retype new SMB password : 





삼바의 계정 생성이 완료되었다면


이제 VIM을 사용하여 공유할 폴더를 설정한다.



 $ sudo vim /etc/samba/smb.conf




① 개인 설정

 [ 개인 폴더명 ]

 comment = 연결할 SAMBA의 설명 코멘트

 path = SAMBA로 공유할 폴더의 위치

 valid users = SAMBA로 접근할 계정명

 writable = 수정권한을 부여한다.

 guest ok = 게스트 접속 허용 여부

 create mask = SAMBA로 생성되는 파일의 권한

 directory mask = SAMBA로 생성되는 디렉토리의 권한

 hosts allow = 접속을 허용할 IP 주소 한칸 띄워쓰기를 통해 추가로 IP주소를 넣을 수 있다.

 unix charset = LINUX 내부 문자셋

 dos charsetWINDOWS의 문자셋

 display charset = 화면 출력 문자셋



② 공개 설정

 [ 공개 폴더명 ]

 comment = 연결할 SAMBA의 설명 코멘트

 path = SAMBA로 공유할 폴더의 위치

 public = 전체 공개 설정

 writable = 쓰기, 수정 여부

 write list = 읽기 전용 여부(@그룹명 : 해당 그룹은 사용 가능)

 force user = 파일 폴더 생성시 지정되는 USER 계정

 force group = 파일 폴더 생성시 지정되는 GROUP 계정






모든 설정이 완료되었다면


smb.conf 파일을 저장하고 빠져나온다음


삼바를 재실행 시켜준다.


 $ sudo service smbd restart




마지막으로 삼바에서 사용할 포트를 사용하기위해


방화벽을 해제해 주어야 한다.


 $ sudo ufw allow 137,138/udp

 $ sudo ufw allow 139,445/tcp




마지막으로 항상 재시작 해도 삼자가 자동으로 시작되게 등록해준다.

sudo systemctl enable smbd




#02. 윈도우에서 삼바로 설정한 우분투 디렉토리에 접근




아무거나 폴더를 하나 열고


상단 URL 입력 부분에 접근할 우분투 서버의 IP 주소를 입력한다.



 \\127.0.0.1


① 접근할 우분투 서버의 아이피 주소를 입력한다.

② 위에서 생성한 삼바 계정과 패스워드를 입력한다.

③ 입력이 끝나면 확인 버튼을 클릭한다.





해당 IP로의 접근이 성공되었다면.


아래 이미지와 같이 삼바의 디렉토리 경로로 설정한


폴더명이 보일것이다..









위에서 지정한 폴더로 접속하면


해당 폴더의 내용을 손쉬게 확인 및 수정 할 수 있다.


















Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[Ubuntu] MariaDB root 계정의 비밀번호 및 보안 설정[Ubuntu] MariaDB root 계정의 비밀번호 및 보안 설정

Posted at 2018.12.11 22:33 | Posted in Linux/Ubuntu




참고 : https://github.com/helloheesu/SecretlyGreatly/wiki/맥에서-mysql-설치-후-환경설정하기





■ 우분투 마리아DB 비밀번호 및 보안 설정





우분투마리아DB 설치가 끝났다면 이제


접속할 수 있도록 관리자(root) 계정의 비밀번호 및 보안기능을 설정해 보자.



 $ sudo mysql_secure_installation




위 명령어를 실행하면 위와같이 이제 설정값을 어떻게 정할 건지 묻게된다.


아래 묻는 항목을 정리하였으니 하나하나 확인해 보며 설정을 끝마치도록 한다.









# 01. Enter current password for root



관리자(root) 계정의 현재 비밀번호를 묻는다.


비밀번호를 입력하고 ENETER 키를 누르면 된다.



그렇지만 [Ubuntu] MariaDB 설치 와 같이


마리아DB를 설치하고, $ sudo mysql_secure_jinstallation 를 통해


처음 설정하는 경우라면 ENETER를 치고  넘어가면 된다.




 Enter current password for root (enter for none): ENTER





# 02. Set root password?



관리자인 root 계정의 패스워드의 사용 여부를 묻는다.



 Set root password? [ Y / n ] Y





# 03. new password AND Re-enter new password



이제 root 계정의 비밀번호를 지정한다.



 Re-enter new password: 비밀번호






# 04. Remove anonymous users?



익명 사용자의 접속여부를 묻는다.


NO을 입력하면 $ mysql -u root 와 동시에 $ mysql도 사용이 가능하다.


되도록이면 YES를 선택하자.



 Remove anonymous users? [ Y / n ] Y






# 05. Disallow root login remotely?



127.0.0.1, localhost외에 다른 IProot 접속의 가능 여부를 묻는다.


YES를 선택하면 원격으로 root 계정의 접근을 막게된다.



 Disallow root login remotely? [ Y / n ] Y






# 06. Remove test database and access to it?



마리아DB 설치시 기본적으로 제공되는 test 데이터베이스의 삭제 여부를 묻는다.



 Remove test database and access to it? [ Y / n ] Y






# 07. Remove test database and access to it?



마지막으로 프리빌리지(privilege) 테이블의 재시작 여부를 묻는다.


YES를 선택하여 작업을 진행한다.



 Reload privilege tables now? [ Y / n ] Y










■ 우분투 마리아DB root 계정으로 접속




이제 모든 설정이 마무리 되었다면


관리자(root) 계정으로 접근할 수 있을 것이다.



 $ sudo mysql -u root -p

 Enter password: #03 에서 지정한 root 계정의 패스워드






이전글 : 우분투 마리아DB 설치하기

다음글 : 우분투에서 마리아DB 원격접속 설정하기




Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[Ubuntu] MariaDB 설치[Ubuntu] MariaDB 설치

Posted at 2018.12.11 01:11 | Posted in Linux/Ubuntu




참고 : https://zetawiki.com/wiki/우분투_MariaDB_설치





■ 우분투 마리아DB 설치하기





우분투마리아DB를 설치하려고 한다.


제일먼저 사용하려는 우분투마리아DB가 설치되어 있는지 여부를 확인해 보도록 한다.





# 01. MariaDB 설치 여부 확인


제일 먼저 해야할 일은 list 명령을 통해


mariadb-server의 설치 여부부터 확인한다.



 $ apt list mariadb-server -a


현재 우분투상에 마리아DB는 설치되어 있지 않은것을 확인 할 수 있다.






# 02. MariaDB 설치하기



설치가 되어 있지 않다면


관리자 권한으로 mariadb-server 를 설치한다.



 $ sudo apt-get install mariadb-server mariadb-client

 $ sudo apt-get install mariadb-server mariadb-client --fix-missing --fix-broken


설치중 에러가 날경우 --fix-missing, --fix-broken 를 추가적으로 더 입력하여 진행해 보자





# 03. MariaDB 설치 여부 재확인



이제 다시 맨 처음에 썼던 명령어를 실행해 보면


마리아DB가 정상적으로 설치된 것을 확인 할 수 있다.



 $ apt list mariadb-server -a







# 04. MariaDB 실행



마리아DB의 설치확인이 끝났다면


service 패키지 start 명령을 사용하여 마리아DB를 실행시켜보자.



 $ sudo service mysql start




마리아DB가 정상적으로 실행이 되고 있다면.


아래 명령어와 같이 실행중 여부를 확인 할 수 있다.



 $ sudo service mysql stauts








다음글 : 우분투 마리아DB 비밀번호 및 보안 설정







Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[Ubuntu] SSH Server 설치 및 사용방법[Ubuntu] SSH Server 설치 및 사용방법

Posted at 2018.11.18 20:05 | Posted in Linux/Ubuntu




■ SSH 서버(PORT 22)



SSH 서버
는 원격지에서 서버에 터미널로 접속하는 것을 가능하게 해주는 서버이다.
클라이언트가 SSH 서버에 원격으로 접속하면 터미널 창에서 할 수 있는 모든 시스템 관리 작업을 원격에서 할 수 있기 때문에

대부분의 서버에 가장 기본적으로 설치되는 서비스이다.

SSH 서버를 설치하지 않으면 항상 컴퓨터에 직접 붙어서 작업을 진행해야 하는데 꽤나 불편하기도 하고,

간혹 컴퓨터에 접근하기가 쉽지 않은 경우도 있기 때문에 어떤 서버를 구축하든지 SSH 서버는 필수적으로 설치하는 경우가 많다.

SSH를 사용하기 이전에는 텔넷(TELNET)이라는 프로토콜을 가장 많이 사용했는데,
TELNET은 서버와 주고 받는 데이터를 암호화하지 않기 때문에 중간에 악의적으로 데이터를 가로채서 분석하면 중요한 정보가 노출될 수 있다는 보안상 문제점이 있다.
따라서 최근에는 보안성이 강화된 SSH를 대부분 사용한다.
SSH를 이용하기 위해서는 클라이언트 측에서는SSH 클라이언트 프로그램을 이용해야 하는데 PUTTY, XShell 같은 프로그램이 대표적이다.







서버측에서 SSH 서버를 구축하는 데 가장 많이 사용되는 프로그램은 OpenSSH이다.


우분투도 OpenSSH를 SSH 서버로 사용하고 있다.





■ SSH 설치 전 준비작업



SSH 서버를 포함해서 모든 서버를 설치하기 전에 확인해야 할 사항이 있다.


아래 확인 사항들은 집에서 초고속 인터넷 망에 인터넷 공유기를 연결해서 사용하는 환겨을 가정하고 있다.


이런 환경이 아닌 다른 환경(서버 호스팅 또는 공인 IP를 제공받는 환경)일 경우 아래 준비 작업이 필요 없을 수 있다.



① DDNS 서비스를 설정했는지 확인한다.
    IP주소를 직접 이용하는 방법도 가능하지만 언젠가 망 사업자에 의해 IP 주소가 변경될 수 있으므로

    장기간 서버를 운영하려면 DDNS 서비스를 설정해 줘야 한다.

② 서버로 사용할 컴퓨터의 네트워크 장치의 설정이 DHCP가 아닌 정적 IP 주소로 되어 있는지 확인한다.

③ 공유기의 포트 포워딩이 설정되어 있는지 확인한다.

    공유기의 포트 포워딩을 하려면 포트 번호를 지정해 주어야 하는데

    SSH 서버의 경우 기본 설정은 TCP 22번 포트를 사용한다.




위 3가지 중에서 2번, 3번 항목은 집에서 공유기를 사용한다는 가정 아래 필요한 절차이다.


만약 인터넷 공유기를 사용하지 않고 직접 초고속 인터넷 망에 컴퓨터를 연결해서 사용한다면 2, 3번 항목은 생략하고 1번만 확인하면 된다.





■ SSH 서버 설치 하기



우분투에서 SSH 서버를설치하는 방법은 매우  간단한다. 별다른 설정도 필요 없고 그저 관련 패키지 설치만 하면된다.


 $ sudo apt-get install openssh-server




위 명령을 실행하면 의존성 있는 패키지를 포함해서 정말 SSH를 설치할지 우분투가 물어보는데 Y키를 누르면 설치가 진행된다.


설치가 정상적으로 완료되면 자동으로 서버가 시작된다.

아래 명령을 이용해서 서버가 정상적으로 실행되고 있는지 확인 할 수 있다.



 $ netstat -atn



22번 포트 상태가 LISTEN인 것을 볼 수가 있는데 22번 포트가 SSH 서버를 접속할 때 사용하는 포트이다.

실제로 접속해서 테스트 해보는 방법도 가능하다. 바로 로컬 접속을 해보는 것이다.


 $ ssh localhost

 Are you sure you want to continue connecting? yes

 password : 현재 접속중인 우분투 계정의 비밀번호




SSH 명령 뒤쪽에 적은 localhost는 접속할 서버의 주소를 지칭한다.


위 명령은 localhost 즉, 자기 자신으로 SSH 접속을 하라는 명령이다.


위 명령을 수행하는 데 한번도 접속한 적이 없는 서버로 접속 요청을 받았다면 위에서 보이는 것처럼 경고문이 한번 뜨게 된다.


정말 접속할 건디 다시 한번 물어보는데 “yes”를 입력하고 접속에 문제가 없다면 패스워드를 입력하는 항목이 나온다.


이때 로그인한 우분투 계정의 암호를 입력하면 된다.



로그인이 성공적으로 완료되면 아래와 같이 로그인 화면을 보게 된다.






비록 로컬이긴 하지만 성공적으로 SSH 서버를 통해서 터미널 접속을하게 된 것이다.


콘솔 작업을 마치고 접속을 종료하려고 한다면 “exit”라고 입력하면 된다.



 $ exit





SSH 명령에 대해 좀 더 살펴보도록 하자. wickedmiso.com 이라는 서버에 접속하려면 아래처럼 입력한다.




 $ ssh wickedmiso.com



간단해 보이지만 여기에는 생략되어서 강제로 입력된 항목이 존재한다.

그 중 하나는 서버에 로그인하려는 계정 정보인데 생략되었기 때문에 자동적으로 현재 로그인한 사용자의 계정명에 적용된다.


다음으로 서버의 포트 번호인데 생략되었기 때문에 자동적으로 22번으로 접속하게 된다. 만약 현재 로그인한 계정이 아닌 다른 계정으로 서버에 접속하고 싶다면 아래처럼 입력한다.


 $ ssh saak@wickedmiso.com




위 명령은 접속 wickedmiso.com 서버로 SSH 접속을 하는데 계정은 saak라는 계정으로 로그인 하라는 명령이다.

다른 포트번호를 접속하고자 한 아래 명령처럼 입력하면 된다.


 $ ssh wickedmiso.com -p 22




위 명령은 22번 포트 즉, 기본설정 포트로 접속하라는 명령이다. -p 옵션을 이용하면 된다.


물론 위 접속이 성공적으로 이루어지려면 서버가 22번 포트로 SSH 서비스를 운영하고 있어야 한다.





■ SSH 서버 설정 변경하기




SSH 서버는 변경할 설정이 크게 없지만, 가끔 포트 번호를 변경해야만 하는 상황이 발생할 수 있다.


예를 들어 22번 포트를 초고속 인터넷 망사업자가 막아놓은 경우가 그렇다.


망 사업자가 특정 포트의 접속을 막기도 하는데 이럴 경우는 해당 포트를 포기하고 다른 포트를 사용해서 서버를 운영하는 방법 외에는 없다.

-. 우분투에서 SSH 서버의 설정 변경을 다루려면 sshd_config 파일을 열어야 한다.
-. 아래 파일을 수정하려면 관리자 권한이 필요하다.(따라서 명령 앞쪽에 반드시 sudo 명령을 붙여주자.)


 $ sudo vim /etc/ssh/sshd_config



파일의 윗부분에 Port 22라는 항목이 있는데 이를 원하는 다른 숫자로 바꾸어 주고 저장하고 VIM을 빠져 나온다.
이제 SSH 서버를 재시작 해주자.


 $ sudo /etc/inid.d/ssh restart



위 명령은 SSH 서버를 재시작하는 명령이다. 만약 서버를 정지시키거나, 정지된 서버를 다시 시작하려면 아래와 같이 입력한다.

 $ sudo /etc/init.d/ssh stop

 $ sudo /etc/init.d/ssh start



서버가 재시작 되었다면 설정 파일에 새롭게 반영한 포트 번호로 잘 바뀌었는지 확인해 주자.




 $ netstat -atn



netstat 명령을 통해서 SSH 서버의 포트 번호가 잘 변경된 것을 확인 할 수 있다.




■ 파일 전송하기



SSH 서버에 접속해서 원격지에서 서버 작업을 진행하다 보면 간혹 서버로 파일을 전송하거나

서버에 있는 파일을 원격지에 있는 작업 PC로 전송 받고 싶은 경우가 발생한다. 이럴경우 여러가지 방법이 있다.

대표적인 방법으로 FTP 서버를 구축하고 FTP 클라이언트를 이용하거나 WebDAV를 이용하는 방법이 존재한다. 여기서는 이미 구추된 SSH 서버를 이용해서 파일을 전송하는 방법에 대해 살펴보자.

SSH 서버를 이용해서 파일ㅇ르 주고 받으면 이미 SSH 서버를 구축했기 때문에 별도로 새로운 서버 프로그램을 설치하거나 셋팅할 필요가 없다는 장점이 있다.



 $ scp 전송파일 사용자ID@서버네임:디렉토리(폴더) 경로



위 명령은 현재 디렉토리에 있는 전송팔 파일을 원격지에 있는 서버네임의 사용자ID 계정으로 접속해서 디렉토리 폴더로 전송하라는 명령이다.

현제 폴더에 있는 전송파일을 전송할 서버의 사용자 계정의  서버의 특정 경로로 전송하고 싶다면 위와 같이 입력한다.




반대로 원격지에 있는 파일도 현재 폴더로 가져올 수 있다.


원격지 서버 wickedmiso.comsaak 라는 계정으로 로그인한 수 /home/saak/text.txt 파일을 현재 폴더로 전송하고자 한다면 아래처럼 입력한다.



 $ scp 사용자ID@서버네임:디렉토리(폴더) 경로/전송파일 파일을 받을 경로


만약 디렉토리를 전송하고 싶다면 -r 옵션을 이용한다.



※ SSH를 이용한 파일 전송이 성공했다면 FTP를 사용하는것처럼 전송프로그램을 통해서도 파일의 전송이 가능해 진다.









Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[PHP] Windows 환경에서 Apache 및 PHP 설치하기[PHP] Windows 환경에서 Apache 및 PHP 설치하기

Posted at 2018.08.18 17:30 | Posted in PHP/PHP Setting




■ 윈도우 환경에서 아파치 및 php 설치 및 세팅하는 방법




01. http://www.apachelounge.com/download/ Apache를 다운받는다.

    설치할 윈도우 환경에 맞게 64bit인지 32bit인지 확인하고 맞는 버전을 다운받도록 한다.




02. 다운받은 httpd-버전.zip 파일을 열고 그중에 Apache24 폴더만 따로 아파치를 설치할 폴더로 복사한다.

 ① httpd-버전.zip을 압축 해제 프로그램을 통해 연다.

 ② 압축 해제 프로그램이 실행되면 압축 파일 목록 중에 Apache24가 있는것을 확인 할 수 있다.

 ③ Apache24 폴더를 압축을 해제할 경로에 생성한다.





03. 다음으로는 PHP를 다운받는다.

    https://windows.php.net/download/ 사이트에 접속하여 PHP를 다운받으면 된다.

    이때 Thed Safe 버전을 받도록 한다.





04. 다운받은 php-버전정보.zip 파일의 압축을 해제한 이 후 압축 해제한 폴더명을 php로 수정한다.





05. 이제 php 폴더에서 php.ini-development 파일을 찾아본다.

     찾아낸 이후에 이 파일을 복사본을 생성하고 그 복사본의 파일명과 확장자를 php.ini로 변경한다.






06. 텍스트 편집기를 통해 php.ini를 열고 이제 내용을 수정하도록 한다.





07. short_open_tag를 아래와 같이 on으로 변경한다.

short_open_tag가 on이 되면 위 그림과 같이 <?php ?>가 아닌 <? ?>태그만 선언을 해주어도

그 안에서 php기능을 사용할 수 있다.





08. 다음으로 doc_root 파일에 경로를 추가하도록 하자.

    압축을 해제한 Apache24 폴더의 htdocs 폴더까지의 경로를 doc_root 에 경로를 삽입하면 된다.





09. 다음으로 extension_dir 속성에 위에서 압축을 해제하고 파일명을 바꾼 php 폴더의 ext폴더까지의 경로를

    extension_dir 속성에 삽입하면 된다.




10. date.timezone 속성의 주석( ; )을 해제하고 Asia/Seoul 을 입력하여 한국 시간을 사용할 수 있도록 한다.





11. error_reporting 속성을 찾고 에러 등급의 설정을 변경하도록 하자

    아래는 기존 값에서 E_ALL & ~E_NOTICE로 설정을 해 두었다.

    이렇게 설정하면 지정한 변수의 값이 NULL인 경우에 발생하는 Undefined index 에러를 사전에 방지할 수 있다.





12. php.ini 파일의 설정이 끝나면 php가 잘 실행되는지 여부와 함께 php를 환경변수에 등록하도록 하자.

    먼저 제어판에 들어가서 시스템 속성으로 찾고 시스템을 실행 시킨다.





14. 시스템 창이 팝업이 되면 좌측의 고급 시스템 설정을 클릭한다.





15. 시스템 속성 창이 뜨면 아래 순서대로 작업을 진행한다.

 ① 상단 탭 메뉴에서 고급을 클릭한다.

 ② 아래 환경 변수 버튼을 클릭한다.





12. 환경 변수를 아래와 같은 순서대로 변경하도록 하자.

 ① Path 변수를 찾고 선택한다.

 ② 편집버튼을 클릭하여 Path 값을 수정한다.





13. php의 압축을 해제한 곳의 경로를 path 변수에 등록한다.

 ① C:\설치경로\Apache24\php; 경로까지의 값을 등록한다.

 ② 확인 버튼을 클릭하여 변경된 사항을 저장한다.




14. 확인 버튼을 눌러 변경된 사항을 한번 더 저장한다.




15. 마지막으로 돌아온 시스템 속성창에서 확인 버튼을 누르고 닫아준다.





16. 이제 윈도우 + R 키를 입력하여 실행 팝업창을 띄운다.

 ① cmd 라고 입력하여 윈도우 터미널을 실행시킨다.

 ② php -v라고 입력하여 php버전





17. 이제 php -v라고 입력하면 php정보가 터미널 창에 출력되는 것을 확인 할 수 있다.

    이것으로 일단 php 설치는 일단락 되었다.





18. 다음으로 수정할 파일은 Apache24폴더의 conf 폴더 안에 있는 httpd.conf 파일이다.

    아파치 설치에 가장 중요한 부분이니 신경쓰도록 하자.




19. 제일먼저 Define SRVROOT 속성을 찾고 실행할 아파치(Apache24)의 경로를 삽입한다.






20. LoadModule이 몰려있는 부분을 찾고 그 최상단에 아래와같이 php7apache2_4.dll의 설치 경로를 지정하는데 작성 양식은 아래와 같다.


    LoadModule php7_module "c:/Developer/Apache24/php7apache2_4.dll






21. ServerAdmin 속성을 찾고 자신이 사용하는 메일 주소를 도메인 까지 작성하여 기입한다.





22. ServerName을 찾고 기존 www.example.com:80 이라고 적힌부분을 localhost:80 으로 변경한다.





23. DirectoryIndex를 찾고 index.php 속성을 추가해 준다.





24. AddType application이 적혀있는 부분을 찾고 그 최 하단에

    AddType application/x-httpd-php .php .html .inc 라고 작성한다.




25. 이제 c:\Windows\System32 경로로 이동하여 cmd.exe 파일을 찾고 관리자 권한으로 실행시킨다.

 ① cmd.exe 파일을 찾고 마우스 오린쪽 버튼을 클릭한다.

 ② 화면에 나오는 메뉴중 상단의 관리자 권한으로 실행을 선택하여 터미널 창을 실행 시킨다.




26. 관리자 권한으로 터미널이 실행이 되면 아래 순서와 같이 입력한자.

 ① C:\> cd \

 ② C:\> cd Developer\Apache24\bin

 ③ C:\> httpd.exe -k install





27. 아파치 실행을 위한 방화벽 사용여부를 묻는다 엑세스 허용 버튼을 클릭하자.





28. 다시 터미널 창으로 돌아와서 httpd.exe -k start 를 입력하고 실행한다.





29. 이제 제어판의 관리 도구에 들어가 보자.





30. 시스템을 선택 실행한다.






31. 서비스 창이 띄면 아래 이미지와 같이 Apache24가 실행중인 것을 확인 할 수 있다.






32. 아파치가 실행중인 것을 확인 했으니 이제 php샘플 파일을 하나 실행해 보도록 하자.

    Apache24경로의 htdocs 폴더로 이동하도록 한다.





33. phpinfo.php 라는 파일을 생성한다.






34. phpinfo.php 파일의 코드는 아래와 같다.

 phpinfo.php

<?php

      phpinfo();

?>





35. 이제 웹브라우저의 주소창에 localhost/phpinfo.php 라고 입력해보면 아래와 같은 화면이 뜨는 모습을 확인 할 수 있다.







'PHP > PHP Setting' 카테고리의 다른 글

[PHP] DB접속 테스트하기  (0) 2019.07.30
[PHP] Windows 환경에서 Apache 및 PHP 설치하기  (0) 2018.08.18

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[MariaDB] Windows에 MariaDB 다운받고 설치하기[MariaDB] Windows에 MariaDB 다운받고 설치하기

Posted at 2018.04.10 23:06 | Posted in MySQL/MariaDB




■ 윈도우즈에 마리아DB 다운받고 설치하기




01. https://downloads.mariadb.org/ 사이트에 접속하여 마리아 DB를 다운받자.




02. 설치할 윈도우즈에 맞는 mariadb.mis 설치 파일을 선택한다.




03. 그럼 페이지가 이동하고 다운로드 여부를 묻는 창이 뜰것이다. 파일 저장을 클릭하여 다운로드 받자.




04. 다운로드 받은 mariadb.msi 파일을 실행한다.




05. Next 버튼을 눌러 작업을 진행한다.




06. Brows버튼을 눌러 마리아DB를 설치할 경로를 지정한다.




07. 마리아DB를 설치할 경로를 지정하고, OK 버튼을 클릭한다.




08. 이제 Next 버튼을 눌러 설치를 계속 진행한다.




09. root 계정에서 사용할 패스워드를 지정하고, Next 버튼을 클릭한다.




10. 서비스네임 및 포트 번호를 특별히 수정할 일이 있다면 수정한 후에 Next 버튼을 눌러 설치를 진행한다.




11. Next 버튼을 눌러 설치를 계속 진행한다.




12. Install 버튼을 눌러 작업을 계속 진행하자.




13. Finish 버튼을 누름으로서 윈도우즈에 마리아DB 설치작업이 완료되었다.




14. 이제 마지막으로 명령 프롬프트 창을 열고 MariaDB에 접속해 보자.

 ① C:\> mysql -u root -p

 ② Enter Password : ⑨번에서 입력한 비밀번호








Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[Editor] Daum Open Editor 세팅하고 사용하기[Editor] Daum Open Editor 세팅하고 사용하기

Posted at 2018.03.26 13:07 | Posted in API/DAUM 오픈 에디터




첨부파일 : editor.zip




■ 다음 오픈 에디터 세팅하고 사용하기




01. https://github.com/kakao/DaumEditor/tree/gh-pages/download/에 접속해서 다음에디터를 다운받자.




02. 화면 최하단을 보면 How to download 라고 적힌 유의사항이 적힌 부분이 있는데.

※ 이포스팅 에서는 작성시기의 안정화된 버저인 stable(7.4.X) 버전대를 사용하였다.




03. Stable(7.4.X)버전에서 가장 높은 버전대를 찾아 선택하고 클릭한다.




04. 해당 버전의 다운로드 페이지로 이동되면 아래 순서대로 작업을 수행한다.

 ① Download 버튼을 클릭한다.

 ② 확인 버튼을 클릭하여 daumeditor.zip 파일을 다운받는다.




05. 이제 다음 에디터 프로젝트를 수행할 폴더를 생성하고 아래 순서대로 작업을 진행한다.

 ① 다음 에디터 프로젝트를 진행할 editor 라는 폴더를 생성한다.

 ② 위에서 다운받은 daumeditor.zip 파일의 압축을 해제한다.

 ③ 압축해제된 폴더의 이름을 daumEditor로 변경하였다.





06. 이제 다음에디터를 불러와서 사용할 board.php 파일 생성한다.




07. 생성한 board.php 파일에 들어갈 소소는 아래와 같다.

 board.php

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Daum 에디터</title>
<script src="https://code.jquery.com/jquery-1.12.4.min.js" type="text/javascript"></script>
<script type="text/javascript">
function saveContent() {
    if(jQuery("#title").val() == "") {
        alert("제목을 입력해 주세요.");
        jQuery("#title").focus();
        return;
    }

    Editor.save(); // 이 함수를 호출하여 글을 등록하면 된다.
}
</script>
</head>
<body>
<form name="tx_editor_form" id="tx_editor_form" action="view.php" method="post" enctype="multipart/form-data" accept-charset="utf-8">
&nbsp;<b>제목&nbsp;:</b>&nbsp;<input type="text" id="title" name="title" style="width:680px;"/>
<div style="height:10px;"></div>
<div style="width:750px;">
<?php
    include_once ("./daumEditor/editor.html");      // 다음 에디터를 include 한다.
?>
<div align="right"><input type="button" value="등록" onClick="saveContent();"/></div>
</div>
</form>
</body>
</html>




08. 다음으로 작성된 값을 출력할 view.php를 생성한다.




09. view.php에 들어갈 소스는 아래와 같다.

 view.php

<?php

    echo "<pre>";

    print_r($_POST);

    echo "</pre>";

?>




10. 이제 위에서 압축을 해제하 명칭을 변경한 daumEditor 폴더의 editor.html 파일을 수정한다.




11. editor.hml 파일을 수정한다. 아래 코드는 원래 적혀있던 주석들은 다 삭제해 두었다.
 ① 상대경로로 잡혀 있는 부분은 전부 절대경로로 변경하고 파란색 글씨로 표기하였다.

 ② 샘플로 들어가 있거나 board.php에서 미리 지정한기능 혹은 필요없어 삭제해도 되는 부분은 빨간색으로 표기하였다.

 editor.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Daum 에디터 - 등록화면 예제</title>


<!-- 절대 경로로 변경 -->

<link rel="stylesheet" href="http://localhost/editor/daumEditor/css/editor.css" type="text/css" charset="utf-8"/>

<script src="http://localhost/editor/daumEditor/js/editor_loader.js?environment=development" type="text/javascript" charset="utf-8"></script>


</head>

<body>

<div class="body">


<!-- form 태그 삭제 -->

<!-- <form name="tx_editor_form" id="tx_editor_form" action="http://posttestserver.com/post.php" method="post" accept-charset="utf-8"> -->


    <div id="tx_trex_container" class="tx-editor-container">

        <div id="tx_sidebar" class="tx-sidebar">

            <div class="tx-sidebar-boundary">

                <ul class="tx-bar tx-bar-left tx-nav-attach">

                    <li class="tx-list">

                        <div unselectable="on" id="tx_image" class="tx-image tx-btn-trans">

                            <a href="javascript:;" title="사진" class="tx-text">사진</a>

                        </div>

                    </li>

                    <li class="tx-list">

                        <div unselectable="on" id="tx_file" class="tx-file tx-btn-trans">

                            <a href="javascript:;" title="파일" class="tx-text">파일</a>

                        </div>

                    </li>

                    <li class="tx-list">

                        <div unselectable="on" id="tx_media" class="tx-media tx-btn-trans">

                            <a href="javascript:;" title="외부컨텐츠" class="tx-text">외부컨텐츠</a>

                        </div>

                    </li>

                    <li class="tx-list tx-list-extra">

                        <div unselectable="on" class="tx-btn-nlrbg tx-extra">

                            <a href="javascript:;" class="tx-icon" title="버튼 더보기">버튼 더보기</a>

                        </div>

                        <ul class="tx-extra-menu tx-menu" style="left:-48px;" unselectable="on"></ul>

                    </li>

                </ul>

                <ul class="tx-bar tx-bar-right">

                    <li class="tx-list">

                        <div unselectable="on" class="tx-btn-lrbg tx-fullscreen" id="tx_fullscreen">

                            <a href="javascript:;" class="tx-icon" title="넓게쓰기 (Ctrl+M)">넓게쓰기</a>

                        </div>

                    </li>

                </ul>

                <ul class="tx-bar tx-bar-right tx-nav-opt">

                    <li class="tx-list">

                        <div unselectable="on" class="tx-switchtoggle" id="tx_switchertoggle">

                            <a href="javascript:;" title="에디터 타입">에디터</a>

                        </div>

                    </li>

                </ul>

            </div>

        </div>

        <div id="tx_toolbar_basic" class="tx-toolbar tx-toolbar-basic"><div class="tx-toolbar-boundary">

            <ul class="tx-bar tx-bar-left">

                <li class="tx-list">

                    <div id="tx_fontfamily" unselectable="on" class="tx-slt-70bg tx-fontfamily">

                        <a href="javascript:;" title="글꼴">굴림</a>

                    </div>

                    <div id="tx_fontfamily_menu" class="tx-fontfamily-menu tx-menu" unselectable="on"></div>

                </li>

            </ul>

            <ul class="tx-bar tx-bar-left">

                <li class="tx-list">

                    <div unselectable="on" class="tx-slt-42bg tx-fontsize" id="tx_fontsize">

                        <a href="javascript:;" title="글자크기">9pt</a>

                    </div>

                    <div id="tx_fontsize_menu" class="tx-fontsize-menu tx-menu" unselectable="on"></div>

                </li>

            </ul>

            <ul class="tx-bar tx-bar-left tx-group-font">

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-lbg tx-bold" id="tx_bold">

                        <a href="javascript:;" class="tx-icon" title="굵게 (Ctrl+B)">굵게</a>

                    </div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-bg tx-underline" id="tx_underline">

                        <a href="javascript:;" class="tx-icon" title="밑줄 (Ctrl+U)">밑줄</a>

                    </div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-bg tx-italic" id="tx_italic">

                        <a href="javascript:;" class="tx-icon" title="기울임 (Ctrl+I)">기울임</a>

                    </div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-bg tx-strike" id="tx_strike">

                        <a href="javascript:;" class="tx-icon" title="취소선 (Ctrl+D)">취소선</a>

                    </div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-slt-tbg tx-forecolor" id="tx_forecolor">

                        <a href="javascript:;" class="tx-icon" title="글자색">글자색</a>

                        <a href="javascript:;" class="tx-arrow" title="글자색 선택">글자색 선택</a>

                    </div>

                    <div id="tx_forecolor_menu" class="tx-menu tx-forecolor-menu tx-colorpallete" unselectable="on"></div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-slt-brbg tx-backcolor" id="tx_backcolor">

                        <a href="javascript:;" class="tx-icon" title="글자 배경색">글자 배경색</a>

                        <a href="javascript:;" class="tx-arrow" title="글자 배경색 선택">글자 배경색 선택</a>

                    </div>

                    <div id="tx_backcolor_menu" class="tx-menu tx-backcolor-menu tx-colorpallete" unselectable="on"></div>

                </li>

            </ul>

            <ul class="tx-bar tx-bar-left tx-group-align">

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-lbg tx-alignleft" id="tx_alignleft">

                        <a href="javascript:;" class="tx-icon" title="왼쪽정렬 (Ctrl+,)">왼쪽정렬</a>

                    </div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-bg tx-aligncenter" id="tx_aligncenter">

                        <a href="javascript:;" class="tx-icon" title="가운데정렬 (Ctrl+.)">가운데정렬</a>

                    </div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-bg tx-alignright" id="tx_alignright">

                        <a href="javascript:;" class="tx-icon" title="오른쪽정렬 (Ctrl+/)">오른쪽정렬</a>

                    </div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-rbg tx-alignfull" id="tx_alignfull">

                        <a href="javascript:;" class="tx-icon" title="양쪽정렬">양쪽정렬</a>

                    </div>

                </li>

            </ul>

            <ul class="tx-bar tx-bar-left tx-group-tab">

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-lbg tx-indent" id="tx_indent">

                        <a href="javascript:;" title="들여쓰기 (Tab)" class="tx-icon">들여쓰기</a>

                    </div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-rbg tx-outdent" id="tx_outdent">

                        <a href="javascript:;" title="내어쓰기 (Shift+Tab)" class="tx-icon">내어쓰기</a>

                    </div>

                </li>

            </ul>

            <ul class="tx-bar tx-bar-left tx-group-list">

                <li class="tx-list">

                    <div unselectable="on" class="tx-slt-31lbg tx-lineheight" id="tx_lineheight">

                        <a href="javascript:;" class="tx-icon" title="줄간격">줄간격</a>

                        <a href="javascript:;" class="tx-arrow" title="줄간격">줄간격 선택</a>

                    </div>

                    <div id="tx_lineheight_menu" class="tx-lineheight-menu tx-menu" unselectable="on"></div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-slt-31rbg tx-styledlist" id="tx_styledlist">

                        <a href="javascript:;" class="tx-icon" title="리스트">리스트</a>

                        <a href="javascript:;" class="tx-arrow" title="리스트">리스트 선택</a>

                    </div>

                    <div id="tx_styledlist_menu" class="tx-styledlist-menu tx-menu" unselectable="on"></div>

                </li>

            </ul>

            <ul class="tx-bar tx-bar-left tx-group-etc">

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-lbg tx-emoticon" id="tx_emoticon">

                        <a href="javascript:;" class="tx-icon" title="이모티콘">이모티콘</a>

                    </div>

                    <div id="tx_emoticon_menu" class="tx-emoticon-menu tx-menu" unselectable="on"></div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-bg tx-link" id="tx_link">

                        <a href="javascript:;" class="tx-icon" title="링크 (Ctrl+K)">링크</a>

                    </div>

                    <div id="tx_link_menu" class="tx-link-menu tx-menu"></div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-bg tx-specialchar" id="tx_specialchar">

                        <a href="javascript:;" class="tx-icon" title="특수문자">특수문자</a>

                    </div>

                    <div id="tx_specialchar_menu" class="tx-specialchar-menu tx-menu"></div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-bg tx-table" id="tx_table">

                        <a href="javascript:;" class="tx-icon" title="표만들기">표만들기</a>

                    </div>

                    <div id="tx_table_menu" class="tx-table-menu tx-menu" unselectable="on">

                        <div class="tx-menu-inner">

                            <div class="tx-menu-preview"></div>

                            <div class="tx-menu-rowcol"></div>

                            <div class="tx-menu-deco"></div>

                            <div class="tx-menu-enter"></div>

                        </div>

                    </div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-rbg tx-horizontalrule" id="tx_horizontalrule">

                        <a href="javascript:;" class="tx-icon" title="구분선">구분선</a>

                    </div>

                    <div id="tx_horizontalrule_menu" class="tx-horizontalrule-menu tx-menu" unselectable="on"></div>

                </li>

            </ul>

            <ul class="tx-bar tx-bar-left">

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-lbg tx-richtextbox" id="tx_richtextbox">

                        <a href="javascript:;" class="tx-icon" title="글상자">글상자</a>

                    </div>

                    <div id="tx_richtextbox_menu" class="tx-richtextbox-menu tx-menu">

                        <div class="tx-menu-header">

                            <div class="tx-menu-preview-area">

                                <div class="tx-menu-preview"></div>

                            </div>

                            <div class="tx-menu-switch">

                                <div class="tx-menu-simple tx-selected"><a><span>간단 선택</span></a></div>

                                <div class="tx-menu-advanced"><a><span>직접 선택</span></a></div>

                            </div>

                        </div>

                        <div class="tx-menu-inner"></div>

                        <div class="tx-menu-footer">

                            <!-- 이미지 파일 경로 수정 -->

                            <img class="tx-menu-confirm" src="http://localhost/editor/daumEditor/images/icon/editor/btn_confirm.gif?rv=1.0.1" alt=""/>

                            <img class="tx-menu-cancel" hspace="3" src="http://localhost/editor/daumEditor/images/icon/editor/btn_cancel.gif?rv=1.0.1" alt=""/>

                        </div>

                    </div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-bg tx-quote" id="tx_quote">

                        <a href="javascript:;" class="tx-icon" title="인용구 (Ctrl+Q)">인용구</a>

                    </div>

                    <div id="tx_quote_menu" class="tx-quote-menu tx-menu" unselectable="on"></div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-bg tx-background" id="tx_background">

                        <a href="javascript:;" class="tx-icon" title="배경색">배경색</a>

                    </div>

                    <div id="tx_background_menu" class="tx-menu tx-background-menu tx-colorpallete" unselectable="on"></div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-rbg tx-dictionary" id="tx_dictionary">

                        <a href="javascript:;" class="tx-icon" title="사전">사전</a>

                    </div>

                </li>

            </ul>

            <ul class="tx-bar tx-bar-left tx-group-undo">

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-lbg tx-undo" id="tx_undo">

                        <a href="javascript:;" class="tx-icon" title="실행취소 (Ctrl+Z)">실행취소</a>

                    </div>

                </li>

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-rbg tx-redo" id="tx_redo">

                        <a href="javascript:;" class="tx-icon" title="다시실행 (Ctrl+Y)">다시실행</a>

                    </div>

                </li>

            </ul>

            <ul class="tx-bar tx-bar-right">

                <li class="tx-list">

                    <div unselectable="on" class="tx-btn-nlrbg tx-advanced" id="tx_advanced">

                        <a href="javascript:;" class="tx-icon" title="툴바 더보기">툴바 더보기</a>

                    </div>

                </li>

            </ul>

        </div>

    </div>

    <div id="tx_toolbar_advanced" class="tx-toolbar tx-toolbar-advanced"><div class="tx-toolbar-boundary">

        <ul class="tx-bar tx-bar-left">

            <li class="tx-list">

                <div class="tx-tableedit-title"></div>

            </li>

        </ul>

        <ul class="tx-bar tx-bar-left tx-group-align">

            <li class="tx-list">

                <div unselectable="on" class="tx-btn-lbg tx-mergecells" id="tx_mergecells">

                    <a href="javascript:;" class="tx-icon2" title="병합">병합</a>

                </div>

                <div id="tx_mergecells_menu" class="tx-mergecells-menu tx-menu" unselectable="on"></div>

            </li>

            <li class="tx-list">

                <div unselectable="on" class="tx-btn-bg tx-insertcells" id="tx_insertcells">

                    <a href="javascript:;" class="tx-icon2" title="삽입">삽입</a>

                </div>

                <div id="tx_insertcells_menu" class="tx-insertcells-menu tx-menu" unselectable="on"></div>

            </li>

            <li class="tx-list">

                <div unselectable="on" class="tx-btn-rbg tx-deletecells" id="tx_deletecells">

                    <a href="javascript:;" class="tx-icon2" title="삭제">삭제</a>

                </div>

                <div id="tx_deletecells_menu" class="tx-deletecells-menu tx-menu" unselectable="on"></div>

            </li>

        </ul>

        <ul class="tx-bar tx-bar-left tx-group-align">

            <li class="tx-list">

                <div id="tx_cellslinepreview" unselectable="on" class="tx-slt-70lbg tx-cellslinepreview">

                    <a href="javascript:;" title="선 미리보기"></a>

                </div>

                <div id="tx_cellslinepreview_menu" class="tx-cellslinepreview-menu tx-menu" unselectable="on"></div>

            </li>

            <li class="tx-list">

                <div id="tx_cellslinecolor" unselectable="on" class="tx-slt-tbg tx-cellslinecolor">

                    <a href="javascript:;" class="tx-icon2" title="선색">선색</a>

                    <div class="tx-colorpallete" unselectable="on"></div>

                </div>

                <div id="tx_cellslinecolor_menu" class="tx-cellslinecolor-menu tx-menu tx-colorpallete" unselectable="on"></div>

            </li>

            <li class="tx-list">

                <div id="tx_cellslineheight" unselectable="on" class="tx-btn-bg tx-cellslineheight">

                    <a href="javascript:;" class="tx-icon2" title="두께">두께</a>

                </div>

                <div id="tx_cellslineheight_menu" class="tx-cellslineheight-menu tx-menu" unselectable="on"></div>

            </li>

            <li class="tx-list">

                <div id="tx_cellslinestyle" unselectable="on" class="tx-btn-bg tx-cellslinestyle">

                    <a href="javascript:;" class="tx-icon2" title="스타일">스타일</a>

                </div>

                <div id="tx_cellslinestyle_menu" class="tx-cellslinestyle-menu tx-menu" unselectable="on"></div>

            </li>

            <li class="tx-list">

                <div id="tx_cellsoutline" unselectable="on" class="tx-btn-rbg tx-cellsoutline">

                    <a href="javascript:;" class="tx-icon2" title="테두리">테두리</a>

                </div>

                <div id="tx_cellsoutline_menu" class="tx-cellsoutline-menu tx-menu" unselectable="on"></div>

            </li>

        </ul>

        <ul class="tx-bar tx-bar-left">

            <li class="tx-list">

                <div id="tx_tablebackcolor" unselectable="on" class="tx-btn-lrbg tx-tablebackcolor" style="background-color:#9aa5ea;">

                    <a href="javascript:;" class="tx-icon2" title="테이블 배경색">테이블 배경색</a>

                </div>

                <div id="tx_tablebackcolor_menu" class="tx-tablebackcolor-menu tx-menu tx-colorpallete" unselectable="on"></div>

            </li>

        </ul>

        <ul class="tx-bar tx-bar-left">

            <li class="tx-list">

                <div id="tx_tabletemplate" unselectable="on" class="tx-btn-lrbg tx-tabletemplate">

                    <a href="javascript:;" class="tx-icon2" title="테이블 서식">테이블 서식</a>

                </div>

                <div id="tx_tabletemplate_menu" class="tx-tabletemplate-menu tx-menu tx-colorpallete" unselectable="on"></div>

            </li>

        </ul>

    </div>

</div>


    <div id="tx_canvas" class="tx-canvas">

        <div id="tx_loading" class="tx-loading">

            <!-- 이미지 파일 경로 수정 -->

            <div><img src="http://localhost/editor/daumEditor/images/icon/editor/loading2.png" width="113" height="21" align="absmiddle"/></div>

        </div>

        <div id="tx_canvas_wysiwyg_holder" class="tx-holder" style="display:block;">

            <iframe id="tx_canvas_wysiwyg" name="tx_canvas_wysiwyg" allowtransparency="true" frameborder="0"></iframe>

        </div>

        <div class="tx-source-deco">

            <div id="tx_canvas_source_holder" class="tx-holder">

                <textarea id="tx_canvas_source" rows="30" cols="30"></textarea>

            </div>

        </div>

        <div id="tx_canvas_text_holder" class="tx-holder">

            <textarea id="tx_canvas_text" rows="30" cols="30"></textarea>

        </div>

    </div>


    <div id="tx_resizer" class="tx-resize-bar">

        <div class="tx-resize-bar-bg"></div>

        <!-- 이미지 파일 경로 수정 -->

        <img id="tx_resize_holder" src="http://localhost/editor/daumEditor/images/icon/editor/skin/01/btn_drag01.gif" width="58" height="12" unselectable="on" alt=""/>

    </div>


    <!-- 다음 에디터 로고 삭제 -->

    <!--

    <div class="tx-side-bi" id="tx_side_bi">

        <div style="text-align: right;">

            <img hspace="4" height="14" width="78" align="absmiddle" src="http://localhost/editor/daumEditor/images/icon/editor/editor_bi.png" />

        </div>

    </div>

    -->


    <div id="tx_attach_div" class="tx-attach-div">

        <div id="tx_attach_txt" class="tx-attach-txt">파일 첨부</div>

            <div id="tx_attach_box" class="tx-attach-box">

                <div class="tx-attach-box-inner">

                    <div id="tx_attach_preview" class="tx-attach-preview">

                        <p></p>

                        <!-- 이미지 파일 경로 수정 -->

                        <img src="http://localhost/editor/daumEditor/images/icon/editor/pn_preview.gif" width="147" height="108" unselectable="on"/>

                    </div>

                    <div class="tx-attach-main">

                        <div id="tx_upload_progress" class="tx-upload-progress">

                            <div>0%</div>

                            <p>파일을 업로드하는 중입니다.</p>

                        </div>

                        <ul class="tx-attach-top">

                            <li id="tx_attach_delete" class="tx-attach-delete">

                                <a>전체삭제</a>

                            </li>

                            <li id="tx_attach_size" class="tx-attach-size">

                                파일: <span id="tx_attach_up_size" class="tx-attach-size-up"></span>/<span id="tx_attach_max_size"></span>

                            </li>

                            <li id="tx_attach_tools" class="tx-attach-tools"></li>

                        </ul>

                        <ul id="tx_attach_list" class="tx-attach-list"></ul>

                    </div>

                </div>

            </div>

        </div>

    </div>

   

<!-- form 태그 삭제 -->

<!-- </form> -->



<!-- 에디터 끝 -->

<script type="text/javascript">

    var config = {

          txHost : ""

        , txPath : ""

        , txService : "sample"

        , txProject : "sample"

        , initializedId : ""

        , wrapper : "tx_trex_container"

        , form : "tx_editor_form" + ""

        , txIconPath : "http://localhost/editor/daumEditor/images/icon/editor/"

        , txDecoPath : "http://localhost/editor/daumEditor/images/deco/contents/"

        , canvas: {

            exitEditor:{ }

            , styles: {

                  color : "#123456"

                , fontFamily : "굴림"

                , fontSize : "10pt"

                , backgroundColor : "#FFFFFF"

                , lineHeight : "1.5"

                , padding : "8px"

            }

            , showGuideArea: false

        }

        , events : {

            preventUnload: false

        }

        , sidebar : {

            attachbox : {

                show : true,

                confirmForDeleteAll : true

            }

        }

        , size: {

            contentWidth : 700

        }

    };

    EditorJSLoader.ready(function(Editor) {

        var editor = new Editor(config);

    });

</script>

<script type="text/javascript">

    /* saveContent( )함수 삭제 ( board.php 파일에서 호출 하게 끔 변경 함 ) */

    /*

    function saveContent() {

        Editor.save(); // 이 함수를 호출하여 글을 등록하면 된다.

    }

    */


    function validForm(editor) {

        var validator = new Trex.Validator();

        var content = editor.getContent();

        if (!validator.exists(content)) {

            alert("내용을 입력하세요");

            return false;

        }

        return true;

    }


    function setForm(editor) {

        var i = "";

        var input = "";

        var form = editor.getForm();

        var content = editor.getContent();


        var textarea = document.createElement('textarea');

        textarea.name = "content";

        textarea.value = content;

        form.createField(textarea);


        var images = editor.getAttachments('image');

        for(i = 0; i < images.length; i++) {

            if (images[i].existStage) {

                alert("attachment information - image[" + i + "] \r\n" + JSON.stringify(images[i].data));

                input = document.createElement('input');

                input.type = "hidden";

                input.name = "attach_image";

                input.value = images[i].data.imageurl;

                form.createField(input);

            }

        }


        var files = editor.getAttachments('file');

        for(i = 0; i < files.length; i++) {

            input = document.createElement('input');

            input.type = "hidden";

            input.name = "attach_file";

            input.value = files[i].data.attachurl;

            form.createField(input);

        }

        return true;

    }

</script>


<!-- 저장 버튼 삭제 ( saveContent( ) 함수는 board.php에서 호출하게 변경 ) -->

<!-- <div><button onclick="saveContent()">SAMPLE - submit contents</button></div> -->


<!-- 샘플 컨텐츠 추가 내용 삭제 -->

<!--

<textarea id="sample_contents_source" style="display:none;">

    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>

    <p style="text-align: center;">

        <img src="https://t1.daumcdn.net/cfile/cafe/2064CD374EE1ACCB0F" class="tx-daum-image" style="clear:none;float:none;"/>

    </p>

    <p>

        <a href="https://t1.daumcdn.net/cfile/cafe/207C8C1B4AA4F5DC01?download"><img src="snapshot/images/icon/p_gif_s.gif"/> editor_bi.gif</a>

    </p>

</textarea>

-->


<!-- 샘플 스크립트 삭제 -->

<!--

<script type="text/javascript">

    function loadContent() {

        var attachments = {};

        attachments['image'] = [];

        attachments['image'].push({

              "attacher": "image"

            , "data": {

                "imageurl" : "https://t1.daumcdn.net/cfile/cafe/2064CD374EE1ACCB0F"

                , "filename" : "github.gif"

                , "filesize" : 59501

                , "originalurl" : "https://t1.daumcdn.net/cfile/cafe/2064CD374EE1ACCB0F?original"

                , "thumburl" : "https://t1.daumcdn.net/cfile/cafe/2064CD374EE1ACCB0F?original"

            }

        });

        attachments['file'] = [];

        attachments['file'].push({

              "attacher" : "file"

            , "data" : {

                  "attachurl" : "https://t1.daumcdn.net/cfile/cafe/207C8C1B4AA4F5DC01?download"

                , "filemime" : "image/gif"

                , "filename" : "editor_bi.gif"

                , "filesize" : 640

            }

        });

        Editor.modify({

            "attachments": function() {

                var allattachments = [];

                for (var i in attachments) {

                    allattachments = allattachments.concat(attachments[i]);

                }

                return allattachments;

            }(),

            "content" : document.getElementById("sample_contents_source")

        });

    }

</script>

-->


<!-- 샘플 버튼 삭제 -->

<!-- <div><button onclick='loadContent()'>SAMPLE - load contents to editor</button></div> -->


</body>

</html>




12. 이제 board.php를 실행하고 다음에디터가 잘 실행되는 지 확인해 보자.

    정상적으로 출력이 된다면 제목과 내용을 작성한뒤 등록버튼을 클릭해보자.




13. 아래와같이 결과가 잘 전송되어 출려되는 모습을 확인 할 수 있다.





Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[PHP] PHP QR코드 세팅하기[PHP] PHP QR코드 세팅하기

Posted at 2018.03.15 01:02 | Posted in PHP/PHP Library




■ PHP QR Code 설치하기




 -. QR코드를 생성하기 위해서는 PHP GD가 사용 가능한 상태여야 한다.

 -. php.ini를 오픈하여 extension=php_gd2.dll 파일이 사용가능한 상태인지 확인해 보자.

사용이 가능하지 않은 상태라면 extension=php_gd2.dll주석( ; )을 제거하고 Apache 를 재시작 한뒤 진행해야 한다.




01. https://sourceforge.net/projects/phpqrcode/files/ 사이트에 접속하여 PHP QR Code 라이브 러리를 다운받는다.




02. 잠시 기다리고 있으면 phpqrcode.zip 파일을 다운받을 수 있다.




03. 다운받은 phpqrcode.zip 파일의 압축을 해제한다.










■ PHP QR Code를 사용하여 QR코드 생성하기




# 소스코드

<?php

    // 압축을 해제한 phpqrcode 폴더의 grlib.php 파일을 include한다.

    include_once "./phpqrcode/qrlib.php";

   

    // 출력 버퍼 사용 시작!!

    ob_start("colback");

   

    $codeText = "안녕하세요 반갑습니다.";

   

    // 출력 버퍼의 내용을 변수로 저장한다.

    $debugLog = ob_get_contents();


    // 출력 버퍼의 내용을 출력하지 않고, 출력 버퍼를 비우고 종료한다.

    // 출력 버퍼의 내용은 반드시 비워야 한다.

    ob_end_clean();


    QRcode::png($codeText);

?>




# 출력결과




위와같이 QR코드가 정상적으로 생성되는것을 확인할 수 있다.





Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[Ubuntu] 버츄얼 박스로 우분투 설치하기 #2 - Ubuntu 설치[Ubuntu] 버츄얼 박스로 우분투 설치하기 #2 - Ubuntu 설치

Posted at 2018.03.12 23:55 | Posted in Linux/Ubuntu



■ Virtual Box로 Ubuntu 설치하기 #2 - 우분투 설치

■ 버츄얼 박스로 우분투 설치하기 #2 - 우분투 설치하기

출처: http://wickedmagic.tistory.com/593 [사악미소의 현대마법의 공방]




01. 맨처음으로는 언어(Language)를 선택하는 창이 나온다. 한국어를 선택해주자.




02. 다음 화면에서 우분투 설치를 클릭한다.




03. 마찬가지로 한국어를 선택하고 작업을 진행한다.

 ① 한국어를 선택한다.

 ② 계속 버튼을 클릭하여 설치를 진행하자.




04. 계속버튼을 클릭해서 작업을 진행한다.

 ① Ubuntu 설치 중 업데이트 다운로드를 선택하고 작업을 진행하자.

 ② 계속 버튼을 클릭한다.




05. 우분투를 저장 장치에 설치하는 방법을 선택한다.

 ① 새로 만든 가상 디스크에 처음으로 우분투를 설치하는 것이므로,

   자동으로 설치하는 옵션인 디스크를 지우고 Ubuntu 설치를 눌러서 작업을 진행하자.

 ② 지금 설치를 클릭한다.




06. 디스크를 지우고 Ubuntu 설치를 선택했다면 아래와 같은 창이 뜬다 계속 버튼을 눌러 다음으로 진행하자.




07. 지역 설정 화면이다. 기본적으로는 Seoul(서울)로 되어 있을테니 계속을 눌러 작업을 진행하자.




08. 키보드 설정을 정하는 구간이다.

 ① 키보드 배치를 한국어로 선택한다.

 ② 자판은 한국어 - 한국어(101/104)를 선택했다.

※ 언어설정은 추후 변경이 가능하다.




09. 사용자 정보를 입력하는 구간이다.

 ① 설치할 우분투의 이름암호등의 개인정보를 항목에 맞게 입력한다.

 ② 계속 버튼을 클릭하여 설치를 진행하자.




10. 그럼 이제 우분투 설치가 진행이 된다. 설치가 다 끝날때까지 기다리자.




11. 설치가 끝나면 컴퓨터를 다시 시작한다는 알림창이 뜬다. 지금 다시 시작을 눌러 재부팅 하자.




12. 이제 컴퓨터가 재부팅 되면 아래와 같이 우분투 로그인 창이 나타나는 것을 확인 할 수 있다.

    위에서 작성한 패스워드를 입력하여 로그인해보자.




13.

 $ sudo apt-get update

 



14.

 $ sudo apt-get upgrade 



Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기