PHP강의정리2_내장함수

  • 주로 사용하는 내장함수는 core extension

    https://www.php.net/manual/en/extensions.membership.php

    https://www.php.net/manual/en/funcref.php

  • Bundled Extensions / External Extensions 는 php.ini에서 주석해체후 사용가능(맥은 부가적으로 해당익스텐션 설치 필요)

  • get_loaded_extensions() // 현재 php에서 사용중인 extension 리스트를 보여준다

  • PSR 은 코딩규약규칙들을 모아놓은 사이트이며 JS의 ECMA와 비슷하다

CORE EXTENSTION

PHP Options / Info (https://www.php.net/manual/en/book.info.php)

  • set_include_pah(__DIR__.'/newPath') // 현재 스크립트의 include 기본 경로 변경

  • get_included_files() // 현재 스크립트에 include된 php파일 보기

  • ini_set() // php.ini의 내용 변경

  • putenv('APP_ENV='.'production'); // 환경변수를 설정

  • putenv('key')랑 $_ENV['key']는 별개로 동작한다

  • assert(true) // 체크함수 assert_options()로 설정변경가능

Error Handling (https://www.php.net/manual/en/book.errorfunc.php)

  • error_reporting(E_ALL & E_NOTICE) // 로그 표시 레벨 설정

  • error_log('에러내용',에러레벨) // 에러로그 표시

  • @함수명() // 에러를 무시함

  • set_error_handler(callbackFunc) // 에러 발생시 콜백함수로 처리함 , 콜백함수의 첫번째 매개변수는 에러타입이다

  • trigger_error('에러명',E_USER_ERROR) // 에러를 강제 발생시킴 , E_USER_ERROR는 에러타입

String (https://www.php.net/manual/en/book.strings.php)

  • addslashes() // 슬래시 추가

  • stripslashes() // 슬래시 제거

  • random_bytes(len) // 랜덤 2진수 생성

  • bin2hex() // 2진수를 16진수로

  • hex2bin() // 16진수를 2진수로

  • crypt('암호화할문장','salt'); // 해시생성

  • explode('기준문자열','해석문자열') // 기준 문자열을 기준으로 해석문자열을 나눠서 배열로 반환함

  • implode('기준문자열','해석문자열') // explode된 문자열을 합침

  • htmlentities() // HTML을 인코딩한다 <html&gt

  • htmlspecialchars_decode() // 디코딩된 HTML을 디코딩한다

  • htmlspecialchars() // HTML을 인코딩한다 (변환할수있는 HTML의 범위가 적다)

  • htmlspecialchars_decode() // HTML을 디코딩한다 (변환할수있는 HTML의 범위가 적다)

  • strip_tags() // 모든 태그들을 제외한 결과를 표시 <html>태그같은거 전부 삭제후 텍스트만 표시

  • nl2br() // \n를 <br>로 변경함

  • ord('A') // 해당 문자열을 아스키 코드로 바꾼다

  • chr(65) // 해당 아스키코드를 문자열로 바꾼다

  • parse_str('1=a&2=쿼리스트링',$배열) // 쿼리스트링을 변환해서 배열에 담는다

  • number_format() // 숫자의 3자리수마다 , 을 찍는다

  • strtoupper() // 문자열을 대문자로 바꿈

  • strtolower() // 문자열을 소문자로 바꿈

  • trim() // 문자열의 빈공간을 삭제함

  • strtr("변경할문자",['변경할문자'=>'changechar']) // 변경할 문자를 변경함 // changechar가 출력

  • printf('%s bb %s','aa','cc') // 포맷된 문자열 출력 //aa bb cc , $s 문자열 $i 정수 $f 실수

  • sprintf ('%s bb %s','aa','cc') // 포맷된 문자열만 반환하고 출력은 안함

  • str_replace() // 문자열 변경

  • str_repeat() // 문자열 반복

  • str_split("abcde",2) // 문자열을 2글자씩 끊어서 배열로 반환

  • str_word_count('문자열..',1) // 문자열을 단어별로 끊어서 배열로 반환

  • strcmp() // 문자열 비교 // 0 일치 // -1 불일치

  • strpos() // 특정 문자열의 위치

  • strlen() // 문자열의 길이

  • strrev() // 문자열을 반대로 뒤집음

  • strstr('aabbcc','bb') // bbcc

  • substr() // 문자열 자르기

  • substr_compare() // 문자열비교 // 0 일치 // -1 불일치

  • substr_replace() // 문자열변경

  • wordwrap() // 문자열 줄바꿈

HASH (https://www.php.net/manual/en/book.hash.php)

  • hash_algos() // 해시알고리즘 종류

  • hash('sha256','문자열') // sha256 알고리즘으로 해싱 , crypt()함수와 알고리즘이 다르다

  • hash_equals('비교해시값1','비교해시값2') // 같은 해시인가 체크

  • hash_hmac('sha256','문자열','secret') // salt를 추가해서 hash를 만든다

  • hash_hmac_file('sha256', 'example.txt', 'secret') // 파일에 대한 해시값을 만든다

Password Hashing (https://www.php.net/manual/en/book.password.php)

  • password_hash("aa", PASSWORD_DEFAULT) // 비밀번호용으로 해시로 생성함 crypt()와 비슷하다

  • password_verify(" aa",hash) // 비밀번호의 해시가 일치하는지 확인, crypt()의 결과 hash로도 확인가능

  • password_get_info() // 해당 해시의 정보를 반환한다. 어떤 알고리즘을 사용했는지도 확인가능

  • password_hash("aa", PASSWORD_DEFAULT,['cost'=>10])

PCRE (https://www.php.net/manual/en/book.pcre.php) // 정규표현식

  • preg_match('/^정규표현식$/', '문자열', $결과반환배열) // 정규식으로 매칭되는 문자열 하나만 찾기

  • preg_match_all('/^정규표현식$/', '문자열', $결과반환배열) // 정규식으로 매칭되는 문자열 모두 찾기

  • preg_replace('/^정규표현식$/', '문자열1', '문자열2') // 문자열2에 문자열1과 매칭되는 부분이 있으면 문자열2의 일치부분을 문자열1로 변경함

  • preg_filter() // preg_replace()와 동일

  • preg_grep('/^정규표현식$/','배열') // 배열중에서 부분일치하는 값만 결과로 반환

  • ..그이외 있지만 생략 (구글링으로 사용)

MATH (https://www.php.net/manual/en/book.math.php)

  • max([1,2,3,4]) //최대값 4

  • max([1,2,3,4]) //최소값 1

  • rand(1,10) // 1~10중에서 랜덤 숫자

CSPRNG / RANDOM (https://www.php.net/manual/en/book.random.php)

  • random_int(1,10) // 1~10중에서 랜덤 숫자 rand()보다 보안적으로 좋다

  • random_bytes(5) // 5글자의 랜덤한 이진수(바이너리)를 만든다

Array (https://www.php.net/manual/en/book.array.php)

  • array_push(대상배열,넣을배열) // 배열넣기

  • array_pop[(제거할배열) // 배열꺼내기

  • array_filter(대상배열,function($val){return $val=='일치'}) // 일치하는 값을 반환 // $val배열내의 값

  • array_key_exists(키명,대상배열) // 해당 키가 배열에 존재하는지 확인

  • array_map(function($val){return $val},대상배열) // 배열을 조작해서 반환

  • array_search(찾을문자열,대상배열) // 해당 문자열을 포함한 값이 있을 경우, 해당값의 키를 반환한다

  • range(1,5) // 숫자 배열을 생성가능함 // [1,2,3,4,5]

  • array_reduce(대상배열,콜백함수) // reduce함수, 중첩된 결과를 반환한다

  • array_keys(대상배열) // 키만 모아서 배열로 반환한다

  • array_values(대상배열) // 값만 모아서 배열로 반환한다

  • array_merge(대상배열1,대상배열2) // 배열을 합친다, 중북된건 마지막에 추가된 녀석을 덮어쓴다. laravel에서 merge라는 함수가 있는데 이건 collection을 다룰때 사용한다

    //배열 array_merge 사용시
    $validatedData = $request->validated(); // ['name'=>'kim','password'=>'123']
    $validatedData = array_merge($validatedData, ['password' => Hash::make($request->input('password'))]);
    // ['name'=>'kim','password'=>'hasingpassword....']
    
    // 콜렉션 merge() 사용시
    $collection = collect(['product_id' => 1, 'price' => 100]);
    $merged = $collection->merge(['price' => 200, 'discount' => false]);
    $merged->all();
    // ['product_id' => 1, 'price' => 200, 'discount' => false]
  • compact('변수명1','변수명2') // 해당 변수명을 key로하고 할당된 내용을 value로 배열을 만든다 (매개변수로 변수의 문자열을 넘긴다)

    $test1="aa";
    $test2="bb";
    
    var_dump(compact('test1','test2'));
    
    array(2) {
      'test1' =>
      string(2) "aa"
      'test2' =>
      string(2) "bb"
    }

  • compact 함수는 변수 이름과 값을 기반으로 연관 배열을 생성합니다. 변수 이름은 배열의 키가 되고, 변수 값은 배열의 값이 됩니다.

    // 기본적으로 매개변수로 ' 변수의 문자열 ' 을 넘겨준다

    사용법

    compact(변수1, 변수2, 변수3, ...);

    예제

    <?php
    $name = "John";
    $age = 25;
    $country = "USA";
    
    $result = compact("name", "age", "country");
    
    print_r($result);
    //Array ( [name] => John [age] => 25 [country] => USA )
    
  • sort(배열) //오름차순 일반배열 정렬

  • rsort(배열) //내림차순 일반배열 정렬

  • asort(연관배열) //오름차순 연관배열 정렬(값기준)

  • arsort(연관배열) //내림차순 연관배열 정렬(값기준)

  • ksort(연관배열) //오름차순 연관배열 정렬(키기준)

  • krsort(연관배열) //내림차순 연관배열 정렬(키기준)

  • usort(배열,function($a,$b){return $a>$b;}) // 콜백함수로 일반배열 정렬

  • uasort(연관배열,function($a,$b){return $a>$b;}) // 콜백함수로 연관배열 정렬 (값기준)

  • uksort(연관배열,function($a,$b){return $a>$b;}) // 콜백함수로 연관배열 정렬 (키기준)

Variable handling (https://www.php.net/manual/en/book.var.php) //변수 제어

  • gettype(변수명) // 변수의 타입을 가져옴

  • is_int(변수명) // 해당 변수가 int타입인가 체크

  • is_string(변수명) // 해당 변수가 string타입인가 체크

  • is_iterable(변수명) // 해당 변수가 반복가능 한 변수인지 체크

    is_iterable([]) // 1(true)
  • is_object(변수명) // 해당 변수가 객체타입인가 체크

  • isset(변수명) // 변수에 할당되어있는지 체크

  • empty(변수명) // 변수에 값이 있는지 체크 (if의 true/false체크방식과 동일하기때문에 자주 사용할듯 )

    // 1.값이 선언되지 않아도 실행됨 
    // 2.isset() 할당되었는지 확인
    // 3.empty() 값이 비었는지 확인
    
    echo isset($notExist); // false
    echo empty($notExist); // true
    $isExist = "테스트1"; // 선언후 값할당
    echo isset($isExist); // true
    echo empty($isExist); // false

  • boolval(1) // int를 boolean으로 변경

  • strval(10) // int를 string으로 변경

  • print_r(변수명) // 사람이 읽기 좋은 형태로 보여준다

  • var_dump(변수명) // 디버깅하기 좋은 형태로 보여준다

  • serialize(변수명) // 만약 매개변수가 배열이면 해당 변수를 한줄로 표시한다(직렬표시)

  • get_defined_vars() // 선언된 모든 변수들을 보여준다

Filter (https://www.php.net/manual/en/book.filter.php) // 자주 사용됨

  • filter_var(체크대상,FILTER_VALIDATE_..) // 해당 형식이 맞는지 체크함 (타입,도메인,이메일,URL,맥어드레스,HTML등등..)

  • filter_var('bob@example.com', FILTER_VALIDATE_EMAIL); //bob@example.com : true

  • filter_var('bob###example.com', FILTER_VALIDATE_EMAIL); // false

  • filter_var(체크대상,FILTER_SANITIZE_..) // 해당 형식에 맞지 않는 부분을 삭제함

  • filter_var('john(.doe)@exa//mple.com',FILTER_SANITIZE_EMAIL) // 해당 형식에 불필요한 부분 제거 //john.doe@example.com

  • filter_input(INPUT_..) // Request로 들어오는 Input값을 필터가능 // $_GET,$_POST,$_SERVER,$_ENV

    // $_SERVER
    filter_input(INPUT_SERVER, 'REMOTE_ADDR', FILTER_VALIDATE_IP); // 원격 서버의 IP형식 확인

Function Handling (https://www.php.net/manual/en/book.funchand.php)

  • func_num_args() // 함수안에서 파라미터의 갯수를 알수있음 func_num_args(0)등으로 해당 파라미터를 받을수도 있음

  • call_user_func('함수명',파라미터 ) // 해당함수를 호출한다 (오버로딩효과를 위해 사용하기도함)

  • function_exists('함수명') // 해당함수의 존재여부 체크

  • get_defined_functions() // 선언된 함수리스트를 반환한다

  • register_shutdown_function(콜백함수) // 해당 스크립트가 종료될때 마지막으로 콜백함수내용 실행

Date (https://www.php.net/manual/en/book.datetime.php)

  • date_default_timezone_set('Asia/Seoul') // 타임존 세팅

  • time() // 현재시간의 타임스탬프 반환

  • localtime(타임스탬프,연관배열사용유무) // 시간을 배열/연관배열로 반환한다

  • getdate(타임스탬프) // 시간을 연관배열로 반환한다

  • strftime('%Y-%m-%d %H:%M:%S',타임스탬프); // 시간을 해당 포맷으로 표시(PHP8.1버전에폐지)

  • date('Y-m-d H:i:s',타임스탬프); // 시간을 해당 포맷으로 표시 (strftime의 대안으로 사용)

  • mktime() // 특정시간의 타임스탬프를 생성가능

  • strtotime('+1 day') // 문자열로 타임스탬프를 구한다

Network (https://www.php.net/manual/en/book.network.php)

  • header('TEST_HEADER: test_value1'); // 응답 헤더 설정

  • header_remove('TEST_HEADER') // 응답 헤더에서 해당 헤더 제거

  • headers_list(); // 응답 헤더 리스트 반환

  • http_response_code(404); 페이지의 상태코드를 설정 // header('HTTP/1.1 404 Not Found')과 같음

  • setcookie('쿠키명','쿠키내용'); // 쿠키설정

  • $_COOKIE['쿠키명']; // 쿠키 불러오기

  • setcookie('쿠키명','',time()-3600); //쿠키삭제

Session (https://www.php.net/manual/en/book.session.php)

  • session_save_path('./폴더명') // 서버에 저장할 세션의 경로지정

  • session_start() // 세션시작 // session path가 있어야한다

  • $_SESSION['해당세션의내부키값']='해당세션의내부값' // 유저가 가진 각 세션에 내부값을 설정함

  • unset($_SESSION['해당세션의내부키값']) // 유저가 가진 각 세션에 해당 내부값을 삭제함

    // 쿠키는 클라이언트에 데이터를 저장하고 세션은 서버에 데이터를 저장한다
    // 저장형식은 아래와 같음
    Client:key1/value1(외부값) - Server:value1(외부값) [key2:value2](내부값)
  • session_name() // 해당세션 외부 키값 (key1)

  • session_id() // 해당세션의 외부 값 (value1) // 노출되면 안됨

  • session_gc() // 오래된 세션 삭제, 삭제기간은 php.ini에 있음

  • session_unset() // 유저가 가진 각 세션의 모든 내부값을 삭제함

  • session_destroy() // 세션파일을 강제적으로 사용함, 권장사항은 아님,session_gc()사용을 권장

  • session_commit() // 세션종료 session_start()를 종료

  • session_regenerate_id() // 현재 세션ID를 새롭게 갱신함

URLs (https://www.php.net/manual/en/book.url.php)

  • base64_encode(문자열) // 문자열을 base64형식으로 인코딩한다

  • get_headers('http://example.com'); // 해당 사이트의 헤더정보 가져오기(클라이언트에서 동작)

  • get_meta_tags('http://example.com'); // 해당 사이트의 메타태그정보 가져오기(클라이언트에서 동작)

  • http_build_query(배열) // url의 쿼리스트링 생성 (자주 사용됨)

  • parse_url(url문자열) // url을 해석한다 .도메인,쿼리스트링등으로 분류해서 배열로 반환

  • urlencode(문자열) // url형식으로 인코딩한다

cURL (https://www.php.net/manual/en/book.curl.php) // curl 요청

// index.php
switch ($_SERVER['REQUEST_METHOD']) {
    case 'GET':
        echo filter_input(INPUT_GET, 'message');
        break;
    case 'POST':
        print_r($_POST);
        break;
    default:
        http_response_code(404);
}

// httpClient.php
$ch = curl_init();  // cURL 초기화
$queryString = http_build_query([message' => 'Hello, world']); // 쿼리스트링 생성
curl_setopt($ch, CURLOPT_HTTPGET, true); // cURL을 GET요청으로 보내기 옵션 설정
curl_setopt($ch, CURLOPT_URL, 'http://localhost:8080/?' . $queryString); // cURL을 index.php로 보내기 URL옵션 설정
curl_exec($ch); // cURL 전송

curl_reset($ch); // 옵션내용 리셋

curl_setopt($ch, CURLOPT_POST, true); // cURL을 POST요청으로 보내기 옵션 설정 
curl_setopt($ch, CURLOPT_POSTFIELDS, ['message' => 'Hello, world']); // 전송할 POST데이터 옵션설정
curl_setopt($ch, CURLOPT_URL, 'http://localhost:8080');// cURL을 index.php로 보내기 URL옵션 설정
curl_exec($ch); // cURL 전송

curl_close($ch); // cURL을 종료

JSON

  • json_encode(배열) // JSON형식으로 인코딩

  • json_decode(JSON문자열,연관배열유무) // JSON문자열을 객체/배열로 디코딩, 연관배열유무가 true면 배열 false면 객체

Directories

  • chdir('경로명') // 현재 디렉토리 변경

  • getcwd() // 현재 작업중인 디렉토리

  • scandir(__DIR__ . '/../..') // 해당 디렉토리에 포함된 디렉토리들을 반환

Filesystem (https://www.php.net/manual/en/book.filesystem.php)

  • FILE // 현재 스크립트의 경로부터 파일명까지 표기 // /Users/kim/Desktop/project/testPHP/index.php

  • DIR // 현재 스크립트의 경로까지 표기 /Users/kim/Desktop/project/testPHP

  • 파일핸들링에 대해선 링크를 참조 (https://github.com/php-courses-inflearn/php7/blob/main/ch2/Filesystem/2/index.php)

  • basename(__FILE__) // 해당 경로의 파일명만 추출

  • dirname(__FILE__) // 해당 경로의 디렉토리만 추출

  • pathinfo(__FILE__) // 해당 경로로부터 파일명과 파일형식등의 정보 추출

  • glob('./*.php'); // 해당 경로에서 형식과 일치하는 파일을 찾는다

  • fnmatch('*.php', 'index.php'); // 해당 경로에 지정한 형식과 일치하는 파일명이 존재하는지 체크

  • copy() // 파일복사

  • mkdir('./dir'); // 디렉토리 생성

  • unlink('./index.php'); // 파일 삭제

  • rmdir('./dir'); // 디렉토리 삭제

  • file_get_contents(경로); // 파일을 읽고 문자열로 반환

  • file(경로); // 파일을 읽고 배열로 반환

  • file_put_contents(경로, 내용); // 파일을 쓰기

  • stat(파일경로명) // 파일의 상세정보를 보여준다

  • filesize(파일경로명) // 파일 사이즈를 출력

  • filemtime(파일경로명) // 파일 수정시간을 출력

  • is_file(파일경로명) // 파일타입이 파일인지 링크파일인지등을 보여준다

  • link(파일명) // 하드링크파일 생성

  • symlink(파일명) // 심볼릭링크파일 생성 (바로가기파일)

  • readlink(심볼릭링크파일명) // 심볼릭링크파일의 원본파일 경로 표시

Stream

// 스트림을 이용해서 URL요청을 보내는 예제

$context = stream_context_create();
stream_context_set_option($context, ['http' => ['method' => 'GET']]);
file_get_contents('http://example.com', false, $context);

// 스트림 필터를 이용해서 해당 파일의 문자열을 전부 대문자로 바꾸는 예제

stream_get_filters();
$fh = fopen(dirname(__DIR__, 3) . '/README.md', 'r');
stream_filter_append($fh, 'string.toupper'); // 대문자로 변경
stream_get_contents($fh);

// 클라이언트와 서버를 생성가능

// 서버
$server = stream_socket_server('tcp://127.0.0.1:8000', $errno, $errstr); //서버열기
while ($sock = stream_socket_accept($server)) { // 클라이언트의 연결이있을경우 소켓열기
    stream_socket_get_name($sock, true); // 클라이언트명
    fwrite($sock, 'Hello, world from Server', 1024); // 데이터전송
    fread($sock, 1024); // 데이터수신
    fclose($sock); //클라이언트 연결 소켓닫기
}
fclose($server);//서버 닫기

//클라이언트
$sock = stream_socket_client('tcp://127.0.0.1:8000', $errno, $errstr); //생성
fwrite($sock, 'Hello, world', 1024); // 전송
fread($sock, 1024); // 수신
fclose($sock); // 닫기

※반환형이 리소스인 경우, 리소스란 무엇인가?

  • 리소스는 파일타입의 하나이다 (String이나 Boolean처럼)

  • 리소스는 PHP 외부에 존재하는 외부 자원을 의미한다 (DB나 네트워크 혹은 파일등)

  • 리소스 핸들러는 파일이나 네트워크 연결과 같은 외부 자원의 리소스를 관리하기 위한 기능

  • 예를 들어 fopen()이라는 함수를 사용할 경우, 반환형이 resource라는 리소스타입(=stream)이다. 외부자원(파일)을 핸들링 하기 위한 용도로 사용된다

  • 해당 리소스는 열고 사용한 후 메모리 누수방지를 위해 해제해줘야한다 fclose()

  • 리소스타입 참고 ( fopen()도 반환형이 resource타입이지만 구체적으로는 resource의 stream이다 ) // http://php.adamharvey.name/manual/kr/resource.php

  • resource와 handler는 정확히 같은 의미는 아니지만 같은 의미로 사용되는듯하다 (이 부분은 애매)

    // document에 기재된 fopen함수의 상세 (반환형을 주목)
    fopen(
        string $filename,
        string $mode,
        bool $use_include_path = false,
        ?resource $context = null // ?이란 null이 들어가도 된다는 nullable이란뜻
    ): resource|false

Program Execution

  • exec('ls -al') // OS의 해당 CMD명령어 실행결과

  • shell_exec('ls -al') // OS의 해당 CMD명령어 실행결과 // ls -al 이것도 동일 // exec()함수보다 더욱 상세

Mar 25, 2023 Views 123