주로 사용하는 내장함수는 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>
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()함수보다 더욱 상세