dev2013.11.20 10:28

IIS 환경 아래 PHP $_SERVER['REQUEST_URI'] 변수 처리

if (!isset($_SERVER['REQUEST_URI'])) {
$_SERVER['REQUEST_URI'] = substr($_SERVER['PHP_SELF'],1 );
if (isset($_SERVER['QUERY_STRING'])) {
$_SERVER['REQUEST_URI'].='?'.$_SERVER['QUERY_STRING'];
}
}



Posted by 김과장 epkim
dev2013.06.18 15:59

PHP 정규식 정리


^ (caret) : 라인의 처음이나 문자열의 처음을 표시한다.
^aaa : 문자열의 처음에 aaa 를 포함하면 참, 그렇지 않으면 거짓

$ (dollar) : 라인의 끝이나 문자열의 끝을 표시한다.
aaa$ : 문자열의 끝에 aaa 를 포함하면 참, 그렇지 않으면 거짓

. (period) : 임의의 한 문자를 표시
^a.c : 문자열의 처음에 abc, adc, aXc 등을 포함하면 참, aa 는 거짓
a..b$ : 문자열의 끝에 aaab, aZXb, aCxb 등을 포함하면 참

[] (bracket) : 문자의 집합이나 범위를 나타냄, 두 문자 사이의 "-" 는 범위를 나타냄
[] 내에서 "^" 이 선행되면 not 를 나타냄
이외에도 "문자클래스" 를 포함하는 [:문자클래스:] 의 형태가 있다. (문자클래스에서는 alpha, blank, cntrl, digit, graph, lower, print, space, upper, xdigit 가 있다.)
 
{} (brace) : {} 내의 숫자는 직전의 선행문자가 나타나는 횟수 또는 범위를 나타낸다.
a{3} : 'a' 의 3번 반복인 aaa 만 해당됨.
a{3,} : 'a' 가 3번 이상 반복인 aaa, aaaa, aaaaa, ... 등을 나타냄
a{3,5} : 'a'가 3번이상 5번 이하 반복인 aaa,aaaa,aaaaa 만 해당됨
ab{2,3} : abb 와 abbb만 해당됨
[0-9]{2} : 두 자리 숫자
doc[7-9]{2} : doc77, doc87, doc97 등이 해당
[^Zz]{5} : Z와 z를 포함하지 않는 5개의 문자열, abcde, ttttt 등이 해당
.{3,4}er : 'er' 앞에 세개 또는 네개의 문자를 포함하는 문자열이므로 Peter, mother 등이 해당

* (asterisk) : '*' 직전의 선행문자가 0번 또는 여러번 나타나는 문자열
ab*c : 'b'를 0번 또는 여러번 포함하므로 ac, ackdddd, abc, abbc, abbbbbbbc 등
* : 선행문자가 없는 경우이므로 임의의 문자열 및 공백 문자열은 안됨
.* : 선행문자가 '.' 이므로 하나 이상의 문자를 포함하는 문자열, 공백 문자열은 안됨
ab* : 'b'를 0번 또는 여러번 포함하므로 a, accc, abb, abbbbbbb 등
a* : 'a'를 0번 또는 여러번 포함하므로 k, kdd, sdfrrt, a, aaaa, abb, 공백문자열 등
doc[7-9]* : doc7, doc777, doc778989, doc 등이 해당
[A-Z].* : 대문자로만 이루어진 문자열
like.* : 직전의 선행문자가 '.'이므로 like에 0 또는 하나 이상의 문자가 추가된 문자열이 됨, like, likely, liker, likelihood 등

? : '?' 직전의 선행문자가 0번 또는 1번 나타나는 문자열
ab?c : 'b'를 0번 또는 1번 포함하므로 abc, abcd 만 해당됨

() (parenthesis) : ()는 정규식내에서 패턴을 그룹화 할 때 사용

| (bar) : or를 나타냄
a|b|c : a, b, c 중 하나, 즉 [a-c]와 동일함
yes|Yes : yes나 Yes 중 하나, [yY]es와 동일함
korea|japan|chinese : korea, japan, chinese 중 하나

\ (backslash) : 위에서 사용된 특수 문자들을 정규식내에서 문자를 취급하고 싶을 때 '\'를 선행시켜서 사용
filename\.ext ("filename.ext"를 나타냄)
[\?\[\\\]] : '?', '[', '\', ']' 중 하나


Posted by 김과장 epkim
dev2013.06.17 14:27

특정 문자열을 치환해야하는데..

str_replace() ..만으로 문자열을 치환하기 곤란한 상황이 있다. 예를 들어 대상문자에 치환문자가 중복등록되어 있다는 경우, 치환문자중의 마지막 문자열만 치환하길 원하는 경우엔 다음과 같이 하면됨.

<?
$str = '김은표...박지현...';
$find = '...';
$replace = '!';
$result = preg_replace(strrev("/$find/"),strrev($replace),strrev($str),1);
echo strrev($result);
?>

결과 :

김은표...박지현!


preg_replace : Perform a regular expression search and replace / 문자열에서 패턴을 추출하거나 바꿀수 있음

http://php.net/manual/en/function.preg-replace.php

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )


<?
$str = "abcdef123456";
echo preg_replace('/[a-z]/', '*', $text);
?>

결과 :

******123456


+ 관련 함수

- str_replace : http://php.net/manual/kr/function.str-replace.php

- strrev : http://php.net/manual/en/function.strrev.php







Posted by 김과장 epkim
dev2013.05.31 11:39

윈도우7 IE9 환경에서 개발했던 사이트의 UI 가  다른 PC 의 IE 환경에서는 깨지는 현상 발생!

에러가 발견되는 IE 의 버전에는 크게 문제가 없는 상황, IE 의 '호환성보기' 가 문제..

<meta http-equiv="X-UA-Compatible" content="IE=5">

<meta http-equiv="X-UA-Compatible" content="IE=6">

<meta http-equiv="X-UA-Compatible" content="IE=7">

<meta http-equiv="X-UA-Compatible" content="IE=8">

<meta http-equiv="X-UA-Compatible" content="IE=9">


가장 최신의 버전 모드는
<meta http-equiv="X-UA-Compatible" content="IE=Edge">


content 속성에 지정할 수 있는 값

* IE=5 (관용모드)
- 지정된 DOCTYPE 에 상관없이 IE5 랜더링 방식이 사용됨.


* IE=7 (IE7 표준모드)
- 지정된 DOCTYPE 에 상관없이 IE7 표준 모드 랜더링 방식이 사용됨.


* IE=EmulateIE7 (IE7 메뉼레이션 모드)
- 지정된 DOCTYPE 에 따라 IE7 표준 모드나 관용 모드의 랜더링 방식이 사용됨 (사실상 IE7 을 흉내냄)


* IE=8 (IE8 표준모드)
- 지정된 DOCTYPE 에 상관없이 IE8 표준모드 랜더링 방식이 사용됨.


* IE=EmulateIE8 (IE8 애뮬레이션 모드)
- 지정된 DOCTYPE 에 따라 IE8 표준모드나 관용모드의 랜더링 방식이 사용됨.


* IE=edge(최신모드)
- 지정된 DOCTYPE 에 상관없이 IE8 이상 버전에서 항상 최신 표준 모드가 사용됨.



새로 개발하는 사이트라면 표준 모드를 사용해야하니깐 IE=8 모드를 지정하는것이 바람직하나, 마이크로소프트는 실험적인 프로젝트가 아닌 이상 IE=edge 모드를 지정할 것을 권장한다. 구식 콘텐츠를 위해 특정 랜더링 엔진을 사용하려면 위의 contents 속성의 다양한 값 중 하나를 지정하면 된다.


Posted by 김과장 epkim
TAG doctype, meta
dev2013.05.30 18:18



euc-kr 개발 환경에서 jQuery 로 load 된 값을 받는 경우..

jQuery 를 사용하여 결과값을 POST 로 받게 되는 경우.. euc-kr 이 아닌 UTF-8 로 결과값을 받게 되는데.. 

결과값을 통해 특정 div 내에 load 항목으로 내용(결과값) 을 갱신하는 경우..

해당 부분의 인코딩이 UTF-8 로 출력되어 인코딩이 깨진 경우가 발생


헤더 정보로 페이지의 인코딩 변경할 수 있다!

<?
header("Content-type: application/xml; charset=euc-kr");

?>

Posted by 김과장 epkim
dev2013.05.21 16:04

mysqltutorial.org 에서 제공하는 mysql sample db

http://www.mysqltutorial.org/mysql-sample-database.aspx 


샘플 DB 스키마는 아래와 같다.


MySQL Sample Database Schema

The MySQL sample database schema consists of the following tables:


  • Customers: stores customer’s data
  • Products: stores a list of scale model cars.
  • ProductLines: stores a list of product line category.
  • Orders: stores orders placed by customers.
  • OrderDetails: stores order line items in each order.
  • Payments: stores payments made by customers based on their account.
  • Employees: stores all employee information include organization unit structure such as who reports to whom.
  • Offices: stores sale office data.




위 사이트에서 제공되는 스키마 파일을 다운 로드받은후, 그대로 인서트 시킨다.

제공되는 스키마 파일의 DB명은 'classicmodels' 이므로, 사용하는 DB명에 맞게 편집후 그대로 인서트!


mysql -u[아이디] -p[패스워드] [디비명] < 스키마파일명


좀더 확장된 mysql sample db 파일을 원한다면..

http://dev.mysql.com/doc/employee/en/index.html

http://www.ntu.edu.sg/home/ehchua/programming/sql/SampleDatabases.html

Posted by 김과장 epkim
TAG MYSQL, sample
dev2013.05.06 19:57

입력 form 안에 있는 값들을 submit 시 일괄 encoding 을 변경하는 기능

<form name="frm" method="post" accept-charset="euc-kr" onsubmit="document.charset='euc=kr';">
<input type="text" name="itpName" id="itpName">
<input type="submit" class="search" name="search" value="search">
</form>

페이지 인코딩이 utf-8 인 경우.. euc-kr 로 변경 가능



Posted by 김과장 epkim
dev2013.04.19 18:32

anchor()

Creates a standard HTML anchor link based on your local site URL:

<a href="http://example.com">Click Here</a>


The tag has three optional parameters:

anchor(uri segments, text, attributes)


The first parameter can contain any segments you wish appended to the URL. As with the site_url() function above, segments can be a string or an array.


Note: If you are building links that are internal to your application do not include the base URL (http://...). This will be added automatically from the information specified in your config file. Include only the URI segments you wish appended to the URL.

The second segment is the text you would like the link to say. If you leave it blank, the URL will be used.

The third parameter can contain a list of attributes you would like added to the link. The attributes can be a simple string or an associative array.

Here are some examples:

echo anchor('news/local/123', 'My News', 'title="News title"');


Would produce: <a href="http://example.com/index.php/news/local/123" title="News title">My News</a>

echo anchor('news/local/123', 'My News', array('title' => 'The best news!'));

Would produce: <a href="http://example.com/index.php/news/local/123" title="The best news!">My News</a>


anchor_popup()

Nearly identical to the anchor() function except that it opens the URL in a new window. You can specify JavaScript window attributes in the third parameter to control how the window is opened. If the third parameter is not set it will simply open a new window with your own browser settings. Here is an example with attributes:

$atts = array(
'width' => '800',

'height' => '600',
'scrollbars' => 'yes',
'status' => 'yes',
'resizable' => 'yes',
'screenx' => '0',
'screeny' => '0'
);

echo anchor_popup('news/local/123', 'Click Me!', $atts);


Note: The above attributes are the function defaults so you only need to set the ones that are different from what you need. If you want the function to use all of its defaults simply pass an empty array in the third parameter:

echo anchor_popup('news/local/123', 'Click Here to Contact Me');


* A 태그를 CI 함수를 통해 생성




Posted by 김과장 epkim
dev2013.04.16 10:49
ORCL =    

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = ip주소 )(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

EXTPROC_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

)

(CONNECT_DATA =

(SID = PLSExtProc)

(PRESENTATION = RO)

)

)


ORCL : 서비스 이름

DESCRIPTION : 접속하고자 하는 대상 데이터베이스 정보

ADDRESS : 접속하고자 하는 데이터베이스 서버의 리스너를 호출하기 위한 주소 정보(프로토콜, 호스트, 리스너 포트)

CONNECT_DATA : SERVICE_NAME 옵션을 이용하여 접속할 리스너 프로세스가 사용하는 서비스 이름을 지정하거나 또는 SID옵션을 이용하여 데이터베이스의 SID명을 지정


MYNAME =
    (DESCRIPTION =
        (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = TCP)(HOST = 1**.***.***.***)(PORT = 181*))
        )
        (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = MYNAME)
        )
      )


MYNAME : 오라클 서버의 리스너(listener.ora)에 기술된 서비스명입니다. 서버측에 사용자(DB관리자)가 임의로 작성하여 넣은 이름


PROTOCOL = TCP : 클라이언트와 서버간 연결시 사용할 프로토콜을 설정하는 부분으로 구문상 TCP 프로토콜을 사용한다는 의미


HOST = 1~ : 오라클이 설치된 서버의 아이피 주소


PORT = 181~ : 오라클 서버에 연결할(서버에서 서비스중인) 접속포트 번호


SERVER = DEDICATED : 오라클 서버와 연결시 생성된 프로세스를 전용으로 사용한다는 의미 / 자세히 설명을 드리자면, 오라클은 기본적으로 Dedicated Server(전용 서버) 방식 혹은 Shared Server(공유 서버) 방식으로 운용하게 되는데 Dedicated Server 방식의 경우에는 클라이언트와 서버가 연결이 되면 해당 프로세스가 생성되어 클라이언트가 단독으로 해당 프로세스를 사용하도록합니다. 이와 반면 Shared Server 방식은 클라이언트와 서버가 연결이 되면 이미 실행중인 프로세스를 공유 하여 사용하도록 합니다. 다른 말로 설명을 드리자면 하나의 프로세스에 하나의 클라이언트만을 사용하게 하는것이 Dedicated, 하나의 프로세스에 다수의 클라이언트가 사용하는 것을 Shared 라 할수 있습니다. 두개의 방식은 각각 장단점이 있는데 DEDICATED의 경우는 프로세스를 클라이언트 하나만 단독으로 사용함으로써 사용자로 하여금 빠른 처리가 가능하도록 하는 반면 다수의 접속자가 있는 경우에는 그만큼의 다수의 프로세스를 생성시킴에 따라 서버에 부하가 걸리게 되며, Shared의 경우는 다수의 사용자가 연결하더라도 비교적 소수의 프로세스만이 활성화 되지만, 각각의 사용자의 업무 처리 시간에 손실이 발생하게 됩니다.


SERVICE_NAME = MYNAME : 오라클 서버의 리스너(listener.ora)에 기술된 서비스명 / 서버측에 사용자 (DB관리자)가 임의로 작성하여 넣은 이름


출저 : http://blog.daum.net/turnnig-pointer/16498159




Posted by 김과장 epkim
dev2013.04.11 11:05

먼저 tnsnames.ora 셋팅부터..

tnsnames.ora 파일을 찾아서 원격 접속할 tns 정보 등록..

# find / - name 'tnsnames.ora'

해당 tns 정보를 등록..


ci 디렉토리의 /config/database.php 파일을 열어 해당 oracle 접속 정보 등록..

$dbhost = "111.111.111.111";  //IP of my host database
$dbport = "1521";    //Oracle port
$dbname= "xxxx";    //My database Name
$dbConnString = "
    (DESCRIPTION =
        (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = TCP)(HOST = ".$dbhost.")(PORT = ".$dbport.")
        )
        (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = ".$dbname.")
        )
    )";
$db['default']['hostname'] = "$dbConnString";
$db['default']['username'] = 'xxxx';
$db['default']['password'] = "pass";
$db['default']['database'] = "xxxx";
$db['default']['dbdriver'] = "oci8";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = false;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";
$db['default']['swap_pre'] = "";
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;


다음과 같이 셋팅 하면 oracle 원격 접속 등록 성공!

* 추가 : tns description 설정 입력에 있어 괄호 처리 신경 쓸것! (이거 잘못 묶으면 에러 찾기 힘듦..)


Posted by 김과장 epkim