프로그램/php2015. 5. 28. 14:50

PHP PDO(PHP 5.1.0부터 제공)를 사용하게 되면 같은 코드로 여러 종류(예>MySQL, SQLite, 기타 등등)의 데이터베이스(DateBase) 연결에 사용할 수 있게 된다.

그리고 무엇보다도 SQL 인젝션(SQLInject) 공격을 걱정하지 않아도 된다.

중요> PHP 5.5 부터는 mysql_connect(), mysql_query() 등과 같은 mysql_ 로 시작하는 함수는 사용할 수 없게 되므로 PDO 또는 MYSQLi를 사용하도록 미리 준비하는 것을 권장한다.

 

 

[PDO-MySQL 모듈 설치 소스 하기]

PDD-Mysql 모듈은 기본 제공으로 PHP 설치 소스 경로로 이동한 후 진행한다.

(없으면 다운 받는다.)

참고>PDO-Mysql 모듈 다운받기

]# wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz

]# tar xvzf PDO_MYSQL-1.0.2.tgz

]# cd PDO_MYSQL-1.0.2

 

 

[PDO 설치 학인]

phpinfo()를 통해서 확인할 수 있다.  

... 생략 ...

 

또는

]# /usr/local/php/bin/php -i | grep PDO

 

 

 

 

 

[PDO-Mysql 모듈 추가 설치] : PHP 설치 Configure 옵션에 추가되지 않는다.

php 설치 소스로 이동한다.

]# cd /usr/local/src/apm/

]# ll

 

 

 

 

 

 

만일을 대비해 백업을 해둔다.

]# mkdir php-5.4.2_bk

]# cp -r php-5.4.2/* php-5.4.2_bk/

PDO-Mysql 모듈이 있는 위치로 이동한다.

]# cd php-5.4.2/ext/pdo_mysql/

]# ll

 

 

 

 

 

phpize명령어를 사용해서 확장모듈(여기서는 PDO-Mysql)을 위한 빌드 환경을 만든다.

]# /usr/local/php/bin/phpize

Configuring for:

PHP Api Version:  20100412

Zend Module Api No:  20100525

Zend Extension Api No:  22100525

참고>phpize 실행파일이 해당위치에 없다면 find / -name phpize를 실행해서 찾는다.

 

 

 

 

참고>phpize를 실행하면 configure 파일 및 기타 파일들이 생성된다.

- Cannot find autoconf 오류 발생시

 

 

컴파일을 한다.

]# ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql

]# make

]# make install

 

 

 

 

모듈 생성 확인

컴파일이 완료되면 /usr/local/php/lib/php/extensions/no-debug-zts-20100525/ 와 비슷한 경로를 찾은 후 pdo_mysql.so 파일이 생성되었는지 확인한다.

참고> 기존에 다른 확장 모듈을 추가했다면 다른 모듈 파일도 같은 경로에 있는 것을 확인할 수 있다.

 

 

 

 

PDO-Mysql 모듈 연동

php.ini 파일을 아래와 같이 수정한다.

]# vi /usr/local/apache/conf/php.ini

extension_dir = /usr/local/php/lib/php/extensions/no-debug-zts-20100525” <- 변경

extension=pdo_mysql.so <- 추가

apache를 재 시작한다.

]# service httpd restart

phpinfo()를 이용해서 PDO-Mysql활성화되었는지 확인한다.

]# /usr/local/php/bin/php -i | grep PDO

 

 


 

더보기>

- php pdo db 연결 / pdo db connection / pdo database 접속 / pdo db open

- php pdo limit 사용법 / pdo query limit offset / pdo mysql limit / pdo bindValue

- php pdo like 사용법 / pdo query like / pdo mysql like / pdo bindValue

Posted by 은둔고수
프로그램/php2015. 3. 10. 15:14

/* 날짜 형식 변환
$d : 날짜(0000-00-00 00:00:00)
$t : 변환형식( 1(기본):당일이면 00:00:00, 지난 날짜이면 00.00.00 )
반환 : 변환한 날짜
*/
function rtn_date_fm($d, $t=1) {
 if(!$d || strlen($d) != 19) return false;
 $rtn = false;

 switch ($t) {
  case 1:
   if(substr($d, 2, 8) == date("y-m-d")) {
    $rtn = substr($d, 11, 8);
   } else {
    $rtn = str_replace("-", ".", substr($d, 2, 8));
   }

   break;
  
  default:
   $rtn = false;
   break;
 }

 return $rtn;
}

 

 

사용법 예> 금일이면 "시분초(00:00:00)" 형식으로 변환

$date = date("Y-m-d H:i:s");    // 오늘 날짜(2015-03-10 15:03:42)

echo "<br />날짜 형식 변환 = " . rtn_date_fm($date); 

 

결과>

 

 

사용법 예> 지난 날짜이면 "년월일(00.00.00)" 형식으로 변환

$date = "2015-03-09 12:00:00";    // 어제 날짜

echo "<br />날짜 형식 변환 = " . rtn_date_fm($date); 

 

결과> 

Posted by 은둔고수
프로그램/php2015. 2. 2. 18:35

/* 모바일 기기 확인
반환 : 컴퓨터(PC), 모바일(해당 기종)
*/
function rtn_mobile_chk() {
    // 모바일 기종(배열 순서 중요, 대소문자 구분 안함)
    $ary_m = array("iPhone","iPod","IPad","Android","Blackberry","SymbianOS|SCH-M\d+","Opera Mini","Windows CE","Nokia","Sony","Samsung","LGTelecom","SKT","Mobile","Phone");

    for($i=0; $i<count($ary_m); $i++){
        if(preg_match("/$ary_m[$i]/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
            return $ary_m[$i];
            break;
        }
    }

    return "PC";

}

 

 

$chk_m = rtn_mobile_chk();

if($chk_m == "PC"){
    echo"PC 접속 - " . $chk_m;
} else {
    echo"모바일 접속 - " . $chk_m;
}

 

 

 

 

결과> 

Posted by 은둔고수
프로그램/php2015. 1. 30. 10:51

//=== 문자열 공백 전부 없애기
// $str : 문자열
// 반환 : 문자열
function rtn_str_replace($str) {
    return str_replace(" ", "", $str); // 빈칸 없애기

}

 

$str = " 1,2, 3,4 , 5 ";

echo "<br />문자열 공백삭제=" . rtn_str_replace($str);

 


결과> 

Posted by 은둔고수
프로그램/php2015. 1. 30. 10:13

//=== 빈칸을 없앤 후 반환(정규표현식)
function del_blank($str) {
    return preg_replace('/ /', '', $str);    // 공백제거
}

 

$str = " 1,2, 3,4 , 5 ";

echo "<br />빈칸없애기=" . del_blank($str); 


 

결과>

Posted by 은둔고수
프로그램/php2015. 1. 30. 09:52

//=== 문자열을 배열로 만들기

// 설명 : 구분자(예>",")로 구분된 문자열을 빈칸이 없는 문자열로 만든 후 배열로 만들어서 반환

// $str : 문자열

// $d :  구분자(기본:",")

// $ary_ret : 반환(배열)

function rtn_array_create($str, $d=",") {

$str = str_replace(" ", "", $str);    // 빈칸 없애기

$ary_ret = explode($d, $str);    // 배열로 만들기

 

retrun $ary_ret;

}

 

 

$str = " 1,2, 3,4 , 5 ";    // 문자열

$ary_cnt = 0;    // 배열 개수

$ary_list = array();

 

$ary_tmp = rtn_array_create($str);    // 문자열을 배열로 변경해서 배열변수에 담는다.

 

// 배열 확인

if(rtn_array_check($ary_tmp)) {

$ary_list = $ary_tmp;

$ary_cnt = count($ary_list);

}

 

// 결과 확인

echo "<br />배열 확인 = ";

print_r($ary_list);

echo "<br />배열 개수 = " . $ary_cnt; 



결과>

Posted by 은둔고수
프로그램/php2014. 11. 7. 11:06

rpm 방식으로 설치되어있는 php가 있다면 확인해보고 삭제를 할지 판단한다.

]# rpm –qa | grep php

또는

]# rpm –qa | grep php*

php-common*

php-cli*

기타

 

 

 

 

 

 

 

]# rpm –e php-common*

]# rpm –e cli*

]# rpm -e 기

 

삭제되었는지 확인한다.

]# rpm –qa | grep php

또는

]# rpm –qa | grep php* 



더보기>

- php 버전 확인하기 - linux php version

- php 설치 - php openssl 연동을 위한 configure 옵션

- linux yum을 이용한 openssl 설치

- yum을 이용한 php 설치

Posted by 은둔고수
프로그램/php2014. 11. 7. 01:10

[리눅스에서 PHP 버전 확인하기]

 

]# php -i

- 내용 중에서 PHP Version 부분을 확인한다.

 

 

 

 

내용이 많아 확인하기 어렵다면 grep을 이용해서 원하는 내용을 쉽게 확인할 수 있다.

 

]# php -i | grep "PHP Version"

 

 

 

 

참고>php -i 실행시 "그런 파일이나 디렉토리가 없음"과 같은 문구가 나타나면

"php 쉘(shell) 에러 - bash: /usr/bin/php: 그런 파일이나 디렉토리가 없음"을 참고한다.

 

 

 

 

 

참고>php -i 실행시 "magic_quotes_qpc" PHP Fatal error가 발생했다면

"php 쉘(shell) 에러 - PHP Fatal error: Directive 'matic_quotes_qpc' is no longer available in PHP in Unknown on line 0"을 참고한다.

 

 

 

 

]# php -v

 

 

 

 

 

 

[웹 브라우저를 이용해서 PHP 버전 확인하기]

 

- phpinfo()를 출력하는 php 파일을 만들어서 웹 브라우저에서 실행한다.

Posted by 은둔고수
프로그램/php2014. 8. 13. 18:17

php 재 컴파일, 모듈 추가, 기타 등등 후 make 실행 중 "ext/모듈/*.lo" 에러 발생

 

 

오류 내용 예>

libtool: link: `ext/date/php_date.lo' is not a valid libtool object

- php 재 컴파일, 모듈 추가, 기타 등등 후 make 실행 중 발생 

 

방법> ext/모듈/*.lo 파일을 삭제 후 다시 실행한다.

]# cd /usr/local/src/apm/php-5.4.2/ext/모듈/

]# rm -rf 오류파일명.lo

 

 

 

삭제 후 다시 실행해도 다른 모듈의 *.lo 파일 오류가 계속 발생한다면 모든 모듈의 *.lo 파일을 삭제 후 다시 실행한다.

 

- 모든 모듈의 *.lo 파일 삭제하는 방법

Posted by 은둔고수
프로그램/php2014. 8. 13. 17:28

php 설치 후에 추가로 설치할 모듈이 있어 configure 옵션을 추가, 변경해서 php를 재 컴파일을 해야 하는 경우

 

 

추가할 모듈이 설치되어있는지 확인한다. (> openssl, mcrypt)

 

 

 

기존에 설치했던 소스 디렉토리로 이동한다.

]# cd /usr/local/src/apm/php-5.4.2/

 

재 컴파일이 하기 전 php.ini와 같은 설정파일이나 중요한 파일들을 백업해둔다.

]# mkdir usr/local/src/apm/php-5.4.2_bk

]# cp / usr/local/src/apm/php-5.4.2/* usr/local/src/apm/php-5.4.2_bk/

 

 

추가할 모듈을 php configure 기존 옵션에 추가한다.

]# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs --disable-debug --with-iconv --with-gd --with-jpeg-dir --with-png-dir --with-libxml-dir --with-freetype-dir --with-zlib-dir --with-config-file-path=/usr/local/apache/conf --enable-sockets --with-openssl --with-mcrypt

 

 

 

]# make

참고>make 실행 중에 libtool: link: `ext/date/*.lo' is not a valid libtool object ...

등 위와 비슷한 오류가 발생했다면... 자세히>

 

 

 

]# make install

중요>make 완료 후 make install을 실행해야 한다.

 

 

apache를 재시작한다.

]# service httpd restart

 

 

모듈이 추가되었는지 확인을 한다.

- openssl, mcrypt 모듈 설치 확인php openssl 연동 확인

Posted by 은둔고수