날짜를 표기하기 위해서는  date() 함수를 사용하면 간단하게 날짜를 구할 수 있다.

보통 $date = date('Y-m-d H:i:s'); 이렇게 하면 모두 출력된다.

또한 2017-04-04가 아니라,  2017.04.04로 표시하고 싶다면 쉽다.


- 대신 .으로 대체해주면 된다.


$abcd = date('Y.m.d H:i:s');

이러면,

2017.04.04 11:30:20     로 표시된다.

그리고 날짜만 필요하다면, 둘로 쪼개서 사용하면된다.


$datetime = explode(' ', $abcd);     // ' ' 공백이 구분점이 되어 배열에 저장된다.

$date = $datetime[0];                  // 첫 번째 요소가 날짜        

$time = $datetime[1];                  // 두 번째 요소가 시간



이렇게 하면 시간과 날짜를 나누어 사용할 수 있다.


ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

추가적으로 2017.07.01 11:00:00  형식말고,  - 이나 /로 하고 싶다면?

쉽다.

그냥 . 대신 - 나 /를 넣어주면 된다.


<!DOCTYPE html>
<html>
<body>

<?php
echo "Today is " . date("Y/m/d") . "<br>";
echo "Today is " . date("Y.m.d") . "<br>";
echo "Today is " . date("Y-m-d") . "<br>"
?>


</body>
</html>


결과는 


Today is 2017/06/30
Today is 2017.06.30
Today is 2017-06-30 


https://www.w3schools.com/php/php_date.asp


또한 추가적으로,


.으로 변경을 해서 사용하는데, 표준이 아니므로 날짜로 인식하지 않을 때가 있다.

- 또는 /는 날짜로 인식이 잘 되는데 . 은 잘 안된다.

이때는 날짜가 아니라 문자로 인식되는데, 이 때는 . 을 - 로 아래와 같이 변경한 뒤에 사용해야 한다.


$replace_date=str_replace(".","-",$date);


게시판 구현 시, 현재 날짜로부터 30일 이전에 등록된 게시물일 경우 new 표시를 하고자 한다면,

현재 시간과 등록된 게시물의 시간을 각각 timestamp로 변경을 한 뒤, 차이를 구한다.

이 결과는 초로 계산되므로, 


30일 동안의 초보다 작다면? 30일이 안 된 글이므로 new를 표시,

30일 동안의 초보다 크다면? 30일이 지난 글이므로 new를 표시하지 않는다. 즉, if 조건식에는


30일 동안의 초를 구한다. 


60 * 60 * 24가 하루의 총 초이므로, 30을 곱해야 30일이 되겠다.

다음과 같이 조건식을 작성하면 된다.


if(time() - strtotime($date) <= 60 * 60 * 24 * 30) { .... }

와 같이 하면 된다.

time() : (현재) 날짜 시간.
strtotime() : (매개변수로 들어간 변수의) 날짜 시간.



Posted by sungho88
,

아파치에 업로드시킨 후, 웹 브라우저로 접속을 해보았다.


그런데 mysql DB로부터 데이터를 읽어오는데 문제가 발생했다.


영어나 숫자로 된 게시물은 정상적으로 출력되는 반면에,


한글로 된 게시물은 비정상적으로 출력되었다.


즉, 한글을 인식하지 못하여 물음표로만 출력되는 것이었다.


 

뭔가 인코딩 문제라 생각이 들어 구글을 통해 열심히 찾아보았다.


지금 사용하고 있는 우분투 버전은 16.04 최신 버전인데 이것때문에 그럴까?


그것은 아니었다. mysql에 설정이 latin1이 기본적으로 설정되어 있기 때문이라는것을 알게 되었다.


이것을 어떻게 utf8로 변경할까?


이 고마운 블로그


에서 해답을 알 수 있었다.


그 전에,


많은 블로그들이 my.cnf를 고치면 된다고들 했다. (설치 경로 : /etc/mysql)


하지만, 버전이 올라가면서 이 파일에서는 그냥 includedir로 다른 파일을 불러들이는 용도로 변했다.


그래서, 두 가지을 각각 찾아가서 열어보았다.


그 결과 밑에 있는 경로 /etc/mysql/mysql.conf.d/에 있는 mysql.cnf가 중요한 파일이다.


이 파일을 열면


$ sudo nano /etc/mysql/mysql.conf.d/mysql.cnf

또는 


$nano /etc/mysql/my.conf


뭔가 샵#이 붙은 내용이 줄줄이 나오는데, 그 중에서 



[mysqld] 이 부분을 찾아서, 맨 마지막에 캐릭터셋을 지정하주면 된다.


character-set-client-handshake=FALSE 

collation-server=utf8_general_ci 

character-set-server=utf8


그 다음 재부팅~


sudo /etc/init.d/mysql restart


이렇게 복붙하면 utf8로 설정이 되어, 정상적으로 한글이 나오게 된다.

짜잔.






//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////


블로그에 적어놓은 것을 잊고, 한참을 다시 검색하였다.

이번에는 우분투14.04에서 환경을 설정하는 중인데 우분투16.04와 몇 가지 차이점이 있다.


위에서 언급한것과 같이 14.04에서는 


/etc/mysql/my.conf에서 직접 수정이 가능하다(16.04의 경우 Include의 기능만 갖는다)


다음과 같이 


[client]에도,

default-character-set=utf8  추가


[mysqld]에는 이렇게, 여러개   추가

character-set-server=utf8

collation-server=utf8_general_ci

init_connect=SET collation_connection=utf8_general_ci

init_connect=SET NAMES utf8


[mysqldump]에도,

default-character-set = utf8  추가


[mysql]에도, 

default-character-set=utf8  추가


해주면 mysql 설정이 모두 utf-8로 변경이 되었다는 것을 mysql> status를 통해 볼 수 있다.

하지만, 사이트는 여전히... 물음표다. Mysql은 모두 변경되었는데...무엇이 문제일까?

음... 


한참을 검색하다가 많이 눈에 익은 사이트에 들어와서 정답을 알게 되었다.

그 사이트가 바로 내 블로그다ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ


내가 적어두고 다른데가서 삽질하다니.... 삽질 안 하려고 적어두고는 다른데가서 삽질을...


내가 입력한것과 이전에 작성해둔 코드와 비교하니 한 가지만 없었다.

바로바로바로바로


character-set-client-handshake=FALSE 


이것!!!!!!!!!!!!

이것을 


[mysqld] 하단에 넣어주면~?

???????????

?????????????????

????????????????????????


물음표를 좋아하던 사이트가 !

한글로 변환되어 보여지는것을 알 수있다.


정리.

[mysqld]에는 총 5개를 추가해준다.


character-set-client-handshake=FALSE

character-set-server=utf8

collation-server=utf8_general_ci

init_connect=SET collation_connection=utf8_general_ci

init_connect=SET NAMES utf8


Posted by sungho88
,

웹페이지를 만드는 도중에, 파일질라를 통해서 Apache2에 PHP파일을 올렸다.


하지만, Ubuntu에 설치된 PHP 버전과 로컬에서 개발한 PHP 버전이 다를 경우에 문제가 발생한다.


이클립스같은 IDE 툴이 아니기떄문에 어떠한 에러 문구나 틀렸다고 출력해주지 않는다.


단지 접속했을떄 빈 화면만 나올뿐이다.


접속은 된 상태지만 뭔가 코드가 잘못되어 아무런 화면이 나오지 않을 경우 어디가 문제인지 확인하고 싶다면 아파치 내에 error log파일을 열어보면 된다.


접속 도중 에러가 발생하면 이곳에 로그로 쌓이기 떄문이다.


경로는 /var/log/apache2/error.log 이다.


$ sudo nano /var/log/apache2/error.log 


이런식으로 입력하면 열린다.


몇 천줄씩 나오기떄문에 


Ctrl + _ 


명령어를 통해 가장 아래줄로 내려가서 에러를 확인할 수 있다.



Posted by sungho88
,

벌써 몇 번째 재생성인지 모르겠다.

인스턴스 만들고 접속하는데 하루종일 걸릴때가 있었는데 하도 많이 만들어서

설치방법 블로그 등을 참고하지 않고도 만들 수 있게 되었다.


어쩃거나 방금전에 


puttygen을 이용하여 putty로 접속하는데 필요한 ppk파일을 만드는 방법



을 적었다. 


이번에는 만들어진 ppk를 갖고 AWS에서 만든 원격 인스턴스로 접속하는 방법을 작성하려한다.


1. 일단 putty를 연다.


2. Host Name(or IP Address)에다가 다음과 같이 작성한다.


 

ubuntu@ec2-xxxxxxxxxxxxxxxxxxx


앞에는 우분투 운영체제이기떄문에 기본값으로 ubuntu로 했고, 뒤에는 본인의 주소를 쓰면된다.

그게 뭐냐면 AWS에 로그인해서 생성된 인스턴스를 눌러보면 하단에 자세히 나온다.

다음과 같이...

위 - Public DNS나

아래 Public IP나 둘 중 아무거나 써도 된다.


3. 그다음 옆에 Port의 경우 SSH이므로 22로 하고


4. 밑에 Connection type의 경우 SSH로 둔다


위 순서는 어떤 SSH 접속에서나 작성하는 일반적인 순서였지만, 특이한 것은 다음과 같다



5. 왼쪽 카테고리에서 


Connection - SSH - Auth를 클릭 


Browse... 를 선택한 후, 변환한 ppk파일을 Open해주어야한다.


그러면 세팅 끝


다시 Session 카테고리로 돌아와서 Open을 누러면 접속이 될 것이다.

만약 이 정보를 다시 입력하지 않고 싶다면 Save Session에 원하느 이름을 입력한 뒤 Save를 누른다.

그러면 정보가 저장되어 다시 위와같은 순서를 거치지 않고 로그인할 수 있다.


접속 전 무슨 경고창이 뜨는데, 그냥 무시하고 OK눌러도 아무 문제없으므로 설명은 패스...




이상으로 putty를 통해 AWS내 EC2 인스턴스로 접속하는 방법에 대해 마치도록 하겠습니다.

Posted by sungho88
,

AWS를 생성했으면, putty등을 통해 SSH로 접속해야한다.

맥에서는 터미널을 통해 pem파일로 접근이 가능하지만, 윈도우의 경우에는 불가능하다.

참고로 pem파일은 AWS을 통해 인스턴스를 생성할 때 다운로드받을 수 있다.


그래서 pem파일을 ppk파일로 변경해주는 쓸데없는 작업을 해주어야한다.

이를 위해서 Puttygen이라는 툴을 받아준다.(puttygen 다운로드)


별도의 설치가 필요없이 바로 실행파일이 열리며 아래와 같이 나온다.

그러면 


첫번째.  Load를 통해 pem파일을 불러온다.

불러올때는 ppk파일만 찾으려하므로 모든 파일을 놓아야 모든 파일이 보일 것이다.



성공적으로 불러왔다면 아래 이미지와 같이 성공적으로 임포트했다고 창이 뜬다.

확인을 눌러 닫는다.


아래에서 SSH-1로 체크를 한 뒤,

Save private key를 누르면 ppk를 저장할 위치와 저장할 이름을 입력하는 창이 뜬다.

가급적이면 pem파일과 동일하게 작성을 한 뒤, 저장을 하게 되면 ppk파일이 생성된다.

참고로 뭐라뭐라 영어로 물어보는데, 비밀번호 설정을 안 할 것인지에 대한것이다.

그냥 OK누르면 진행된다.







이상으로 puttygen을 통해 pem파일을 ppk로 변환하는 과정을 정리해보았다.


Posted by sungho88
,

홈페이지를 리뉴얼하면서 게시판에 있는 게시물들을 다른 사이트로 옮기고 싶었다.

어떻게 해야할지 막막했지만, 엑셀 파일을 이용하면 간편하게 할 수 있다는 것을 알게되었다.

찾아본 결과 파일명.csv 형식의 파일로 만들면 집어넣을 수 있다고 한다. 

SCV도 아니고 CSV는 무슨 약자일까?


CSV = Comma Separated values

즉, 몇 가지 데이터 필드를 쉼표로 구분한 텍스트 데이터 및 텍스트 파일이다.


1. 일단 엑셀을 실행시키고, 데이터베이스에 삽입할 데이터를 작성한다.

(DB에 생성된 컬럼들을 맞춰주자)


2. 작성한 뒤, 다른이름으로 저장 -> 파일형식 -> CSV(쉼표로 분리)를 선택한 후 저장한다.


mysql에 접속한 뒤, DB를 선택하고 다음과 같은 문장을 써서 입력했다고 한다.


LOAD DATA INFILE '파일위치/파일명.csv' INTO TABLE 테이블명 FIELDS TERMINATED BY ',';


이렇게하면 다른사람들은 되는데 에러가 발생한다.


--secure-file-priv 옵션이 무엇인가? 


으... 오전 내내 이것때문에 진행을 못해서 점심먹고 오후부터는 다른 방법을 쓰기로 했다.


바로 phpmyadmin.


여기서 import를 사용해서 .csv파일을 넣을 수 있다고 한다.

해봤다.


이런!! 또다시 같은 에러가 발생한다.

검색하다보니 LOCAL을 써줘야 잘 작동한다고 한다.


1. 업로드 파일에서 -> 올리고자 하는 csv파일을 선택하고,

2. 파일 문자셋은 무난한 -> UTF-8

3. 형식은 -> CSV가 아닌 CSV using LOAD DATA

4. 열(컬럼) 구분자 -> ,

5. 열 감싸기 -> "

6. LOCAL 키워드 사용 에 체크!


이렇게 한 뒤 실행을 눌렀다. 그랬더니. 


에러 메세지가 바뀌었다. 오 뭔가 값을 읽는 느낌이 생겼다. 좋다.

UTF-8 설정했지만, 엑셀쪽이 UTF-8이 아닐 경우 이런 문제가 발생한다.

엑셀에서 문자 인코딩을 변경해주거나 아니면 txt 파일로 편집을 누른뒤에 메모장에서 인코딩을 바꿔도 된다.

어떻게하던지 인코딩만 바꿔주면된다.

자. 다시 도전 



오호라. 해결~ 빨간색보다 훨씬 기분이 좋은 녹색~

Posted by sungho88
,

$bNo = $_GET['no'];

$tables = $_GET['table'];

$sql = 'select * from comment_free where b_no=' . $bNo;


처음에는 comment_free 테이블에 존재하는 데이터 열 중 b_no컬럼이 $bNo인것만 조회하기를 원했기때문에 위와 같이 작성했다.

하지만, 한가지 조건이 더 생기게 되어 WHERE조건 중 AND를 사용하게 되었다.

그런데, 분명 값을 잘 갖고 나오는데 result가 아무것도 나오지 않아 리스트가 빈 화면이 계속 나왔다.

계속 안 되어서 mysql을 터미널로 접속을 해 SQL문을 직접 입력해보기로 하였다.

먼저, 기존 코드를 작성해보니 조건에 따라 잘 조회되었다.

다음으로 안되는 코드를 갖다 복붙해보니...에러가 발생했다. 정말 안 되네? 왜 안되지? 하다가 

PHPMYADMIN을 오랜만에 열어 구조를 살펴보다가 알게되었다.

$bNo의 경우 데이터 타입이 INT이기 때문에 그냥 and b_no=' . $bNo;와 같이 호출을 하면 되지만,

$tables의 경우 데이터 타입이 TEXT이기 때문에 쌍따옴표(")를 붙여주어야한다.

따라서,


$sql = 'select * from comment_free where b_name=' . $tables . ' and b_no=' . $bNo;

이렇게 하면 안되고,


$sql = 'select * from comment_free where b_name="' . $tables . '" and b_no=' . $bNo;

이렇게 ' ' 안에 문자열이 끝나고 "를 붙여주어 이 $tables이 텍스트임을 알려주어야한다.



Posted by sungho88
,

자바에서는 +를 사용하면 되었는데,

PHP에서 변수를 사용하기 위해서는 마침표(.)를 사용한다.



$str01 = "Hello";

$str02 = "Jang";

 

$str03 = $str01 . " " . $str02;

echo  "str03=" . $str03;


좀 헷갈린다. 하지만 쉽게 말하면 $가 붙은 변수를 문자열에 연결할때는 마침표(.)를 써주면된다.

주의할 점은 뒤에 올 변수가 없는데 .을 붙이면 에러가 발생한다는 것이다.


SQL문을 작성할 때


$sql = 'select * cnt from ' .$tables;


로 쓰면 

테이블명이 달라진다고 해도 조회할 수 있다.




결론

- PHP에서는 문자열과 변수를 조합? 합칠때 +가 아니라 마침표(.)를 사용한다는 것.

- 경험상 쌍따옴표나 작은따옴표 차이는 없다는 것.

- 코드가 길어지면 + 에 비해 매우 가독성이 떨어진다는 것.


그럼 이만~

Posted by sungho88
,

date()함수를 이용했는데,


현재시간과 맞지 않았다.


지금 현재시간은 저녁 20시인데, 출력된 시간은 02시였다.


그래서, 한국시간대를 설정해줘야 하는가해서 검색해본 결과


PHP5 버전 이상에서 사용되는 문법이 존재했다.


  date_default_timezone_set("Asia/Seoul");

  echo date("Y-m-d H:i:s"); // (24시간제)


이렇게 하면 정상적으로 한국 현재 시간이 출려되게 된다.

Posted by sungho88
,

http://huddling.tistory.com/26

http://snowple.tistory.com/14



1. 엑셀파일 열고 내용 작성 후 → 다른이름으로 저장하기 → '.csv' 형식으로 저장함.

2. mysql에 접속하여 DB 생성 후, 그 안에 사용할 테이블과 함께 열이름과 데이터 타입을 생성함.

3. mysql에서 아래와 같은 명령어를 입력하면 엑셀 파일의 데이터가 저장됨.


LOAD DATA INFILE  파일경로/파일명.csv INTO TABLE 테이블 이름FIELDS TERMINATED BY ','

주의할점 : 엑셀파일에서 각 열의 이름을 적지 않으며, 또한 엑셀파일의 데이터 타입에 맞게 mysql에서 데이터 타입을 정함.



mysql> LOAD DATA INFILE `c:/test.csv` INTO TABLE lotto FIELDS TERMINATED BY `,`;


또는 


mysql> LOAD LOCAL DATA INFILE `c:/test.csv` INTO TABLE lotto FIELDS TERMINATED BY `,`;



Posted by sungho88
,