윈도 환경에서 편리해서 APMSetup을 이용해서 php를 짜고 있다. 이때 Apache와 MySql5가 같이 설치되어 여간 편리한 게 아니다.
그런데 쓰다 보니 default로 깔리는 characterset 문제가 있다.
이를 조정하기 위하여 APMSetup의 MySql server 세팅을 이용할라 치면 반영이 안된다.
APMSetup 홈페이지에서 이걸 해결하는 방법을 알았다.
원래 C:/APM_Setup/Server/MySQL5 디렉토리 아래 my.ini 파일로 MySql 설정을 하는데
APMSetup에서 표시하는 my.ini 파일의 경로가 C:/APM_Setup/Server/MySQL5/data에 있어서 그렇다.
데스크탑 태스크바에서 실컷 설정해놓고 나면 반영이 안된다. 해결은 다음과 같이 한다.
1. 일단 태스크바에서 APMSetup - 서버환경설정 - MYSQL 설정 탭을 이용하여 원하는 대로 설정한다.
2. C:/APM_Setup/Server/MySQL5/data/my.ini 파일을 C:/APM_Setup/Server/MySQL5로 복사한다.
3. MySQL을 다시 시작한다. 그러면 반영된다.
Showing posts with label 03 PHP. Show all posts
Showing posts with label 03 PHP. Show all posts
2016-06-15
2016-03-08
php SESSION 변수의 조작 : javascript로 보내기, 없애기
여전한 삽질 중에 알아낸 사실들을 정리하고자 한다.
1. 먼저 php 변수를 javascript로 보낼 때 SESSION을 이용하는 것은 잘 되는데,
문제는 한글 코딩이 깨져서 가거나 (json_encode의 경우) javascript에서 받는 방법의 지정이 다를 때다.
단순한 스트링을 php에서 javascript로 보낼 때, 가장 간단하게 따옴표를 붙여서 보낸다.
방법은 아래와 같다.
$_SESSION['s_query'] = "\"".$s_query."\"";
2. SESSION을 초기화하지 않고 일정 SESSION 변수만 없애는 것은 unset()을 이용하란다.
if (!isset($_SESSION['s_query'])) {
unset($_SESSION['s_query']);
}
사실 unset()을 사용하는 것이 이상한 것은 아니지만, SESSION 변수 하나하나를 처리하는 것보다는 SESSION 자체를 들었다 놓았다 하는 편이 더 안정적이지 않을까 싶은 생각이 드는데... 왜냐하면 이렇게 개별적으로 SESSION 변수를 다루다 보면 복잡한 프로그래밍에서는 오히려 안정된 동작을 해칠 수도 있다는 생각에서다.
1. 먼저 php 변수를 javascript로 보낼 때 SESSION을 이용하는 것은 잘 되는데,
문제는 한글 코딩이 깨져서 가거나 (json_encode의 경우) javascript에서 받는 방법의 지정이 다를 때다.
단순한 스트링을 php에서 javascript로 보낼 때, 가장 간단하게 따옴표를 붙여서 보낸다.
방법은 아래와 같다.
$_SESSION['s_query'] = "\"".$s_query."\"";
2. SESSION을 초기화하지 않고 일정 SESSION 변수만 없애는 것은 unset()을 이용하란다.
if (!isset($_SESSION['s_query'])) {
unset($_SESSION['s_query']);
}
사실 unset()을 사용하는 것이 이상한 것은 아니지만, SESSION 변수 하나하나를 처리하는 것보다는 SESSION 자체를 들었다 놓았다 하는 편이 더 안정적이지 않을까 싶은 생각이 드는데... 왜냐하면 이렇게 개별적으로 SESSION 변수를 다루다 보면 복잡한 프로그래밍에서는 오히려 안정된 동작을 해칠 수도 있다는 생각에서다.
2016-01-22
mysqli_connect 변수 해설
피곤한 상태라 짧게 남긴다.
퍼포먼스 향상을 위해 php에서 사용하는 mysql 명령어들이 mysqli로 변경되었는데, 이때 파라미터의 위치가 변경된 부분이 눈에 띈다.
예를 들어 mysql_select_db($dbname, $connectionname) 이 mysqli_select_db($connectionname, $dbname)으로 위치가 바뀐 것 등이다.
그런데 mysqli_connect의 경우 내가 전혀 모르던 것이 있어서 남긴다.
mysqli_connect($IP, $username, $password, $dbname, $PORT) 이다!
포트를 IP에 함께 써 놓았더니 접속이 되질 않다가 형식에 맞추어 넣으니 잘 된다...
또 나만 몰랐나...
참조 : http://blog.naver.com/PostView.nhn?blogId=diceworld&logNo=220292090236
퍼포먼스 향상을 위해 php에서 사용하는 mysql 명령어들이 mysqli로 변경되었는데, 이때 파라미터의 위치가 변경된 부분이 눈에 띈다.
예를 들어 mysql_select_db($dbname, $connectionname) 이 mysqli_select_db($connectionname, $dbname)으로 위치가 바뀐 것 등이다.
그런데 mysqli_connect의 경우 내가 전혀 모르던 것이 있어서 남긴다.
mysqli_connect($IP, $username, $password, $dbname, $PORT) 이다!
포트를 IP에 함께 써 놓았더니 접속이 되질 않다가 형식에 맞추어 넣으니 잘 된다...
또 나만 몰랐나...
참조 : http://blog.naver.com/PostView.nhn?blogId=diceworld&logNo=220292090236
2016-01-20
php -> javascript 로의 데이터 교환 - array 형태
필요한 것은 세부적인 것인데, 이러한 글들은 언제나 찾아보기 어렵다.
이번에는 javascript로 직접 받는 데이터가 아니라, MySQL 등 로컬에 저장된 데이터를 javascript로 받아서 처리하는 부분이 문제가 되었다.
이것저것 시도해본 결과 (보안 문제를 제외하고) 다음과 같이 처리하니 잘 된다.
1. 먼저 php로 MySQL 데이터를 불러온 이후 array로 만든다.
2. 이를 json_encode를 이용해서 JSON 형태로 만든 후 SESSION 변수로 올린다.
3. javascript에서 php SESSION 변수를 받아서 그대로 처리한다^^
중요한 것은 이때 javascript에서 처리하기를 array도 되고 JSON으로도 인식한다는 점이다. php에서 javascript로 온 array를 일부러 JSON으로 만들기 위해 JSON.parse나 eval을 쓰지 않아도 된다는 것인데, 이로 미루어보아 javascript의 array와 JSON 객체는 같은 자료형임을 알 수 있다.
어떻게 보면 당연한 것이, json_encode를 이용하였으므로 JSON으로 변형된 것으로 보아야 한다. 많은 참조자료들에서 json_encode에 UTF-8 encoding 문제가 있다고 하는데, 일단 한글과 영어 처리에는 문제 없음을 확인했다.
#####################
전체처리.php
include "./보내기.php";
include "./받기.php";
#####################
보내기.php
...
$_SESSION['data'] = json_encode($data_array);
#####################
받기.php
<script>
...
var data = <?=$_SESSION['data'] ?>;
// 이후 data[index]의 형태로 접근하면 된다.
// 또한 data[index].property 형태로 JSON 접근도 허용한다.
...
</script>
#####################
또 나만 몰랐나 싶다...
이번에는 javascript로 직접 받는 데이터가 아니라, MySQL 등 로컬에 저장된 데이터를 javascript로 받아서 처리하는 부분이 문제가 되었다.
이것저것 시도해본 결과 (보안 문제를 제외하고) 다음과 같이 처리하니 잘 된다.
1. 먼저 php로 MySQL 데이터를 불러온 이후 array로 만든다.
2. 이를 json_encode를 이용해서 JSON 형태로 만든 후 SESSION 변수로 올린다.
3. javascript에서 php SESSION 변수를 받아서 그대로 처리한다^^
중요한 것은 이때 javascript에서 처리하기를 array도 되고 JSON으로도 인식한다는 점이다. php에서 javascript로 온 array를 일부러 JSON으로 만들기 위해 JSON.parse나 eval을 쓰지 않아도 된다는 것인데, 이로 미루어보아 javascript의 array와 JSON 객체는 같은 자료형임을 알 수 있다.
어떻게 보면 당연한 것이, json_encode를 이용하였으므로 JSON으로 변형된 것으로 보아야 한다. 많은 참조자료들에서 json_encode에 UTF-8 encoding 문제가 있다고 하는데, 일단 한글과 영어 처리에는 문제 없음을 확인했다.
#####################
전체처리.php
include "./보내기.php";
include "./받기.php";
#####################
보내기.php
...
$_SESSION['data'] = json_encode($data_array);
#####################
받기.php
<script>
...
var data = <?=$_SESSION['data'] ?>;
// 이후 data[index]의 형태로 접근하면 된다.
// 또한 data[index].property 형태로 JSON 접근도 허용한다.
...
</script>
#####################
또 나만 몰랐나 싶다...
2013-03-13
\n의 처리: nl2br
지금 하고 있는 것이 주로 문자열을 다루다 보니, 이걸 적당한 형태로 읽어들이고 (parsing) 쪼개고 잇고 하는 작업을 많이 하게 된다. 특히 웹 문서를 읽어온다던가 하면 여러가지 문제가 생기는데 예를 들면 외국어 문제 (encoding), 특수기호 처리, HTML tag 처리 등이다.
php는 이런 작업들을 처리하기 위한 함수가 마련되어 있어서 잘 처리하면서 살아왔다. Encoding이야 지정하면 되고 HTML tag들은 strip_tags() 함수를 사용하면 잘 처리되는데, 이 특수기호가 문제다. 말이 되게 만들어놓고자 하니 stopwords 정의를 통해 웬만큼 처리가 되는데 최근까지 가장 힘들었다고 느꼈던 것이 개행문자(\n)의 처리다.
Xml 형태로 저장한 문자열을 string으로 읽어들이면 개행문자가 분명이 존재하는데 stopwords 지정 필터링이 되질 않는다. 당연한 듯한 이 문제를 최근에서야 풀게 되었는데 좀 돌아가는 방법이다. 일단 읽이들인 string에서 개행문자를 HTML tag인<br />로 바꾸어주는 nl2br() 함수를 이용하고, 그 다음에 strip_tags() 함수를 이용해서 제거해주는 거다.
너무 무식을 티내나, 나만 모르나... 아무튼 사후 참고를 위해.
php는 이런 작업들을 처리하기 위한 함수가 마련되어 있어서 잘 처리하면서 살아왔다. Encoding이야 지정하면 되고 HTML tag들은 strip_tags() 함수를 사용하면 잘 처리되는데, 이 특수기호가 문제다. 말이 되게 만들어놓고자 하니 stopwords 정의를 통해 웬만큼 처리가 되는데 최근까지 가장 힘들었다고 느꼈던 것이 개행문자(\n)의 처리다.
Xml 형태로 저장한 문자열을 string으로 읽어들이면 개행문자가 분명이 존재하는데 stopwords 지정 필터링이 되질 않는다. 당연한 듯한 이 문제를 최근에서야 풀게 되었는데 좀 돌아가는 방법이다. 일단 읽이들인 string에서 개행문자를 HTML tag인<br />로 바꾸어주는 nl2br() 함수를 이용하고, 그 다음에 strip_tags() 함수를 이용해서 제거해주는 거다.
너무 무식을 티내나, 나만 모르나... 아무튼 사후 참고를 위해.
preg_split()과 PCRE Patterns
참고 페이지: http://apmusers.com/tt/dbckdghk/136
php PCRE patterns: http://www.php.net/manual/en/regexp.reference.delimiters.php
문자열을 배열로 나눌 때 쓰던 split 함수의 편리함은 나누는 기준 (needle) 이 되는 문자를 다수 정의 (pattern) 할 수 있다는 점이다.
$temp = "This is good, but I cannot see that. What is it?";
$temparray = split(",.?", $temp);
// 결과는 다음과 같다.
// $temparray[0] = "This is good"
// $temparray[1] = " but I cannot see that"
// $temparray[2] = " What is it"
문제는 이 함수가 php 5.2 이상에서는 쓰지 않는 것으로 (deprecated) 바뀌었다. 이 함수를 대체하기엔 explode 함수는 조금 부족한 게 사실인 것이 needle을 오직 하나의 문자열 (delimiter) 로만 정의할 수 있다는 점이다.
물론 대안으로 preg_split() 함수가 제시되고 있다. 사용법은 거의 동일한데 조금 다른 것은 needle pattern을 정규식 (regular expression)으로 정의해야 한다는 점이다. 일단 위 예를 이 함수를 이용해서 바꿔보자.
$temp = "This is good, but I cannot see that. What is it?";
$temparray = preg_split("/[,\.\?]/", $temp, -1, PREG_SPLIT_NO_EMPTY);
// PREG_SPLIT_NO_EMPTY 옵션은 빈 항목을 제거한다.
// 결과는 다음과 같다.
// $temparray[0] = "This is good"
// $temparray[1] = " but I cannot see that"
// $temparray[2] = " What is it"
별로 달라진 점이 없어보이는데, preg_split 함수 안에 있는 pattern 이 정규식으로 표현되어 있다는 것 (/ /로 둘러싸여진 부분) 이다. 그럼 이 정규식은 또 뭔가? 찾아보니 PCRE (Perl Compatible Regular Expressions) patterns 이란다. 어렵다기보다는 생각을 표현하는 방법이 다르니 다시 공부를 해야 할 입장이다.
php PCRE patterns: http://www.php.net/manual/en/regexp.reference.delimiters.php
문자열을 배열로 나눌 때 쓰던 split 함수의 편리함은 나누는 기준 (needle) 이 되는 문자를 다수 정의 (pattern) 할 수 있다는 점이다.
$temp = "This is good, but I cannot see that. What is it?";
$temparray = split(",.?", $temp);
// 결과는 다음과 같다.
// $temparray[0] = "This is good"
// $temparray[1] = " but I cannot see that"
// $temparray[2] = " What is it"
문제는 이 함수가 php 5.2 이상에서는 쓰지 않는 것으로 (deprecated) 바뀌었다. 이 함수를 대체하기엔 explode 함수는 조금 부족한 게 사실인 것이 needle을 오직 하나의 문자열 (delimiter) 로만 정의할 수 있다는 점이다.
물론 대안으로 preg_split() 함수가 제시되고 있다. 사용법은 거의 동일한데 조금 다른 것은 needle pattern을 정규식 (regular expression)으로 정의해야 한다는 점이다. 일단 위 예를 이 함수를 이용해서 바꿔보자.
$temp = "This is good, but I cannot see that. What is it?";
$temparray = preg_split("/[,\.\?]/", $temp, -1, PREG_SPLIT_NO_EMPTY);
// PREG_SPLIT_NO_EMPTY 옵션은 빈 항목을 제거한다.
// 결과는 다음과 같다.
// $temparray[0] = "This is good"
// $temparray[1] = " but I cannot see that"
// $temparray[2] = " What is it"
별로 달라진 점이 없어보이는데, preg_split 함수 안에 있는 pattern 이 정규식으로 표현되어 있다는 것 (/ /로 둘러싸여진 부분) 이다. 그럼 이 정규식은 또 뭔가? 찾아보니 PCRE (Perl Compatible Regular Expressions) patterns 이란다. 어렵다기보다는 생각을 표현하는 방법이 다르니 다시 공부를 해야 할 입장이다.
2012-11-07
php strpos의 이용 (Usage of strpos in php)
여태껏 별로 인식하지 않고 사용했던 부분인데, 오늘 새삼 발견해서 기억하고자 올려놓는다.
int strpos ( string
strpos, stripos, strrpos 등 string에서 원하는 needle의 위치를 발견하는 함수는 꽤 많이 사용했었는데, 이게 정확히 그 needle이 존재하는가 하는 부분을 명확하게 해야 하는 경우가 있다. 반환은 int 형태로 되고 없을 경우 FALSE를 반환하는데, 이걸 개념적으로 명확하게 로직을 짜야 잘 작동하는 것 같다. 물론 부분매치는 지원하지 않는데, 정확하게 작동하게 하려면 다음과 같다.
예를 들어 $text라는 string에서 "strangers" 라는 needle을 찾아서 있을 경우 뭔가 하고 싶다면 다음과 같이 할 수 있는데, 이건 정확히 작동하지 않는 경우가 생긴다.
if (strpos($text, "strangers")) {
... (process)
} // sometimes does not work properly
사실 int 아니면 FALSE를 반환하므로, FALSE만 아니라면 그냥 써도 될 것 같은데 이게 잘 안되는 경우를 봤다. 그렇다고 다음처럼 해도 때에 따라 잘 안된다.
if (strpos($text, "strangers") >= 0) {
... (작업)
} // sometimes does not work properly
아직 이유는 잘 모르겠다. 결국 논리적으로 명확하게 적어야만 원하는 대로 돌아가는데, 다음과 같다.
if (strpos($text, "strangers") !== FALSE) {
.... (작업)
} // works well
int strpos ( string
$haystack , mixed $needle [, int $offset = 0 ] )strpos, stripos, strrpos 등 string에서 원하는 needle의 위치를 발견하는 함수는 꽤 많이 사용했었는데, 이게 정확히 그 needle이 존재하는가 하는 부분을 명확하게 해야 하는 경우가 있다. 반환은 int 형태로 되고 없을 경우 FALSE를 반환하는데, 이걸 개념적으로 명확하게 로직을 짜야 잘 작동하는 것 같다. 물론 부분매치는 지원하지 않는데, 정확하게 작동하게 하려면 다음과 같다.
예를 들어 $text라는 string에서 "strangers" 라는 needle을 찾아서 있을 경우 뭔가 하고 싶다면 다음과 같이 할 수 있는데, 이건 정확히 작동하지 않는 경우가 생긴다.
if (strpos($text, "strangers")) {
... (process)
} // sometimes does not work properly
사실 int 아니면 FALSE를 반환하므로, FALSE만 아니라면 그냥 써도 될 것 같은데 이게 잘 안되는 경우를 봤다. 그렇다고 다음처럼 해도 때에 따라 잘 안된다.
if (strpos($text, "strangers") >= 0) {
... (작업)
} // sometimes does not work properly
아직 이유는 잘 모르겠다. 결국 논리적으로 명확하게 적어야만 원하는 대로 돌아가는데, 다음과 같다.
if (strpos($text, "strangers") !== FALSE) {
.... (작업)
} // works well
2012-08-20
https: 사용시 curl 설정 [curl setting in php when using secured http call]
헤메는 가운데서도 무언가 찾는다는 것은 의미있는 것이다. 얼마전 유료화된 Bing Search API를 사용해보려고 별짓을 다 했는데, 이제서야 답을 찾았다. 문제는 문법은 맞는데 https://로 GET 방식을 사용하다 보니 php의 보안설정이 문제가 된 것이었다.
It is meaningful when finding answers though not perfect. I was wandering to find the way to use Bing Search API which was changed as paid service using Azure server, then find way. The problem is security setting of php server when using https:// GET call.
해결방법은 http://rainmaker0303.tistory.com/83에 아주 잘 나와있다.
You can refer the solution in http://rainmaker0303.tistory.com/83.
1. 일단 APMSetup 에서 curl을 사용할 수 있게 세팅을 해 줘야 한다.
- 디렉토리 APM_Setup\Server\PHP5\ext\php_curl.dll 파일이 있는지 확인한다.
- 파일이 있다면 APM_Setup\php.ini 설정파일을 열고
- ;extension=php_curl.dll의 ;을 지워 설정에 포함시킨다.
- Apache 서버를 다시 실행하면 사용할 수 있는 세팅이 완료된다.
1. Change curl setting in php server (case when using APMSetup)
- Confirm c:\APM_Setup\Server\PHP5\ext\php_curl.dll.
- If it exists, open c:\APM_Setup\php.ini.
- Find ";extension=php_curl.dll" line then erase ; to activate this function.
- Save file and restart apache server
2. php의 file_get_contents 를 대체할 함수를 설정한다.
2. Make function to use curl in 'file_get_contents' function.
function http($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close ($ch);
return $response;
}
일단 이러고 나면 자료가 JSON 형태로 잘 받아진다. 아직 인코딩 문제가 남아있지만... (한글이나 일본어는 깨지는 듯. 따라서 JSON 데이터 전체를 읽지 못하는 문제가 있다.) 게다가 Bing Azure API는 key를 GET 방식에 숨겨서 보내기 때문에 아직도 완전한 건 아니다.
Now the response of secured call can be received as JSON format, though there is encoding problem... (Korean and Japanese are broken then the system cannot read JSON data.) Moreover, Bing Azure API has another implicit key in GET call, so need to think more^^;;
It is meaningful when finding answers though not perfect. I was wandering to find the way to use Bing Search API which was changed as paid service using Azure server, then find way. The problem is security setting of php server when using https:// GET call.
해결방법은 http://rainmaker0303.tistory.com/83에 아주 잘 나와있다.
You can refer the solution in http://rainmaker0303.tistory.com/83.
1. 일단 APMSetup 에서 curl을 사용할 수 있게 세팅을 해 줘야 한다.
- 디렉토리 APM_Setup\Server\PHP5\ext\php_curl.dll 파일이 있는지 확인한다.
- 파일이 있다면 APM_Setup\php.ini 설정파일을 열고
- ;extension=php_curl.dll의 ;을 지워 설정에 포함시킨다.
- Apache 서버를 다시 실행하면 사용할 수 있는 세팅이 완료된다.
1. Change curl setting in php server (case when using APMSetup)
- Confirm c:\APM_Setup\Server\PHP5\ext\php_curl.dll.
- If it exists, open c:\APM_Setup\php.ini.
- Find ";extension=php_curl.dll" line then erase ; to activate this function.
- Save file and restart apache server
2. php의 file_get_contents 를 대체할 함수를 설정한다.
2. Make function to use curl in 'file_get_contents' function.
function http($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close ($ch);
return $response;
}
일단 이러고 나면 자료가 JSON 형태로 잘 받아진다. 아직 인코딩 문제가 남아있지만... (한글이나 일본어는 깨지는 듯. 따라서 JSON 데이터 전체를 읽지 못하는 문제가 있다.) 게다가 Bing Azure API는 key를 GET 방식에 숨겨서 보내기 때문에 아직도 완전한 건 아니다.
Now the response of secured call can be received as JSON format, though there is encoding problem... (Korean and Japanese are broken then the system cannot read JSON data.) Moreover, Bing Azure API has another implicit key in GET call, so need to think more^^;;
2012-06-06
APMSETUP 이용시 MySql command line 접속방법
너무 간단한 이야기라서 별로 효용은 없을 듯도 하지만, 내 기억력의 한계를 극복하는 길은 오직 기록하는 수밖에 없다. 이번 수업에 사용될 command line에서 SQL 입력을 위한 MySql 접속 문제는 어떻게 보면 매우 일반적인 문제가 될 수 있겠다.
일단은 MySql이 설치되어 있다고 가정하면, path가 잡혀 있을 것이기 때문에 어디서든 mysql.exe 명령을 통해서 command line 스타일의 MySql 억세스가 가능한 것으로 이론적으로는 이해할 수 있겠다. 그렇다면 단순히
C:>mysql
이라고 입력하면 접속이 그냥 되어야 하는데...
이게 말처럼 되지를 않고 (내가 설치한 php용 환경인 APMSETUP의 경우) "ERROR 1045 (28000) : Access denied for user 'ODBC'@'localhost' (using password: NO)" 라는 에러 메시지가 뜨게 된다. 간단히 설명을 찾아보니 계정 권한 문제니 설정된 사용자 및 암호를 이용해서 접속을 해야 한다는 건데, 내가 뭐 세팅한 것도 없고 뭘 어떻게 고쳐야 할지 모르겠다. MySql을 지우고 다시 깔으라는 이야기까지 나오는데 이건 빈대 잡겠다고 집 태우는 격이고...
다시 좀 찾다가 http://blog.naver.com/PostView.nhn?blogId=hmoai&logNo=50033002305&redirect=Dlog&widgetTypeCall=true에서 힌트를 얻었다. APMSETUP으로 MySql을 설치한 경우 아이디 root의 암호 설정이 apmsetup이라는... 따라서 아래와 같이 입력을 하면 되겠다.
C:>mysql -u root -papmsetup
직관적으로 이해하기에 -u는 사용자(user) 옵션이고 -p는 암호(password) 옵션으로 보이는데, 웃기게도 사용자는 띄어쓰기를 해야 하지만 암호는 띄어쓰기를 하면 안된다. 저렇게 입력을 하고 나면 성공적으로 MySql command line에 접속할 수 있고, 나올 때는 간단히 exit를 쳐 주면 된다.
참고 : 비록 하드디스크의 어느 곳에서나 접속이 가능하지만, 데이터베이스의 생성은 MySql>data 폴더에 생성된다. APMSETUP 기준으로 C:\APM_Setup\Server\MySQL5\data가 된다.
참고 2 : 그런데도 각종 억세스는 현재 접속한 디렉토리에서 사용한다. 예를 들어 .csv등 모종의 파일을 데이터베이스에 넣으려고 한다면, .csv 파일이 위치한 곳에서 mysql 명령어로 접속을 하는 것이 포인트. 또는 해당 디렉토리를 지정해 주면 되는데, 이건 php와 동일하다.
mysql> load data local infile "./data/supermarket.csv" into table supermarket fields terminated by ',' lines terminated by '\r\n';
일단은 MySql이 설치되어 있다고 가정하면, path가 잡혀 있을 것이기 때문에 어디서든 mysql.exe 명령을 통해서 command line 스타일의 MySql 억세스가 가능한 것으로 이론적으로는 이해할 수 있겠다. 그렇다면 단순히
C:>mysql
이라고 입력하면 접속이 그냥 되어야 하는데...
이게 말처럼 되지를 않고 (내가 설치한 php용 환경인 APMSETUP의 경우) "ERROR 1045 (28000) : Access denied for user 'ODBC'@'localhost' (using password: NO)" 라는 에러 메시지가 뜨게 된다. 간단히 설명을 찾아보니 계정 권한 문제니 설정된 사용자 및 암호를 이용해서 접속을 해야 한다는 건데, 내가 뭐 세팅한 것도 없고 뭘 어떻게 고쳐야 할지 모르겠다. MySql을 지우고 다시 깔으라는 이야기까지 나오는데 이건 빈대 잡겠다고 집 태우는 격이고...
다시 좀 찾다가 http://blog.naver.com/PostView.nhn?blogId=hmoai&logNo=50033002305&redirect=Dlog&widgetTypeCall=true에서 힌트를 얻었다. APMSETUP으로 MySql을 설치한 경우 아이디 root의 암호 설정이 apmsetup이라는... 따라서 아래와 같이 입력을 하면 되겠다.
C:>mysql -u root -papmsetup
직관적으로 이해하기에 -u는 사용자(user) 옵션이고 -p는 암호(password) 옵션으로 보이는데, 웃기게도 사용자는 띄어쓰기를 해야 하지만 암호는 띄어쓰기를 하면 안된다. 저렇게 입력을 하고 나면 성공적으로 MySql command line에 접속할 수 있고, 나올 때는 간단히 exit를 쳐 주면 된다.
참고 : 비록 하드디스크의 어느 곳에서나 접속이 가능하지만, 데이터베이스의 생성은 MySql>data 폴더에 생성된다. APMSETUP 기준으로 C:\APM_Setup\Server\MySQL5\data가 된다.
참고 2 : 그런데도 각종 억세스는 현재 접속한 디렉토리에서 사용한다. 예를 들어 .csv등 모종의 파일을 데이터베이스에 넣으려고 한다면, .csv 파일이 위치한 곳에서 mysql 명령어로 접속을 하는 것이 포인트. 또는 해당 디렉토리를 지정해 주면 되는데, 이건 php와 동일하다.
mysql> load data local infile "./data/supermarket.csv" into table supermarket fields terminated by ',' lines terminated by '\r\n';
2012-04-05
HTML5 그림 그리기 - canvas 내에서 속성 바꾸기
참고 페이지 : http://msdn.microsoft.com/en-us/library/ff974918(v=VS.85).aspx
결국은 php 내에서 편하게 그림을 그리기 위해서는 HTML5 규격을 사용할 수 밖에 없다는 결론에 도달했다. 뭐 이것도 일일히 지정을 해 줘야 하기 때문에 GD를 사용하는 것 만큼이나 귀찮지만, GD의 경우 완전히 그림을 그려서 그걸 파일로 저장하고 불러오는 반면 HTML5에서는 <canvas> 태그를 사용하면 되기 때문에 무척 간단하게 그릴 수 있다.
문제는 하나의 canvas 내에서 서로 다른 속성들을 지정할 때인데, 즉 하나의 선을 검게 그려놓고 다른 선은 녹색으로 그린다던가 하는 부분이다. 이게 의외로 웃기는데, 단 한줄 .beginPath()를 써 주지 않으면 마구 겹쳐서 그려준다. 아래 javascript 파일인 canvas00.js의 예를 보자.
function doFirst() {
// 개체 선언
var x = document.getElementById('canvas');
canvas = x.getContext('2d');
// 글자를 그린다
canvas.textAlign="start";
canvas.fillText("2005", 0, 180);
canvas.textAlign="end";
canvas.fillText("2011", 300, 180);
// 바로 이 부분, 반드시 beginPath()를 선언해 줘야 한다.
canvas.beginPath();
canvas.moveTo(0, 170);
canvas.lineTo(300, 170);
canvas.stroke();
// 하나를 그리고 나면 다음 것을 다른 색으로 그리기 위해 다시 beginPath()를 선언한다.
canvas.beginPath();
canvas.strokeStyle="green";
canvas.moveTo(10, 165);
canvas.lineTo(50, 150);
canvas.lineTo(100, 110);
canvas.lineTo(200, 160);
canvas.lineTo(300, 100);
canvas.stroke();
}
// load drawing when page loads
window.addEventListener("load", doFirst, false);
위 참고페이지 설명에도 그렇고, 왜 멀쩡하게 있는 .closePath()는 사용하지 않는지 모르겠다.
결국은 php 내에서 편하게 그림을 그리기 위해서는 HTML5 규격을 사용할 수 밖에 없다는 결론에 도달했다. 뭐 이것도 일일히 지정을 해 줘야 하기 때문에 GD를 사용하는 것 만큼이나 귀찮지만, GD의 경우 완전히 그림을 그려서 그걸 파일로 저장하고 불러오는 반면 HTML5에서는 <canvas> 태그를 사용하면 되기 때문에 무척 간단하게 그릴 수 있다.
문제는 하나의 canvas 내에서 서로 다른 속성들을 지정할 때인데, 즉 하나의 선을 검게 그려놓고 다른 선은 녹색으로 그린다던가 하는 부분이다. 이게 의외로 웃기는데, 단 한줄 .beginPath()를 써 주지 않으면 마구 겹쳐서 그려준다. 아래 javascript 파일인 canvas00.js의 예를 보자.
function doFirst() {
// 개체 선언
var x = document.getElementById('canvas');
canvas = x.getContext('2d');
// 글자를 그린다
canvas.textAlign="start";
canvas.fillText("2005", 0, 180);
canvas.textAlign="end";
canvas.fillText("2011", 300, 180);
// 바로 이 부분, 반드시 beginPath()를 선언해 줘야 한다.
canvas.beginPath();
canvas.moveTo(0, 170);
canvas.lineTo(300, 170);
canvas.stroke();
// 하나를 그리고 나면 다음 것을 다른 색으로 그리기 위해 다시 beginPath()를 선언한다.
canvas.beginPath();
canvas.strokeStyle="green";
canvas.moveTo(10, 165);
canvas.lineTo(50, 150);
canvas.lineTo(100, 110);
canvas.lineTo(200, 160);
canvas.lineTo(300, 100);
canvas.stroke();
}
// load drawing when page loads
window.addEventListener("load", doFirst, false);
위 참고페이지 설명에도 그렇고, 왜 멀쩡하게 있는 .closePath()는 사용하지 않는지 모르겠다.
2012-02-27
Javascript string 변수 이용시 따옴표 사용
정말 3일을 꼬박 헤맨 것 같다. 이걸 알아내는 것이 참 어려운 일이구만. 뭐가 부족한지 알아내는 것도 어려운데 그걸 해결하는 건 더 어렵다^^
Javascript를 사용하다 보면 string 형태의 변수를 php와 script 사이에서 보내고 받고 하는 작업이 필요해진다. 그런데 html 상에서는 그냥 쓰면 되는 것이 Javascript나 php 내부에서는 특수문자가 포함된 것으로 받아들여져서 변수 전송이 안되는 경우가 많다. 특히 따옴표의 경우가 그런데, 현재의 상황은 따옴표가 포함된 string형태를 php에서 Javascript function을 통해서 html 페이지로 표시하고자 하는 경우에 해당된다.
결론은, 전송이 되지 않는다. 바로 쌍따옴표 때문인데 백슬래시를 사용해서 기호로 표시해도 (즉 "를 \") 안되는 것이 문법적 제한 때문이다.
1. html에서 Javascript function을 표시하려면 = 다음에 쌍따옴표로 넣어줘야 한다. 예를 들어 Javascript에 showValue(position, tstring)이라는 함수를 정의해서 html의 부분에 tstring을 집어넣는 함수가 있다고 하면 다음과 같이 써 줘야 겠다.
Javascript를 사용하다 보면 string 형태의 변수를 php와 script 사이에서 보내고 받고 하는 작업이 필요해진다. 그런데 html 상에서는 그냥 쓰면 되는 것이 Javascript나 php 내부에서는 특수문자가 포함된 것으로 받아들여져서 변수 전송이 안되는 경우가 많다. 특히 따옴표의 경우가 그런데, 현재의 상황은 따옴표가 포함된 string형태를 php에서 Javascript function을 통해서 html 페이지로 표시하고자 하는 경우에 해당된다.
결론은, 전송이 되지 않는다. 바로 쌍따옴표 때문인데 백슬래시를 사용해서 기호로 표시해도 (즉 "를 \") 안되는 것이 문법적 제한 때문이다.
1. html에서 Javascript function을 표시하려면 = 다음에 쌍따옴표로 넣어줘야 한다. 예를 들어 Javascript에 showValue(position, tstring)이라는 함수를 정의해서 html의 부분에 tstring을 집어넣는 함수가 있다고 하면 다음과 같이 써 줘야 겠다.
2012-02-21
PHP include와 require의 차이
참고 페이지 : http://rubis.tistory.com/323, http://jp.php.net/manual/en/function.require.php
이제 얼마 후면 생계를 위해 알바를 해야 할 때다. 하지만 이런 어려운 점에도 불구하고 이번 기회를 프로그래밍 실력을 늘릴 기회로 삼기 위해 아는 것도 없지만 업체를 그런 곳으로 도전하기로 했는데, 오늘 MVC (Model - View - Controller) 개념과 Symfony 등 대형 개발에 필요한 컨셉을 물어보는 바람에 상당히 당황했었다. 도전은 언제나 어려운 법, 이제부터 적응해 나가야 한다.
당장은 쉬운 것부터 해결해야 한다. include와 require를 사용할 때의 차이점을 알고 있어야 하겠다... 쉽게 말하면 require는 오류를 만나면 처리를 중단하는데, include는 경고 메시지 내보내고 계속 한다는 것.
이제 얼마 후면 생계를 위해 알바를 해야 할 때다. 하지만 이런 어려운 점에도 불구하고 이번 기회를 프로그래밍 실력을 늘릴 기회로 삼기 위해 아는 것도 없지만 업체를 그런 곳으로 도전하기로 했는데, 오늘 MVC (Model - View - Controller) 개념과 Symfony 등 대형 개발에 필요한 컨셉을 물어보는 바람에 상당히 당황했었다. 도전은 언제나 어려운 법, 이제부터 적응해 나가야 한다.
당장은 쉬운 것부터 해결해야 한다. include와 require를 사용할 때의 차이점을 알고 있어야 하겠다... 쉽게 말하면 require는 오류를 만나면 처리를 중단하는데, include는 경고 메시지 내보내고 계속 한다는 것.
2011-11-29
PHP global 변수 이용
맨몸으로 부딪히는 무식이 통통 튀는 내게 이런 자그마한 팁들은 정말 소중하다. 책도 없이 배우지만 이렇게 하나하나 검색하면서 찾아내는 기쁨도 좋다. 단지 시간이 문제이지만...
변수가 여러 군데에서 사용되는 경우가 있다. 그러면 일단 선언을 해 둔 다음 이곳저곳에서 사용하는데, C#과는 다르게 쓰려면 선언을 해 줘야 한다. (안해주면 못 찾아서 에러남) 간단한 용례는 다음과 같은데, 특히 배열도 가능하니 stopword 선언 등에 적절하다.
<?php
$a = 1;
$b = array("1", "2");
function Call() {
global $a, $b;
// 작업...
}
?>
변수가 여러 군데에서 사용되는 경우가 있다. 그러면 일단 선언을 해 둔 다음 이곳저곳에서 사용하는데, C#과는 다르게 쓰려면 선언을 해 줘야 한다. (안해주면 못 찾아서 에러남) 간단한 용례는 다음과 같은데, 특히 배열도 가능하니 stopword 선언 등에 적절하다.
<?php
$a = 1;
$b = array("1", "2");
function Call() {
global $a, $b;
// 작업...
}
?>
2011-11-28
PHP와 Javascript간 변수 전달 및 html 표시
변수를 이리저리 옮기는 것은 원하는 값이 알고리즘상 하부에 있을 때 브라우저에 보여지는 상부에 값을 표시하기 위해서 필요한 작업이다. 특히 순차적 프로그래밍인 php에서 나온 값을 html상의 위쪽에 표시할 때 별수 없이 javascript를 이용해서 값을 옮겨야 하기 때문이다.
방법의 대략적인 흐름은 다음과 같다. 먼저 php로 변수의 값을 설정한 다음, javascript를 이용해서 이 값을 퍼 나르고, html에서 해당되는 변수를 표시할 자리에 출력하게 하는 것이다.
1. php 변수명이 $a 라고 하면, 일단 javascript로 이 값을 부르는 방법은 다음과 같다. php 코드 내에 공백 없이 등호를 먼저 사용하는 점에 주의.
<script language="javascript">
<?php=$a ?>
</script>
2. 이를 이용하여 html 표시 중에서 id가 $b인 부분 (통상 <span>태그를 쓰게 되겠다) 에 이 값을 옮기고자 한다면, javascript의 getElementById 함수를 이용한다. 그러면 html 코드는 다음과 같이 된다.
<script>
document.getElementById("b").innerHTML = <?php=$a ?>;
</script>
참고적으로 자바스크립트는 위치에 관계없이 이렇게 옮겨지는데, php는 순차적으로 실행하므로 반대방향으로 보내는 것은 어려워 보인다.
2011-11-23
PHP POST 변수명 및 Maximum execution time 에러
참고 페이지 : http://saybox.tistory.com/239
1. 여러가지 자료를 사용하다 보면 POST 형식으로 넘겨진 자료를 사용하게 될 때가 있다. 근데 이게 명칭이 애매한 게,
1. 여러가지 자료를 사용하다 보면 POST 형식으로 넘겨진 자료를 사용하게 될 때가 있다. 근데 이게 명칭이 애매한 게,
2011-09-05
PHP 에러 메시지 : Invalid argument supplied for foreach()
참고 페이지 : http://php.syntaxerrors.info/index.php?title=Invalid_argument_supplied_for_foreach
초기 정의만 잘 하면 문제 없는 줄 알았는데, 함수의 경우에는 분명 array()로 설정한 개체를 이용해서 function을 짜도 위 에러 메시지가 나오는 경우가 매우 흔하다. 참고 페이지의 설명을 보면 그건 내 착각인 듯... 매 실행문에 foreach()에 들어가는 array 변수가 공백은 아닌지 확인을 해 줘야 한다.
방법은 매우 간단하다. empty()문을 이용해서 array 변수가 비었는지 아닌지 확인해 주면 된다. 좀 불편하다는 생각은 들지만... 그래도 열심히 해 보련다.
만일 $a라는 변수를 array()로 정의해놓고 값들을 입력했다면
if(!empty($a)) {
foreach ($a as $index => $value) {
... 해줄 작업들을 코딩한다...
}
}
초기 정의만 잘 하면 문제 없는 줄 알았는데, 함수의 경우에는 분명 array()로 설정한 개체를 이용해서 function을 짜도 위 에러 메시지가 나오는 경우가 매우 흔하다. 참고 페이지의 설명을 보면 그건 내 착각인 듯... 매 실행문에 foreach()에 들어가는 array 변수가 공백은 아닌지 확인을 해 줘야 한다.
방법은 매우 간단하다. empty()문을 이용해서 array 변수가 비었는지 아닌지 확인해 주면 된다. 좀 불편하다는 생각은 들지만... 그래도 열심히 해 보련다.
만일 $a라는 변수를 array()로 정의해놓고 값들을 입력했다면
if(!empty($a)) {
foreach ($a as $index => $value) {
... 해줄 작업들을 코딩한다...
}
}
2011-09-02
PHP 디렉토리의 위치
스스로 참조하고 잊지 않기 위함이긴 하지만, 너무 기본적인 내용을 쓰는 건지도 모르겠다...
php 코드를 실행하다 보면 저장한 파일을 불러와야 할 때도 있고, 또는 파일 형태로 저장해야 하는 경우도 있다. 먼저 내 컴에서 테스트를 하고 나서 서버에 올리는데, 나는 Windows고 서버는 Unix 인지라 문법이 다른 경우도 문제 (예를 들어 \n과 \r\n의 차이 등)이지만, 특정 경로를 사용해야 하는 경우가 문제이기도 하다.
예를 들어 내가 사용하고 있는 코드들의 모임인 a.php 파일의 로컬 위치는 (php의 주소 형태로) C:/APM_Setup/htdocs/a.php 이지만 서버에서는 home/yoon/a.php 이라면, 코딩할 때 앞에서는 내 주소로 썼다가 뒤에서는 다 바꿔줘야 하는 문제점이 있다. 다행히도, 또 당연하게도 이 문제는 기본 실행 디렉토리로 해결이 되는 것 같다. 두 경우 모두 그냥 ./a.php 라고 쓰면 잘 실행이 된다.
하나의 디렉토리에 모든 것을 다 담을 수는 없으므로 자연스럽게 하부 디렉토리를 만들게 되는데, 이 경우에는 경로를 사용하는 시작점을 생각해야 한다. 예를 들어 웹 실행은 C:/APM_Setup/htdocs/a.php로 시작을 하고 이 작업 내에서 하부 디렉토리에 있는 C:/APM_Setup/htdocs/data/b.txt 를 사용(참조)한다고 하면, a.php 코드에 참조하는 부분을 쓸때 그냥 ./data/b.txt 로 명기하면 된다.
조금 더 나아가 보자. C:/APM_Setup/htdocs/a.php 를 실행하기 위한 소스코드들은 C:/APM_Setup/htdocs/source/c.php 에 함수 형태로 있고, 각종 데이터들은 C:/APM_Setup/htdocs/data/b.txt 에 있다고 하자. 이때 c.php에서 b.txt의 데이터를 사용(참조)하고자 한다면 어떻게 될까? 웃기게도 그냥 c.php 파일 내에서 ./data/b.txt 로 명기하면 된다... 언뜻 보면 좀 이해가 안되는데, 내 생각에는 보통 루트 디렉토리라 불리우는 기본 시작점을 프로그램의 실행시 시작하는 디렉토리로 보는 관점인 것 같다.
php 코드를 실행하다 보면 저장한 파일을 불러와야 할 때도 있고, 또는 파일 형태로 저장해야 하는 경우도 있다. 먼저 내 컴에서 테스트를 하고 나서 서버에 올리는데, 나는 Windows고 서버는 Unix 인지라 문법이 다른 경우도 문제 (예를 들어 \n과 \r\n의 차이 등)이지만, 특정 경로를 사용해야 하는 경우가 문제이기도 하다.
예를 들어 내가 사용하고 있는 코드들의 모임인 a.php 파일의 로컬 위치는 (php의 주소 형태로) C:/APM_Setup/htdocs/a.php 이지만 서버에서는 home/yoon/a.php 이라면, 코딩할 때 앞에서는 내 주소로 썼다가 뒤에서는 다 바꿔줘야 하는 문제점이 있다. 다행히도, 또 당연하게도 이 문제는 기본 실행 디렉토리로 해결이 되는 것 같다. 두 경우 모두 그냥 ./a.php 라고 쓰면 잘 실행이 된다.
하나의 디렉토리에 모든 것을 다 담을 수는 없으므로 자연스럽게 하부 디렉토리를 만들게 되는데, 이 경우에는 경로를 사용하는 시작점을 생각해야 한다. 예를 들어 웹 실행은 C:/APM_Setup/htdocs/a.php로 시작을 하고 이 작업 내에서 하부 디렉토리에 있는 C:/APM_Setup/htdocs/data/b.txt 를 사용(참조)한다고 하면, a.php 코드에 참조하는 부분을 쓸때 그냥 ./data/b.txt 로 명기하면 된다.
조금 더 나아가 보자. C:/APM_Setup/htdocs/a.php 를 실행하기 위한 소스코드들은 C:/APM_Setup/htdocs/source/c.php 에 함수 형태로 있고, 각종 데이터들은 C:/APM_Setup/htdocs/data/b.txt 에 있다고 하자. 이때 c.php에서 b.txt의 데이터를 사용(참조)하고자 한다면 어떻게 될까? 웃기게도 그냥 c.php 파일 내에서 ./data/b.txt 로 명기하면 된다... 언뜻 보면 좀 이해가 안되는데, 내 생각에는 보통 루트 디렉토리라 불리우는 기본 시작점을 프로그램의 실행시 시작하는 디렉토리로 보는 관점인 것 같다.
PHP 에러 해결 : Allowed memory size exhausted...
비록 멀티미디어는 아니지만 방대한 자료를 서버 분할이 아닌 내 혼자 처리하다 보니 때로는 array()의 숫자가 대단히 많게 되는 수가 있다. 이 경우에 php가 처리를 하다가 에러를 내보내는데 대체로 메시지는 다음과 같다.
Fatal error: Allowed memory size of 0000000 bytes exhausted (tried to allocate 000 bytes) in /xxx/xxx/xxx on line xx.
해석은 매우 쉬운데 말하자면 php 실행에 배정된 메모리를 다 사용해서 없다는 거다. 비단 내 경우 뿐만 아니라 서버 실행시 업로드 문제 등 여러 부분에서 이러한 에러가 나올 수 있는데, 해결방법은 의외로 간단하다. (단 내 혼자 실행하는 경우다. 서버의 경우 이렇게 무작위로 늘리면 처리용량이 문제가 될 수 있으므로...)
php의 설정 파일인 php.ini에 보면 memory_limit = 00 M라는 항목이 있다. 이걸 늘려주면 되는데 그 양이 참조문헌마다 제각각이다. 아마 서버 세팅시 각 시스템에 맞게 자동적으로 할당해 주는 모양인데, 내 경우에는 초기치가 128M였다. 결코 작은 용량이 아님에도 이런 에러가 났으니... 뭐 내가 그런 거니 할 말은 없지만, 이걸 1024M로 늘려놨더니 일단은 잘 된다.
Fatal error: Allowed memory size of 0000000 bytes exhausted (tried to allocate 000 bytes) in /xxx/xxx/xxx on line xx.
해석은 매우 쉬운데 말하자면 php 실행에 배정된 메모리를 다 사용해서 없다는 거다. 비단 내 경우 뿐만 아니라 서버 실행시 업로드 문제 등 여러 부분에서 이러한 에러가 나올 수 있는데, 해결방법은 의외로 간단하다. (단 내 혼자 실행하는 경우다. 서버의 경우 이렇게 무작위로 늘리면 처리용량이 문제가 될 수 있으므로...)
php의 설정 파일인 php.ini에 보면 memory_limit = 00 M라는 항목이 있다. 이걸 늘려주면 되는데 그 양이 참조문헌마다 제각각이다. 아마 서버 세팅시 각 시스템에 맞게 자동적으로 할당해 주는 모양인데, 내 경우에는 초기치가 128M였다. 결코 작은 용량이 아님에도 이런 에러가 났으니... 뭐 내가 그런 거니 할 말은 없지만, 이걸 1024M로 늘려놨더니 일단은 잘 된다.
2011-08-18
PHP 출력형태의 조정 : 소수의 표현
관련 페이지 : http://sexy.pe.kr/tc/17
너무 기본인지도 모르지만, C# 방식과 다른 출력방법도 중요한 내용인 것 같다. php에서는 데이터형에 지나치게 까다롭지 않기 때문에 계산한 결과를 출력할 때만 자료형에 신경을 쓰는 편인데, 표현에 관한 방법은 알아야 할 것 같다.
예를 들어 소숫점이 있는 숫자의 경우에는 다음과 같은 출력방법이 유용하다.
string number_format (float $number, int $decimals = 0, string $dec_point = '.', string $thousands_sep = ',')
- 주어진 숫자를 지정된 형식에 맞게 변환한다. (PHP4, PHP5)
- $decimals는 소숫점 아래 숫자의 표현갯수이고 끝에서 반올림 처리됨
- $dec_point는 소숫점의 표현 문자, $thousands_sep는 천단위 구분 문자
예를 들어 소숫점 아래 3자리까지 표시하고 싶으면 다음과 같이 되는 거다.
number_format($value, 3, '.', ',')
너무 기본인지도 모르지만, C# 방식과 다른 출력방법도 중요한 내용인 것 같다. php에서는 데이터형에 지나치게 까다롭지 않기 때문에 계산한 결과를 출력할 때만 자료형에 신경을 쓰는 편인데, 표현에 관한 방법은 알아야 할 것 같다.
예를 들어 소숫점이 있는 숫자의 경우에는 다음과 같은 출력방법이 유용하다.
string number_format (float $number, int $decimals = 0, string $dec_point = '.', string $thousands_sep = ',')
- 주어진 숫자를 지정된 형식에 맞게 변환한다. (PHP4, PHP5)
- $decimals는 소숫점 아래 숫자의 표현갯수이고 끝에서 반올림 처리됨
- $dec_point는 소숫점의 표현 문자, $thousands_sep는 천단위 구분 문자
예를 들어 소숫점 아래 3자리까지 표시하고 싶으면 다음과 같이 되는 거다.
number_format($value, 3, '.', ',')
2011-04-25
File 관련 path 처리
Class나 일반적인 php 구문에서나 파일을 읽어들이는 작업이 필요한 경우가 많다. 이때 사용하는 것이 fopen이나 file_get_contents가 되겠는데, 이게 복잡해진다. 그냥 하나의 php 코드에서 명시해서 읽고 처리가 완료되는 경우에는 같은 디렉토리에 넣어두고 별도의 path 없이 읽어들이면 처리가 가능하다.
하지만 class나 function에서 사용하는 경우에는 사연이 달라진다. class나 function내에 상대주소 (./temp.txt등)로 사용하면 여지없이 에러가 난다. 아마도 다른 코드에서 한번 부르는 과정이 있기 때문이 아닐지. 현재로서는 다른 방법이 없어서 해당 파일의 절대주소를 사용하고 있는데, 예를 들면 c:/user/temp.txt (Windows 로컬 파일의 경우) 또는 /home/html/temp.txt (서버 파일의 경우)와 같이 처음부터 경로를 다 써주는 방법이다. 답답하지만 아직은 다른 방법으로는 에러가 난다.
하지만 class나 function에서 사용하는 경우에는 사연이 달라진다. class나 function내에 상대주소 (./temp.txt등)로 사용하면 여지없이 에러가 난다. 아마도 다른 코드에서 한번 부르는 과정이 있기 때문이 아닐지. 현재로서는 다른 방법이 없어서 해당 파일의 절대주소를 사용하고 있는데, 예를 들면 c:/user/temp.txt (Windows 로컬 파일의 경우) 또는 /home/html/temp.txt (서버 파일의 경우)와 같이 처음부터 경로를 다 써주는 방법이다. 답답하지만 아직은 다른 방법으로는 에러가 난다.
Subscribe to:
Posts (Atom)