[CodeIgniter] _rmap을 이용한 화면 상단, 하단 레이어 고정[CodeIgniter] _rmap을 이용한 화면 상단, 하단 레이어 고정

Posted at 2020. 2. 12. 17:31 | Posted in PHP/CodeIgniter




■ 코드이그나이터에서 헤더 푸터 레이아웃 지정





코드이그나이터의 함수요청 리다이렉트를 통해


웹 페이지 상단(헤더), 하단(푸터)를 고정적으로 노출 시키려고 한다.


기본적으로 코드이그나이터를 세팅하면 보게되는


Welcome to CodeIgniter! 페이지에


헤더와 푸터를 나타내 보자




# 컨트롤럴 소스코드

 /codeIgniter/application/controllers/Welcome.php

<?php

defined('BASEPATH') OR exit('No direct script access allowed');


class Welcome extends CI_Controller {


/**

@brief 기본 Wellcome to CodeIgniter! 페이지 지정

*/

public function index() {

$this->load->view("welcome_message");

}


/**

* @brief 사이트 헤더, 푸터가 자동으로 추가

*/

public function _remap($method) {


// brief 헤더 load

$this->load->view("layer/headder_view");


if(method_exists($this, $method)) {

$this->{"{$method}"}();

}


// @brief 푸터 load

$this->load->view("layer/footer_view");

}

}




# 헤더 레이아웃

 /codeIgniter/application/views/layer/headder_view.php

<header style="background-color:#333333;padding-top:30px;padding-left:20px;padding-bottom:20px;">

    <a href="http://magic.wickedmiso.com/" style="color:#FFFFFF;text-decoration:none;">

        <span style="font-size:20px;font-weight:bold;color:#C52D2F;">사악미소</span>의 현대마법의 공방

    </a>

</header>




# 푸터 레이아웃

 /codeIgniter/application/views/layer/footer_view.php

<footer style="background-color:#333333;padding-top:15px;padding-left:40px;padding-bottom:15px;color:#FFFFFF;">

    Created by saakmiso

</footer>





# 출력결과








Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[PHP] PHPExcel 시트 추가하기[PHP] PHPExcel 시트 추가하기

Posted at 2020. 2. 11. 20:06 | Posted in PHP/PHP Library




■ PHPExcel 시트 나누고 데이터 삽입하기



# 소스코드

<?php

include "./classes/PHPExcel.php";

$objPHPExcel = new PHPExcel();


$rocketPunch = array(


    // 첫번째 시트에 사용될 데이터 값

    "pinkPunch" => array(

          "1" => "PINK PUNCH"

        , "2" => "BIM BAM BUM"

        , "3" => "Love Is Over"

        , "4" => "Lucid Dream"

        , "5" => "Favorite"

        , "6" => "Do Something"

    )


    // 두번째 시트에 사용될 데이터 값

    , "redPunch" => array(

          "1" => "RED PUNCH"

        , "2" => "BOUNCY"

        , "3" => "So Solo"

        , "4" => "Fireworks"

        , "5" => "Paper Star"

        , "6" => "Lilac"

        , "7" => "Girl Friend"

    )

);


// @breif Worksheet 라는 이름으로 생성되는 기본 시트를 삭제한다.

$objPHPExcel -> removeSheetByIndex(0);


// @breif 생성할 시트의 순번

$sheetNum = 0;


foreach($rocketPunch as $title => $album) {


    // @breif createSheet( ) 함수로 새로운 시트를 생성한다.

    $objWorkSheet = $objPHPExcel -> createSheet($sheetNum);


    // @breif 엑셀 시트 이름 지정

    $objWorkSheet -> setTitle($title);


    // @breif 타이틀 영역 지정

    $objWorkSheet -> setCellValue("A1", "NO.");

    $objWorkSheet -> setCellValue("B1", "Song");


    // @breif 엑셀에 데이터 삽입

    $row = 1;

    foreach($album as $key => $val) {

        $row++;

        $objWorkSheet -> setCellValue(sprintf("A%s", $row), $key);

        $objWorkSheet -> setCellValue(sprintf("B%s", $row), $val);

    }


    // @breif 각 행의 간격

    $objWorkSheet -> getColumnDimension("A") -> setWidth(10);

    $objWorkSheet -> getColumnDimension("B") -> setWidth(30);


    // @breif 각 로우의 디자인

    $objWorkSheet -> getStyle(sprintf("A1:B%s", $row)) -> getAlignment() ->

    setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

    $objWorkSheet -> getStyle(sprintf("A1:B%s", $row)) -> getBorders() -> getAllBorders() ->

    setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

    $objWorkSheet -> getStyle("A1:B1") -> getFont() -> setBold(true);

    $objWorkSheet -> getStyle("A1:B1") -> getFill() -> setFillType(PHPExcel_Style_Fill::FILL_SOLID) ->

    getStartColor() -> setRGB("CECBCA");

    $objWorkSheet -> getStyle(sprintf("A2:B%s", $row)) -> getFill() -> setFillType(PHPExcel_Style_Fill::FILL_SOLID) ->

    getStartColor() -> setRGB("F4F4F4");


    // @breif 숫자앞에 기본적으로 0을 붙일 수 있게 한다.

    $objWorkSheet -> getStyle(sprintf("A2:A%s", $row)) -> getNumberFormat() -> setFormatCode("00");


    $sheetNum++;

}


// @breif 문서를 오픈할 시 첫번째 시트로 열리게 설정

$objPHPExcel -> setActiveSheetIndex(0);


// @breif 파일의 저장형식이 utf-8일 경우 한글파일 이름은 깨지므로 euc-kr로 변환해준다.

$filename = iconv("UTF-8", "EUC-KR", "울림_로켓펀치");


header("Content-Type:application/vnd.ms-excel");

header("Content-Disposition: attachment;filename=".$filename.".xls");

header("Cache-Control:max-age=0");


$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel5");

$objWriter -> save("php://output");

?>




# 출력결과









Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[PHP] JSON 데이터 화면에 출력하기[PHP] JSON 데이터 화면에 출력하기

Posted at 2020. 1. 16. 13:53 | Posted in PHP




참고 : https://kdevkr.github.io/archives/2018/understanding-http-content-types/




■ JSON 데이터 JSON 타입으로 변환해서 처리하기




PHP 상에서 API를 제공하는 경우 그 형식이 JSON 타입일때


단순히 TEXT 형태로 JSON 데이터를 나열하는것이 아니라.


Content-Type의 헤더를 :application/json으로 페이로드와 함께 HTTP 요청을 하게 되면


서버가 JSON 타입으로 변환해서 처리한다.




  Content-Type:application/json; 을 설정한 경우


# 소스코드

<?php

header( "Content-Type:application/json;charset=UTF-8" );


$json = '{

    "SlayerS_BoxeR" : {

          "name" : "임요환"

        , "species" : "테란"

        , "birthday" : "1980-09-04"

        , "team" : "SK텔레콤 T1"

    }

    , "YellOw" : {

        "name" : "홍진호"

      , "species" : "저그"

      , "birthday" : "1982-10-31"

      , "team" : "KTF 매직엔스"

    }

    , "Nal_rA" : {

        "name" : "강민"

      , "species" : "프로토스"

      , "birthday" : "1982-03-15"

      , "team" : "KTF 매직엔스"

    }

}';

echo $json;

?>




# 출력결과





 Content-Type:text/html인경우



# 소스코드

<?php

// @breif Content-Type 주석처리

// header( "Content-Type:application/json;charset=UTF-8" );


$json = '{

    "SlayerS_BoxeR" : {

          "name" : "임요환"

        , "species" : "테란"

        , "birthday" : "1980-09-04"

        , "team" : "SK텔레콤 T1"

    }

    , "YellOw" : {

        "name" : "홍진호"

      , "species" : "저그"

      , "birthday" : "1982-10-31"

      , "team" : "KTF 매직엔스"

    }

    , "Nal_rA" : {

        "name" : "강민"

      , "species" : "프로토스"

      , "birthday" : "1982-03-15"

      , "team" : "KTF 매직엔스"

    }

}';

echo $json;

?>




# 출력결과



위 두개의 결과처럼 똑같이 JSON 데이터를 화면에 뿌려주지만


어떻게 인식하고 처리하는지 여부를 한눈에 확인할 수 있다.









Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[PHP] PHP 파일 업로드시 용량 설정 변경[PHP] PHP 파일 업로드시 용량 설정 변경

Posted at 2020. 1. 16. 10:28 | Posted in PHP/PHP Setting




참고 : https://webdir.tistory.com/221

참고 : https://zetawiki.com/wiki/PHP_업로드_설정





■ PHP.ini의 파일 업로드 설정 확인하기



 $ php -ini | grep php.ini

 $ sudo vim /etc/php/7.2./cli/php.ini


※ 기본값은 리눅스 버전 및 PHP 버전등 환경에 따라 조금 다를 수 있다.



#01. max_execution_time ( 기본값 : 30 )


 -. 파일업로드시 작업 처리 최대 제한시간을 설정한다.

 -. 지정한 시간보다 길어지는 경우 오류가 발생한다.

 -. 30은 30초를 의미한다.

 -. 0 또는 -1을 입력하면 무한대로 설정된다.




#02. max_input_time ( 기본값 : 60 )


 -. 스크립트 페이지로 넘어가기 전에 PHP 엔진이 데이털르 업로드 받는 시간을 설정한다.

 -. 만일 여러 메가 바이트의 데이터를 전송해야 하는 경우 max_input_time은 높아야 한다.

 -. 스크립트에서 set_time_limit( ) 함수를 호출해서 max_input_time의 PHP.ini 파일의 설정을 재정의 할 수 있다.

 -. PHP에서 set_time_limit( 0 )으로 설정하면 두가지 시간을 모두 제어할 수 있어

    업로드페이지에 이 코드를 삽입하는 것을 추천한다.




#03. memory_limit ( 기본값 : 128 )


 -. PHP의 메모리 제한 기본값은 128MB 이다.

 -. post_max_size가 만약 100M를 넘어간다면 memory_limit( 기본값 128M )를 최소 40M 가량 더해 적용해야 한다.

 -. PHP엔진이 POST로 전달되는 데이터를 철히나느 경우에는 전달되는 데이터의 일부를 유지하기 위해 메모리가 사용된다.

 -. memory_limit의 값을 너무 높은 값을 설정하는 것은 매우 위험할 수 있는데,

    이는 여러개의 업로드들이 동시에 처리되는 경우 사용가능한 모든 메모리를 사용해 버려

    다른 관련 없는 스크립트 뿐만 아니라 서버 전에체 영향을 미치게 된다.
 -. 0 또는 -1로 설정할경우 메모리 사용의 제한이 없어진다.




#04. post_max_size ( 기본값 : 8M )


 -. POST 방식으로 넘겨질 최대 데이터 사이즈를 설정한다.

 -. post_max_size는 upload_max_filesize보다 20% 크게 지정해야 한다.

    통신 비트는 일반적으로 8bit 후 2bit의 별도의 패리티비트( 오류정정 )가 포함되기 때문이다.




#05. file_uploads ( 기본값 : On )


 -. 파일 업로드 허용 여부

 -. 상태가 Off로 설정되어 있을 경우 업로드 할 수 없다.




#06. upload_tmp_dir ( 기본값 : /tmp )


 -. 업로드 처리시 임시 저장 디렉토리




#07. upload_max_filesize ( 기본값 : 2M )


 -. 최대 업로드 파일사이즈를 지정한다.

 -. 원하는 용량만큼 설정하면 된다.




#08. max_file_uploads ( 기본값 : 20 )


 -. 업로드시 한번에 올릴 수 있는 파일의 최대 갯수 제한 설정










■ Apache 및 PHP 재시작




모든 설정 변경이 완료되었으면


아파치를 재시작 한다.


간혹 PHP7 버전 이상 및 설정에 따라


먼저 PHP를 재시작 이후 아파치를 재시작 해야 한다.







Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[CodeIgniter] 폼 검증하기[CodeIgniter] 폼 검증하기

Posted at 2019. 12. 17. 18:36 | Posted in PHP/CodeIgniter




■ 형식 검토



http://www.ciboard.co.kr/user_guide/kr/libraries/form_validation.html


규칙

파라미터

설명

required

NO

 · 검사 대상이 비어있으면 FALSE를 리턴한다.

matches

YES

 · 검사 대상이 파라미터의 값과 일치하지 않을 때 FALSE를 리턴한다.

is_unique

YES

 · 파라미터에서 테이블 및 필드 이름이 유일하지 않다면 FALSE를 리턴한다.

alpha

NO

 · 검사 대상이 알파벳 이외의 문자를 포함할 때 FALSE를 리턴한다.

alpha_numeric

NO

 · 검사 대상이 알파벳이나 숫자가 아닌 문자를 포함할 때 FALSE를 리턴한다.

alpha_dash

NO

 · 검사 대상이 알파벳, 숫자, 밑줄(...), 대시(...) 이외의 문자를 포함할 때 FALSE를 리턴한다.

numeric

NO

 · 검사 대상이 숫자 이외의 문자를 포함할 때 FALSE를 리턴한다.

integer

NO

 · 검사 대상이 정수 이외의 문자를 포함할 때 FALSE를 리턴한다.

decimal

YES

 · 검사 대상이 소수 이외의 문자를 포함할 때 FALSE를 리턴한다.

is_natural

NO

 · 검사 대상이 자연수 이외의 문자를 포함할 때 FALSE를 리턴한다.

   ( 0, 1, 2, 3, ... 등인지 검사 )

is_natural_no_zero

NO

 · 검사 대상이 1 이상의 자연수 이외의 문자를 포함할 때 FALSE를 리턴한다.

   ( 1, 2, 3 ... 등인지 검사 )

valid_email

NO

 · 검사 대상이 유효한 이메일 주소가 아닐 때 FALSE를 리턴한다.

valid_emails

NO

 · 검사 대상이 콤마( , )로 구분된 이메일 주소일 경우에 사용

 · 유효한 이메일 주소가 아닐 때 FALSE를 리턴한다.

   ( 여러개의 이메일을 한꺼번에 검사 )

valid_ip

NO

 · 검사 대상이 유효한 IP 주소가 아닐 때 FALSE를 리턴한다.

 · IP포맷을 검증하기 위해 "ipv4" 또는 "ipv6"를 구별하는 파라미터를 받을 수 있다.



 codeIgniter/system/language/english/form_validation_lang.php

defined('BASEPATH') OR exit('No direct script access allowed');


$lang['form_validation_required'] = "The {field} field is required.";

$lang['form_validation_isset'] = "The {field} field must have a value.";

$lang['form_validation_valid_email'] = "The {field} field must contain a valid email address.";

$lang['form_validation_valid_emails'] = "The {field} field must contain all valid email addresses.";

$lang['form_validation_valid_url'] = "The {field} field must contain a valid URL.";

$lang['form_validation_valid_ip'] = "The {field} field must contain a valid IP.";

$lang['form_validation_valid_base64'] = "The {field} field must contain a valid Base64 string.";

$lang['form_validation_min_length'] = "The {field} field must be at least {param} characters in length.";

$lang['form_validation_max_length'] = "The {field} field cannot exceed {param} characters in length.";

$lang['form_validation_exact_length'] = "The {field} field must be exactly {param} characters in length.";

$lang['form_validation_alpha'] = "The {field} field may only contain alphabetical characters.";

$lang['form_validation_alpha_numeric'] = "The {field} field may only contain alpha-numeric characters.";

$lang['form_validation_alpha_numeric_spaces'] = "The {field} field may only contain alpha-numeric characters and spaces.";

$lang['form_validation_alpha_dash'] = "The {field} field may only contain alpha-numeric characters, underscores, and dashes.";

$lang['form_validation_numeric'] = "The {field} field must contain only numbers.";

$lang['form_validation_is_numeric'] = "The {field} field must contain only numeric characters.";

$lang['form_validation_integer'] = "The {field} field must contain an integer.";

$lang['form_validation_regex_match'] = "The {field} field is not in the correct format.";

$lang['form_validation_matches'] = "The {field} field does not match the {param} field.";

$lang['form_validation_differs'] = "The {field} field must differ from the {param} field.";

$lang['form_validation_is_unique'] = "The {field} field must contain a unique value.";

$lang['form_validation_is_natural'] = "The {field} field must only contain digits.";

$lang['form_validation_is_natural_no_zero'] = "The {field} field must only contain digits and must be greater than zero.";

$lang['form_validation_decimal'] = "The {field} field must contain a decimal number.";

$lang['form_validation_less_than'] = "The {field} field must contain a number less than {param}.";

$lang['form_validation_less_than_equal_to'] = "The {field} field must contain a number less than or equal to {param}.";

$lang['form_validation_greater_than'] = "The {field} field must contain a number greater than {param}.";

$lang['form_validation_greater_than_equal_to'] = "The {field} field must contain a number greater than or equal to {param}.";

$lang['form_validation_error_message_not_set'] = "Unable to access an error message corresponding to your field name {field}.";

$lang['form_validation_in_list'] = "The {field} field must be one of: {param}.";




■ 입력 길이



규칙 

파라미터

설명

min_length

YES

 · 검사 대상의 길이가 파라미터 값보다 작을 때 FALSE를 리턴한다.

max_length

YES

 · 검사 대상의 길이가 파라미터 값보다 클 때 FALSE를 리턴한다.

exact_length

YES

 · 검사 대상의 길이가 파라미터 값과 다를 때 FALSE를 리턴한다.

greater_than

YES

 · 검사 대상이 지정된 값보다 작거나 숫자가 아닌경우 FALSE를 리턴한다.

less_than

YES

 · 검사 대상이 지정된 값보다 크거나 숫자가 아닌 경우 FALSE를 리턴한다.





■ 폼 검증 예


<?php


      // @details 필드의 앞뒤 공백제거 | 필수 필드 | 5자 이상 | 12자 이하 | 필드에서 XSS 공격에 해당하는 내용 제거

      $this->form_validation->set_rules( "username", "Username", "trim | required | min_length[5] | max_length[12] | xss_clean" ); 


      // @details 필드의 앞뒤 공백 제거 | 필수 필드 | passconf 필드와 매칭되는지 체크 | MD5로 변환

      $this->form_validation->set_rules( "password", "Password", "trim | required | matches[passconf] | md5" );


      // @details 필드의 앞뒤 공백 제거 | 필수 필드 | 이메일 형식이 맞는지 체크

      $this->form_validation->set_rules( "email", "Email", "trim | required | valid_email" );


?>











■ 폼 검증 에러메시지를 한글로 표시하기


 codeIgniter/application/config/config.php

<?php

defined('BASEPATH') OR exit('No direct script access allowed');


      // ~~ 이 하 생 략 ~~


/*

|--------------------------------------------------------------------------

| Default Language

|--------------------------------------------------------------------------

|

| This determines which set of language files should be used. Make sure

| there is an available translation if you intend to use something other

| than english.

|

*/

// $config['language'] = "english";

$config['language'] = "korea";


      // ~~ 이 하 생 략 ~~





 codeIgniter/system/language/korean/form_validation_lang.php

defined('BASEPATH') OR exit('No direct script access allowed');


$lang['form_validation_required'] = "{field} 필드가 필요합니다.";

$lang['form_validation_isset'] = "{field} 필드는 반드시 필요한 값입니다.";

$lang['form_validation_valid_email'] = "{field} 필드는 유효한 이메일 주소를 반드시 포함해야 합니다.";

$lang['form_validation_valid_emails'] = "{field} 필드는 모든 유효한 이메일 주소를 반드시 포함해야 합니다.";

$lang['form_validation_valid_url'] = "{field} 필드는 유효한 URL을 포함해야 합니다.";

$lang['form_validation_valid_ip'] = "{field} 필드는 유효한 IP를 포함해야 합니다.";

$lang['form_validation_valid_base64'] = "{field} field must contain a valid Base64 string.";

$lang['form_validation_min_length'] = "{field} 필드의 길이는 최소한 {param} 개의 문자를 넘어야 합니다.";

$lang['form_validation_max_length'] = "{field} 필드의 길이는 최대 {param} 개의 문자를 넘어서는 안됩니다.";

$lang['form_validation_exact_length'] = "{field} 필드의 길이는 정확히 {param} 개의 문자여야 합니다.";

$lang['form_validation_alpha'] = "{field} 필드는 알파벳 문자만 포함할 수 있습니다.";

$lang['form_validation_alpha_numeric'] = "{field} 필드는 알파벳 문자와 숫자만 포함할 수 있습니다.";

$lang['form_validation_alpha_numeric_spaces'] = "{field} 필드는 알파벳 문자와 숫자, 그리고 공백만 포함할 수 있습니다.";

$lang['form_validation_alpha_dash'] = "{field} 필드는 알파벳 문자와 숫자, 밑줄, 대시만 포함할 수 있습니다.";

$lang['form_validation_numeric'] = "{field} 필드는 반드시 숫자만 포함할 수 있습니다.";

$lang['form_validation_is_numeric'] = "{field} 필드는 반드시 숫자만 포함할 수 있습니다.";

$lang['form_validation_integer'] = "{field} 필드는 반드시 정수만 포함할 수 있습니다.";

$lang['form_validation_regex_match'] = "{field} 필드는 형식이 맞지 않습니다.";

$lang['form_validation_matches'] = "{field} 필드가 {param} 필드와 일치하지 않습니다.";

$lang['form_validation_differs'] = '{field} 필드는 {param} 필드와 값이 달라야만 합니다.';

$lang['form_validation_is_unique'] = "{field} 필드는 고유값을 포함해야 합니다.";

$lang['form_validation_is_natural'] = "{field} 필드는 자연수만 포함할 수 있습니다.";

$lang['form_validation_is_natural_no_zero'] = "{field} 필드는 0을 초과하는 자연수만 포함할 수 있습니다.";

$lang['form_validation_decimal'] = "{field} 필드는 10진수여야 합니다.";

$lang['form_validation_less_than'] = "{field} 필드는 {param} 필드보다 작은 값이어야 합니다.";

$lang['form_validation_less_than_equal_to'] = "{field} 필드는 {param} 필드보다 작거나 같은 값이어야 합니다.";

$lang['form_validation_greater_than'] = "{field} 필드는 {param} 필드보다 큰 숫자여야 합니다.";

$lang['form_validation_greater_than_equal_to'] = "{field} 필드는 {param} 필드보다 크거나 같은 숫자여야 합니다.";

$lang['form_validation_error_message_not_set'] = "{field} 필드는 오류 메세지와 일치하여 사용할 수 없습니다.";

$lang['form_validation_in_list'] = "{field} 필드는 다음중 하나여야 합니다. : {param}";







Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[CodeIgniter] 컨트롤러(Controllers) 사용방법[CodeIgniter] 컨트롤러(Controllers) 사용방법

Posted at 2019. 7. 31. 16:39 | Posted in PHP/CodeIgniter




참고 : http://www.ciboard.co.kr/user_guide/kr/general/controllers.html





■ 컨트롤러란 무엇인가?



컨트롤러는 URL과 상호작용하는 클래스 파일이라고 할 수 있다.


파일명(File.php)과 클래스(File)명의 첫글자는 항상 대문자 이여야 한다.


클래스명은 컨트롤러 파일명과 동일해야 한다.



 ./application/controllers/Blog.php

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Blog extends CI_Controller {

public function index() {

echo "사악미소의 현대마법의 IT공방";

}

}


/* END of file Blog.php */

/* Location : ./application/controllers/Blog.php */




# 출력결과 : http://code-igniter.com/index.php/blog/










■ 함수 호출하기




이전 예제에서 호출된 함수는 index( )였는데, index( ) 함수는 URI에서 두번째 새그먼트가 전달되지 않은 경우 기본적으로 실행이 된다.


이번에는 URI에 새그먼트 값을 추가하여 Blog라는 클래스에 comments( )라는 함수를 호출해 보자.


 ./application/controllers/Blog.php

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Blog extends CI_Controller {

public function index() {

echo "사악미소의 현대마법의 IT공방";

}

public function comments() {

echo "방문해 주셔서 감사합니다";

}

}


/* END of file Blog.php */

/* Location : ./application/controllers/Blog.php */




# 출력결과 : http://code-igniter.com/index.php/blog/comments




그럼 위와 같이 새로운 메세지가 출력되는 것을 확인 할 수 있다.








■ URI 세그먼트 값을 함수에 전달하기




 ./application/controllers/Products.php

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Products extends CI_Controller {

public function shoes($sandals, $id) {

echo sprintf("sandals : %s", $sandals);

echo "<br/>";

echo sprintf("id : %s", $id);

}

}


/* END of file Products.php */

/* Location : ./application/controllers/Products.php */





# 출력결과 : http://localhost/index.php/products/shoes/sandals/123










■ 기본 컨트롤러 정의



코드이그나이터에서는 새그먼트 없이 사이트의 루트 URI만 요청될때 실행되는 기본 컨트롤러를 지정할 수 있다.


기본 컨트롤러를 지정하려면 ../application/config/routes.php 파일의 $route[ 'default_controller' ] 의 값을 설정해 주면된다.


 ./application/config/routes.php

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


      /* 주 석 생 략 */


$route['default_controller'] = "First";

$route['404_override'] = "";

$route['translate_uri_dashes'] = FALSE;



이제 First.php 파일을 controllers 디렉토리에 생성하고.


아래와 같은 코드를 작성해 보자.



 ./application/controllers/Blog.php

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class First extends CI_Controller {

public function index() {

echo "https://www.google.co.kr";

}

}


/* END of file First.php */

/* Location : ./application/controllers/First.php */





# 출력결과 : https://localhost




단순히 http://localhost라는 기본 주소를 입력하는 것만으로도


http://localhost/index.php/first 를 호출한것과 같은 결과를 얻을 수 있다.









■ 함수요청 재맵핑하기




일반적으로 URI의 두번째 새그먼트는 컨트롤러내의 어떤 함수를 실행할 것인가를 결정하낟.


이런 일반루틴을 재정의 하여 원하는 액션으로 바꿀 수 있다.



 http://code-igniter.com/index.php/rmapping/zerg 

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Rmapping extends CI_Controller {

public function _remap($method) {

if($method === "zerg") {

$this->zerg();

} else if($method === "protoss") {

$this->protoss();

} else {

$this->terran();

}

}

public function zerg() {

echo "군단의 심장";

}

public function protoss() {

echo "공허의 유산";

}

public function terran() {

echo "자유의 날개";

}

}


/* END of file Rmapping.php */

/* Location : ./application/controllers/Rmapping.php */




# 출력결과 : http://localhost/index.php/rmapping/zerg




위와 같이 출력되는 것을 확인 할 수 있다.




※ 참고


../application/config/routes.php 페이지의 


$route['default_controller'] 값을 "Rmapping" 으로 변경하고 사용하게 되면



# 출력결과 : http://localhost/index.php/rmapping/protoss









■ Private 접근제어 함수



PHP에는 public, private, protected 라는 3가지 접근 제어자가 존재한다.


접근제어자

기     능

public

 · class 밖에서도 함수에 접근이 가능하다.

 · 아무것도 명시하지 않으면 기본값이 public으로 선언된다.

private

 · 클래스 내부에서만 접근이 가능하다.

 · 상속이 불가능 하다.

protected

 · 클래스 내부에서만 접근이 가능하다.

 · 상속이 가능하다.







<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Access extends CI_Controller {

public function index() {

echo "접 근 가 능";

}

private function _utility() {

echo "접 근 불 가";

}

}


/* END of file Access.php */

/* Location : ./application/controllers/Access.php */




# 출력결과 : http://localhost/index.php/Access/index




# 출력결과 : http://localhost/index.php/Access/_utility



위와같이 URI의 새그먼트 값으로 _utility 함수를 호출하려고 하는경우


페이지를 찾을 수 없다는 404 Page Not Found


에러가 발생하는것을 확인 할 수 있다.








■ 클래스 생성자




컨트롤러에서 생성자를 사용하고자 한다면 생성자아래 반드시 아래의 코드가 들어있어야 한다.


 parent :: __construct( );


그렇지 않으면 직접 구현한 모든 생성자가 부모 controoler의 생성자를 재정의 하기 때문에


반드시 부모 controller를 수동으로 호출해 주어야 한다.



생성자는 클래스가 초기화될 때 어떤 기본값들을 설정해야 한다거나 어떤 프로세스를 수행해야 할때 유용하다.


생성자는 리턴값이 있어서는 안된다.



 

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Products extends CI_Controller {

public function __construct() {

parent::__construct();

}

}


/* END of file Products.php */

/* Location : ./application/controllers/Products.php */










Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[PHP] DB접속 테스트하기[PHP] DB접속 테스트하기

Posted at 2019. 7. 30. 17:00 | Posted in PHP/PHP Setting




참고 : https://blog.naver.com/diceworld/220292090236




■ PHP  데이터 베이스 접속 테스트




# 소스코드

<?php


error_reporting(E_ALL);

ini_set("display_errors", 1);

date_default_timezone_set('Asia/Seoul');


$conn = mysqli_connect( "접속IP주소", "아이디", "비밀번호", "데이터베이스명", "포트" );


if( empty( $conn ) == true ) {


      echo ( "#############################################################################" );

              echo ( "</br> default DBMS 접속 호스트 정보가 정확하지 않습니다. </br>\n\n" );

          exit ( "#############################################################################" );


} else {


      echo ( "#############################################################################" );

          echo ( "</br> default DBMS 접속에 성공하였습니다. </br>\n\n" );

          echo ( "-----------------------------------------------------------------------------" );

          echo ( "<pre>" );

          print_r ( $conn );

          echo ( "</pre>" );

          exit ( "#############################################################################" );


}

mysqli_close( $conn );

?>





# 출력결과









Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[CodeIgniter] DataBase 접속 설정하기[CodeIgniter] DataBase 접속 설정하기

Posted at 2019. 7. 25. 17:06 | Posted in PHP/CodeIgniter





참고 : http://www.ciboard.co.kr/user_guide/kr/database/configuration.html




■ 코드이그나이터에서 DB 접속 설정하기



/application/config/database.php에 사용자, 비밀번호, HOST, 데이터베이스명을 입력해야 한다.



 /application/config/database.php

<?php

defined('BASEPATH') OR exit('No direct script access allowed');


/* 주 석 생 략 */


$active_group = "default";

$query_builder = TRUE;


/*

$db['default'] = array(

  "dsn" => ""

, "hostname" => "IP주소"

, "username" => "DB접속계정"

, "password" => "계정비밀번호"

, "database" => "DB이름"

, "dbdriver" => "mysqli"

, "dbprefix" => ""

, "pconnect" => FALSE // pconnect 값이 TRUE일 사용할 경우 웹 호스팅 환경에서는 실행이 되지 않는다.

, "db_debug" => (ENVIRONMENT !== "production")

, "cache_on" => FALSE

, "cachedir" => ""

, "char_set" => "utf8"

, "dbcollat" => "utf8_general_ci"

, "swap_pre" => ""

, "encrypt" => FALSE

, "compress" => FALSE

, "stricton" => FALSE

, "failover" => array()

, "save_queries" => TRUE

);

*/


// DB 설정

$db['default']['dsn'] = "";

$db['default']['hostname'] = "DB IP주소";

$db['default']['username'] = "DB접속계정 아이디";

$db['default']['password'] = "DB접속계정 비밀번호";

$db['default']['database'] = "DB 이름";

$db['default']['dbdriver'] = "mysqli";

$db['default']['port'] = "3306";

$db['default']['dbprefix'] = "";

$db['default']['pconnect'] = FALSE;      // pconnect 값이 TRUE일 사용할 경우 웹 호스팅 환경에서는 실행이 되지 않는다.

$db['default']['db_debug'] = (ENVIRONMENT !== "production");

$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']['encrypt'] = FALSE;

$db['default']['compress'] = FALSE;

$db['default']['stricton'] = FALSE;

$db['default']['failover'] = array( );

$db['default']['save_queries'] = TRUE;


$arrParseUrlparse_url$_SERVER[ 'HTTP_HOST' ] );


if( ( isset$_SERVER[ 'HTTPS' ] ) && $_SERVER[ 'HTTPS' ] == "on" ) ) {

    $arrParseUrl[ 'scheme' ] = "https";

} else {

    $arrParseUrl[ 'scheme' ] = "http";

}


if ( strlen ( trim$db['default']['hostname'] ) ) == 0 ) {

    echo( "#############################################################################" );

    echo "</br> default DBMS 접속 호스트 정보가 정확하지 않습니다. </br>\n\n";

    echo "<pre>";

    var_export$arrParseUrl );

    echo "</pre>";

    exit( "-----------------------------------------------------------------------------" );

    echo "<pre>";

    var_export$db );              

    echo "</pre>";

    exit( "#############################################################################" );

}



※ 데이타베이스 설정값

환경값

설     

dsn

 · DSN 연결문자

hostname

 · 데이터베이스 서버의 IP주소

 · 같은 서버일경우 localhost, 120.0.0.1

username

 · 데이터베이스의 사용자 아이디

password

 · 데이터베이스의 사용자 비밀번호

database

 · 연결하고자 하는 데이터베이스 이름

dbdriver

 · 데이터베이스 타입

 · mysqli, postgre, odbc, etc등

 · 반드시 소문자 여야만 한다.

port

 · 데이터베이스 포트 번호

dbprefix

 · Query Builder를 사용할 경우 테이블명에 자동으로 접두어를 붙임

 · 하나의 데이터베이스로 여러개의 CodeIgniter를 사용할 때 유용함

pconnect

 · 영속적연결(Persistent Connection)을 사용할 것인지 말것인지 결정한다.

 · BOOLEAN 타입( TRUE / FALSE )

db_deboug

 · 데이터베이스 에러를 표시할지 말지를 결정

 · BOOLEAN 타입( TRUE / FALSE )

cache_on

 · 데이터베이스 쿼리를 캐시할 것인지를 결정(쿼리를 텍스트 파일로 캐싱하여 데이터베이스의 부하를 줄인다.)

 · BOOLEAN 타입( TRUE / FALSE )

cachedir

 · 데이터베이스 쿼리 캐시가 저장될 절대경로

char_set

 · 데이터베이스와 통신할 때 사용할 문자셋

dbcollat

 · 데이터베이스와 통신할 때 사용되는 문자열 대조법(Character Collation)

 · 'mysql'과 'mysqli' 드라이버에서만 사용된다.

swap_pre

 · 기본 테이블 접두어가 dbprefix에서 교체된다.

 · 수동으로 작성된 쿼리를 실행하고, 최종 사용자에 의해 변환될 때 접두어가 여전히 필요할 때 유용하다.

schema

 · 데이터베이스 스키마, "public"이 기본이다.

 · PostgreSQL 및 ODBC 드라이버에서 사용한다.

encrypt

 · 암호화 연결을 사용할지 결정

compress

 · 클라이언트 압축을 사용할지를 결정한다.

 · MySQL 전용이다.

stricton

 · 스트릭 모드 연결을 강제로 사용할지 여부를 선택한다.

 · 어플리케이션을 개발하는 동안 엄격한 SQL을 보장하기 위해 좋다.

 · BOOLEAN 타입( TRUE / FALSE )







 /application/models/데이터베이스_처리_모델.php

<?php if ( ! defined("BASEPATH")) exit("No direct script access allowed");


class 데이터베이스_처리_모델 extends CI_Model {


    public $dbObj = null;


    public function __construct() {

        parent::__construct();

        $this->dbObj = $this->load->database( "default", TRUE );


        if( $this->dbObj->initialize() == FALSE ) {

            echo "데이타 베이스 접속에 실패 하였습니다.";

            exit;

        } else {

            echo "데이타 베이스 접속에 성공 하였습니다.";

        }

    }

}




# 출력결과





Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[CodeIgniter] 리눅스 환경에 코드이그나이터 세팅하기[CodeIgniter] 리눅스 환경에 코드이그나이터 세팅하기

Posted at 2019. 7. 23. 17:07 | Posted in PHP/CodeIgniter




■ Linux 환경에 CodeIgniter 설치하기





리눅스 환경코드이그나이터를 설치하기 위해서는


현재 지원중인 코드이그나이터의 버전을 확인해야 한다.


코드이그나이터 사이트( http://www.codeigniter.com/download ) 에 접속하여


사용할 수 있는 버전을 확인하자.







버전을 확인했다면 wget 을 사용하여 해당 버전을 다운로드 받아보자.


 $ sudo wget https://github.com/bcit-ci/CodeIgniter/archive/서비스중인 버전.zip -P /다운받을 디렉토리 경로

 $ sudo wget https://github.com/bcit-ci/CodeIgniter/archive/3.1.10.zip -P /var/www/html/



다운을 받았다면 해당 파일의 압축을 해제한다.


 $ sudo unzip 다운받은 파일.zip -d 압축해제 디렉토리의 경로

 $ sudo unzip /var/www/html/3.1.10.zip -d /var/www/html/




※ 참고 : wget, unzip 설치방법

 

Ubuntu

CentOS

wget

 $ sudo apt-get install wget

 # yum install wget

unzip

 $ sudo apt-get install unzip

 # yum install unzip





압축을 해제했다면 생성된 CodeIgniter 디렉토리의 파일


아파치 서버의 실행 파일 경로로 전부 이동시킨다.


 sudo cp -R /CodeIgniter(압축해제 디렉토리 이름)/* /아파치 서버의 실행 파일 경로

 sudo cp -R /var/www/html/CodeIgniter-3.1.10/* /var/www/html/




코드이그나이터의 설치가 완료되었다면


브라우저를 통해 해당 서버의 IP주소 혹은 도메인( localhost )으로 접속해 보면 아래와 같은 출력결과가 나타나는 것을 확인 할 수 있다.





위와 같은 화면이 나타난다면 모든 코드이그나이터의 설치는 정상적으로 된것이다.










■ Hello World 페이지 만들기




#01. 주소체계 파악하기



Welcome to CodeIgniter 라는 메세지가 브라우저 화면에 정상적으로 출력되었지만


주소입력창에 호스트 및 도메인주소만 입력했는데 특정 컨트롤러가 실행되고, 어떤 뷰가 화면에 출력되었다.


이런 역할을 해주는 것이 /application/config/routes.php 에 존재한다.



 설치경로/application/config/routes.php

<?php

defined('BASEPATH') OR exit('No direct script access allowed');


/* 주 석 생 략 */


$route['default_controller'] = 'welcome';      // Welcome.php 컨트롤러를 실행한다.

$route['404_override'] = '';

$route['translate_uri_dashes'] = FALSE;



주소에 컨트롤러가 입력되지 않았을 경우 welcome.php 컨트롤러가 실행된다.



 설치경로/application/controller/Welcome.php

<?php

defined('BASEPATH') OR exit('No direct script access allowed');


class Welcome extends CI_Controller {

/* 주 석 생 략  */


public function index( )

{

$this->load->view('welcome_message');      // welcome_message.php 파일을 실행한다.

}

}





CodeIgniter의 주소체계는 http:// 호스트 / 컨트롤러 / 메서드로 되어 있다.


routes.php에서 default_controllerwelcome.php로 지정해서 컨트롤러 명을 알 수 있는데 실행되는 메서드 명은 알 수가 없다.


index( ) 메서드를 선언하려면 http://localhost/welcome/까지만 주소를 쳐도 자동으로 http://localhost/welcome/index라고 실행된다.

(에러 방지의 목적도 있기 때문에 index 메서드는 항상 만드는 것이 좋다.)


$this->load->view는 뷰 파일을 로딩하라는 의미이다.


/application/views/welcome_message.php 파일이 로딩되며, 확장자는 생략하고 호출된다.





#02. Hello World 출력하기



Hello World를 화면에 출력하기 위해


/application/views/welcome_message.php 파일의


내용을 아래와 같이 수정해 보자.


 설치경로/application/view/welcome_message.php

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

?><!DOCTYPE html>

<html lang="en">

<head>

<meta charset="utf-8">

<title>Welcome to CodeIgniter</title>


<style type="text/css">


::selection { background-color:#E13300;color:white; }

::-moz-selection { background-color:#E13300;color:white; }


body {

background-color:#FFFFFF;

margin:40px;

font:13px/20px normal Helvetica,Arial,sans-serif;

color:#4F5155;

}


a {

color:#003399;

background-color:transparent;

font-weight:normal;

}


h1 {

color:#444444;

background-color:transparent;

border-bottom:1px solid #D0D0D0;

font-size:19px;

font-weight:normal;

margin:0 0 14px 0;

padding:14px 15px 10px 15px;

}


code {

font-family:Consolas, Monaco, Courier New, Courier, monospace;

font-size:12px;

background-color:#F9F9F9;

border:1px solid #D0D0D0;

color:#002166;

display:block;

margin:14px 0 14px 0;

padding:12px 10px 12px 10px;

}


#body {

margin: 0 15px 0 15px;

}


p.footer {

text-align:right;

font-size:11px;

border-top:1px solid #D0D0D0;

line-height:32px;

padding:0 10px 0 10px;

margin:20px 0 0 0;

}


#container {

margin:10px;

border:1px solid #D0D0D0;

box-shadow:0 0 8px #D0D0D0;

}

</style>

</head>

<body>

<!--

<div id="container">

<h1>Welcome to CodeIgniter!</h1>


<div id="body">

<p>The page you are looking at is being generated dynamically by CodeIgniter.</p>


<p>If you would like to edit this page you'll find it located at:</p>

<code>application/views/welcome_message.php</code>


<p>The corresponding controller for this page is found at:</p>

<code>application/controllers/Welcome.php</code>


<p>If you are exploring CodeIgniter for the very first time, you should start by reading the <a href="user_guide/">User Guide</a>.</p>

</div>

</div>

-->


<!-- 수 정 시 작 -->

<!-- 뷰 파일은 HTML로 구성되어 있어서 일정한 규칙을 개발자와 디자이너가 준수한다면 디자인 분업이 가능하다. -->

<div id="container">

<h1>Hello World</h1>

<div id="body">

<p>CodeIgniter 설치후 볼 수 잇는 화면 입니다.</p>

</div>


<p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds. 

<?php 

echo  (ENVIRONMENT === "development") ?  "CodeIgniter Version <strong>" . CI_VERSION . "</strong>" : ""

?>

</p>

</div>

<!-- 수 정 종료 -->

</body>

</html>



자동으로 로딩되는 output 라이브러리의 변수 중 하나로 { elapsed_time }은 현재 보이는 페이지의 실행 시간을 나타낸다.


어떤 페이지든 { elapsed_time } 를 삽입하면 그 페이지의 실행 시간을 보여준다.


비슷한 변수로 그 페이지 사용량을 보여주는 { memory_usage } 가 있다.














Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[PHP] 배열인지 아닌지를 확인하는 is_array() 함수[PHP] 배열인지 아닌지를 확인하는 is_array() 함수

Posted at 2019. 2. 21. 10:40 | Posted in PHP




■ 해당 변수가 배열인지 아닌지를 체크하는 is_array( ) 함수




# 소스 코드

<?php

$idol = array(

  "twice" => "sana"

, "redvelvet" => "wendy"

, "lovelyz" => "kei"

, "momoland" => "dasiy"

);

// is_array는 배열인 경우 1을 리턴한다.

if(is_array($idol) == 1) {

echo "$idol은 배열입니다.";

} else {

echo "$idol은 배열이 아닙니다.";

}

?> 




# 출력 결과







Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기