[PHP] 서버 접속 가능여부 확인[PHP] 서버 접속 가능여부 확인

Posted at 2020. 5. 29. 15:33 | Posted in PHP




참고 : https://www.php.net/fsockopen





■ 서버간 데이터 통신 가능여부 확인하기




# 소스코드

<?php


    $accessCheck = fsockopen( "120.0.0.1", 포트번호, $errno, $errstr, 10 );


    if( $accessCheck ) {


        echo "서버 ON - 접속 가능";


    } else {


        echo "서버 OFF - 접속 불가";

    }


    fclose( $accessCheck );


?> 



# 접속정보










Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[PHP] PHPExcel 날짜 표시 형식 처리하기[PHP] PHPExcel 날짜 표시 형식 처리하기

Posted at 2020. 4. 26. 18:32 | Posted in PHP/PHP Library






API : http://www.osakac.ac.jp/labs/koeda/tmp/phpexcel/Documentation/API/PHPExcel_Style/PHPExcel_Style_NumberFormat.html





■ PHPExcel에서 날짜 표시 형식의 데이터  읽어오기





PHPExcle의 사용중 특정 열의 값이 날짜 형태로 지정된 경우







해당 데이터를 읽어 들이고 그 값을 출력해 보면



# 출력결과




위와 같이이 날짜 형식을 지정한 열의 값이


이상한 숫자형태의 값으로 출력되는 것을 확인 할 수 있다.


날짜 형식으로 지정된 값을 불러오기 위해서는,


가져온 데이터를 형식에 알맞게 포맷을 해주어야 하기 때문인데.


해당 방법은 아래와 같다.





# 소스코드

<?php

include "./PHPExcel.php";

$objPHPExcel = new PHPExcel();


// 엑셀 데이터를 담을 배열을 선언한다.

$xlsData = array();


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

$filename = iconv("UTF-8", "EUC-KR", "date_format.xls");


try {


    // 업로드한 PHP 파일을 읽어온다.

    $objPHPExcel = PHPExcel_IOFactory::load($filename);

    $sheetsCount = $objPHPExcel -> getSheetCount();


    // 시트Sheet별로 읽기

    for($sheet = 0; $sheet < $sheetsCount; $sheet++) {


        $objPHPExcel -> setActiveSheetIndex($sheet);

        $activesheet = $objPHPExcel -> getActiveSheet();

        $highestRow = $activesheet -> getHighestRow();             // 마지막 행

        $highestColumn = $activesheet -> getHighestColumn();    // 마지막 컬럼


        // 한줄읽기

        for($row = 2; $row <= $highestRow; $row++) {


            // $rowData가 한줄의 데이터를 셀별로 배열처리 된다.

            $rowData = $activesheet -> rangeToArray("A" . $row . ":" . $highestColumn . $row, NULL, TRUE, FALSE);


            // $rowData에 들어가는 값은 계속 초기화 되기때문에 값을 담을 새로운 배열을 선안하고 담는다.

            $xlsData[$row] = $rowData[0][1];

        }

    }

} catch(exception $exception) {

    echo $exception;

}


$dateArray = array();


// 형식 : d/m/y h:mm

$dateArray[0] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[2], PHPExcel_Style_NumberFormat::FORMAT_DATE_DATETIME);


// 형식 : dd/mm/yy

$dateArray[1] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[3], PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY);


// 형식 : d-m

$dateArray[2] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[4], PHPExcel_Style_NumberFormat::FORMAT_DATE_DMMINUS);


// 형식 : d-m-y

$dateArray[3] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[5], PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYMINUS);


// 형식 : d/m/y

$dateArray[4] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[6], PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH);


// 형식 : m-y

$dateArray[5] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[7], PHPExcel_Style_NumberFormat::FORMAT_DATE_MYMINUS);


// 형식 : h:mm AM/PM

$dateArray[6] =

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[8], PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME1);


// 형식 : h:mm:ss AM/PM

$dateArray[7] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[9], PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME2);


// 형식 : h:mm

$dateArray[8] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[10], PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME3);


// 형식 : h:mm:ss

$dateArray[9] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[11], PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4);


// 형식 : mm:ss

$dateArray[10] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[12], PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME5);


// 형식 : h:mm:ss

$dateArray[11] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[13], PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME6);


// 형식 : i:s.S

$dateArray[12] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[14], PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME7);


// 형식 : h:mm:ss;@

$dateArray[13] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[15], PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME8);


// 형식 : mm-dd-yy

$dateArray[14] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[16], PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX14);


// 형식 : d-mmm-yy

$dateArray[15] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[17], PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX15);


// 형식 : d-mmm

$dateArray[16] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[18], PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX16);


// 형식 : mmm-yy

$dateArray[17] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[19], PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX17);


// 형식 : m/d/yy h:mm

$dateArray[18] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[20], PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX22);


// 형식 : yy-mm-dd

$dateArray[19] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[21], PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD);


// 형식 : yyyy-mm-dd

$dateArray[20] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[22], PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2);


// 형식 : yy/mm/dd;@

$dateArray[21] = 

PHPExcel_Style_NumberFormat::toFormattedString($xlsData[23], PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);



echo "<pre>";

print_r( $dateArray );

echo "</pre>";

?> 




# 출력결과








■ PHPExcel에서 날짜형식을 지정하여 엑셀파일 생성




이제 반대로 엑셀파일을 생성할때 날짜 형식을 지정해 보자.




# 소스코드

<?php

include "./PHPExcel.php";

$objPHPExcel = new PHPExcel();


$objPHPExcel -> setActiveSheetIndex(0) -> setCellValue("A1", date("Y-m-d", time()));

$objPHPExcel -> getActiveSheet() -> getStyle("A1") -> getNumberFormat()

 -> setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2);


$objPHPExcel -> setActiveSheetIndex(0);

$filename = iconv("UTF-8", "EUC-KR", "format_time");


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");

?> 




위 코드를 실행하여 엑셀파일을 다운로드 받고 확인해 보면


아래와 같은 결과를 얻을 수 있다.



# 출력결과



위와 같이 다운받은 엑셀 파일의 데이터를 확인해 보면


날짜 형식이 지정된 것을 확인 할 수 있다.








이밖에도 다른 표시형식의 사용은 아래 PHPExcel API 페이지에 들어가 보면 확인 할 수 있다.


http://www.osakac.ac.jp/labs/koeda/tmp/phpexcel/Documentation/API/PHPExcel_Style/PHPExcel_Style_NumberFormat.html



날짜 형식이외에 다른 표시 형식, 셀 서식의 지정이 문제가 되는경우 참고하여 진행하면 될 것이다.












Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[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 );

?>





# 출력결과









  1. call to undefined function mysqli_connect() 에러가 납니다...

    php설치하기 글 보고 php를 설치했는데
    ext에 php_mysqli.dll 파일이 있는데도 에러가 나서 주석도 빼보고
    새로 mysqli.dll 파일 설치해서 경로도 넣어봤습니다.
    근데도 똑같이 저렇게 에러가 나네요ㅠㅠ
    저도 DB연결하고싶어요ㅠㅠ
    • 2020.05.21 17:05 신고 [Edit/Del]
      안녕하세요, 많이 답답하시겠네요.
      일단 phpinfo(); 로 현재 정보를 확인해 보시겠어요
      mysqli가 잘 설정되어 있는지, php.ini의 경로는 잘 잡혀 있는지
  2. 안녕하세요!!!!

    phpinfo()로 확인하면 php.ini 파일 경로가 원래는 none이었는데 제가 window로 옮겼더니
    Loaded Configuration File 에는 C:\WINDOWS\php.ini 라고 나와있습니다!
    mysqli 는
    MYSQLi 라고 나오고 Zak Greant, Georg Richter, Andrey Hristov, Ulf Wendeldlfjgrp 이렇게 나와있는데 잘 성정되어 있는건가요?
    • 2020.05.21 22:56 신고 [Edit/Del]
      http://magic.wickedmiso.com/56
      제 포스팅 내용대로 php를 설치하신 걸까요?
      (일단 php.ini가 none이 었다라는것 부터가 지금 의심스럽습니다.)

      MySQL or MariaDB를 설치 하셨다면 일단 해당 코드가 아닌 DB툴로 접속은 잘 되시는지요?

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 | 비밀글로 남기기