설치법

우분투 리눅스에 Apache 2 + PHP 8 설치하기(Ubuntu 20.04 LTS) - Creative Nomad LondonCity

<aside> 💡 php -v : 현재 사용중인 php 버전 알 수 있음 php -m : 현재 깔려 있는 php tension알 수 있음

</aside>

php → node

Convert cURL command syntax to Python requests, Ansible URI, browser fetch, MATLAB, Node.js, R, PHP, Strest, Go, Dart, Java, JSON, Elixir, and Rust code

PHP 기본 DB연결

<?php
$conn = mysqli_connect("210.123.124.186","sjtest","sjtest#!@","sjtest");
        if(!$conn) {
            echo 'db에 연결하지 못했습니다.'.mysqli_connect_error();
        }else {
            $sql = "SELECT * FROM board WHERE NUMBER=34";
            $result = mysqli_query($conn,$sql);
            $row = mysqli_fetch_array($result);
            $sqlT = "SELECT * FROM board WHERE NUMBER=35";
            $resultT = mysqli_query($conn,$sqlT);
            $rowT = mysqli_fetch_array($resultT);

            if ($row[2] == $rowT[2]) {
                echo "ok";
            } else {
                echo "no";
            }
            echo htmlspecialchars($rowT[2]);
            // print_r($row);
            // print_r($rowT);
        }
    ?>

CURL(Client URL) : 프로토콜과 인증을 다루는 도구

                           호출된 url정보를 가져온다.

<aside> 💡 다룰 수 있는 프로토콜과 인증서 :

cURL의 장점

3 cURL의 메소드 종류

</aside>

curl_close() : URL handle을 닫습니다. 
curl_copy_handle(): cURL handle을 속성채로 복사한다.
url_errno() : 에러번호를 리턴합니다.
curl_exec() : 설정된 옵션으로 실행한다.
curl_getinfo() : 통신의 정보 표시
curl_init() : cURL handle 생성
curl_multi_add_handle() : handle 배열에 cRUL handle을 추가한다
curl_multi_close() : cURL handle 배열 전체를 닫는다.
curl_multi_exec() : 여러개의 설정된 옵션으로 실행합니다. 
curl_multi_getcontent() : 통신결과 컨텐트를 표시한다.
curl_multi_info_read() : 통신 정보들을 표시한다. 
curl_multi_init() : 여러개의 handle을 생성한다. 
	curl_multi_remove_handle() :여러개의 handle을 삭제한다.
curl_setopt_array() :옵션을 배열로 한 번에 설정한다. 
curl_setopt() : 한가지 옵션을 설정한다. 
curl_version() : cURL의 버전 정보를 가져온다 
//초기화 
$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, "<http://www.sample.com>"); 

//결과에 헤더값을 포함 (TRUE, FALSE) 
curl_setopt($ch, CURLOPT_HEADER, FALSE); 

//연결 대기 시간(초). 무한정 대기는 0 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 

//cURL 함수를 실행할 수있는 최대 시간 (초) 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 

//TRUE 설정 시 curl_exec () 반환 값의 문자열을 반환 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

//HTTP 요청에 사용되는 User-Agent 헤더 내용 
curl_setopt($ch, CURLOPT_USERAGENT, "sample"); 

//FALSE로 설정 시 cURL이 피어의 인증서를 확인하지 못하게합니다. 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE); 

// 1 은 SSL 피어 인증서의 일반 이름의 존재를 확인합니다. 
// 2 를 사용하여 공통 이름이 있는지 확인하고 제공된 호스트 이름과 일치하는지 확인 
// 0 은 이름을 확인하지 않음. 프로덕션 환경에서이 옵션의 값은 2 (기본값) 로 유지해야합니다 . 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 

// TRUE는 일반 HTTP POST를 수행. 
curl_setopt($ch, CURLOPT_POST, 1); 

//HTTP "POST"작업으로 게시 할 전체 데이터. 
curl_setopt($ch, CURLOPT_POSTFIELDS, Array()); 

//CURL 실행 //curl_exec()의 결과는 Boolean 값. 
//출력되는 결과(문자)물을 받기위해서는 CURLOPT_RETURNTRANSFER 옵션을 사용해야 한다. 
//여기서 헤매다가 file_get_contents를 사용했다가 지적.. 보안을 위해 file_get_contents는 지양. 
$result = curl_exec($ch); 

//CURLINFO_HTTP_CODE 정보(200 or 400) 
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

//결과를 json 디코딩하여 출력. true 시 배열. 기본 오브젝트. 
$recv = json_decode($result, true); 

// getinfo로 가져올 수 있는 모든 정보 다 가져옴
$code = curl_getinfo($ch); 

//curl 닫기 
curl_close($ch);

get_headers($url) : 이걸 쓰면 curl을 쓰지 않고도 해당 url의 헤더를 가져올 수 있다.
get_headers($url, 1) : 이렇게 쓰면 키 값이 인덱스 값으로 들어옴

curl 명령어는 터미널 창에서도 쓰이는 게 많기 때문에 curl cli 명령어도 많은 공부가 필요할 듯하다

밑에 명령어를 쓰려면 curl 버전이 중요하고 해당언어에서 쓰고 있는 curl 버전도 중요하다
curl -I --http2 $url : 이거하면 해당 url이 http1 인지 http2인지 알 수 있다.

count() : 가로안에 배열 넣으면 길이 나옴

for문 기본구조 
for ($i = 0; $i < $n; $i++) {
    echo "$i" . "입니다.<br>";
}

배열에 push하는 법
array_push($배열이름, "넣고자 하는거");

배열이나 변수의 값이 비었는지 확인하는 법
empty($확인하고자하는것) : 비었으면 1 들어있음 0반환

foreach 문에서 인덱스 값 얻는 법
foreach ($array as $key => $value) { 
	이렇게 쓰면 $key자리에 있는 게 인덱스 값이 된다
}

explode(delimiter, string [, limit ]) : 문자열을 분할하여 배열로 저장하는 함수
delimiter : 문자열을 분할할 기준을 정합니다.
string : 분할할 문자열입니다.
limit : 옵션으로, 분할할 개수를 정합니다. 정수를 입력합니다.
ex)) $divide = explode(' ',$k->plaintext); 뒤에값을 공백 단위로 나눠라

array_count_values() : 배열안에 값들이 몇번 중복되는 지 나열해준다 그래서 결과적으로는 키 값과 
											실제 값의 위치가 바뀐다 

sort() - 배열을 오름차순(ascending order)으로 정렬
rsort() - 배열을 내림차순(descending order)으로 정렬
asort() - associative 배열을 오름차순으로 정렬, 값(value)에 따라
ksort() - associative 배열을 오름차순으로 정렬, 키(key)에 따라
arsort() - associative 배열을 내림차순으로 정렬, 값(value)에 따라
krsort() - associative 배열을 내림차순으로 정렬, 키(key)에 따라

array_slice($array,시작점,끝점-1) : 배열에서 인덱스 시작점부터 끝점 -1 까지 짤라서 반환

array_search(찾는값,$array) : 있으면 인덱스값 반환 없으면 false  

preg_match("/[\xA1-\xFE]/", $m) : $m 값이 한글이 아닌 다른 값인지 찾을 수 있는 함수

unset($variableName) : 배열에서 $variableName 키에 해당하는 요소 삭제 

gethostbyname(도메인주소) : 이러면 return 값으로 ip주소가 나온다 .

$_SERVER['DOCUMENT_ROOT'] : 사이트 루트의 물리적 경로. ex) /home/ksprg/www

$_SERVER['HTTP_ACCEPT_ENCODING'] : 인코딩 받식. ex) gzip, deflate

$_SERVER['HTTP_ACCEPT_LANGUAGE'] : 언어. ex) ko

$_SERVER['HTTP_USER_AGENT'] : 사이트 접속한 클라이언트 프로그램 정보. 
ex) Mozilla/4.0(compatible; MSIE 7.0; Windows NT 5.1; Q312461; .NET CLR 1.0.370

$_SERVER['REMOTE_ADDR'] : 사이트 접속한 클라이언트의 IP. ex) 192.168.0.100

$_SERVER['HTTP_REFERER'] : 이전페이지 주소값

$_SERVER['SCRIPT_FILENAME'] : 실행되고 있는 파일의 전체경로. ex) /home/ksprg/www/index.php

$_SERVER['SERVER_NAME'] : 사이트 도메인 : roadrunner.tistory.com (virtual host에 지정한 도메인)

$_SERVER['HTTP_HOST'] : 사이트 도메인 : roadrunner.tistory.com (접속할 때 사용한 도메인)

$_SERVER['SERVER_PORT'] : 사이트 포트. ex) 80

$_SERVER['SERVER_SOFTWARE'] : 서버의 소프트웨어 환경
ex) Apache/1.3.23 (Unix) PHP/4.1.2 mod_fastcgi/2.2.10 mod_throttle/3.1.2 mod_ssl/2.8.6

$_SERVER['GATEWAY_INTERFACE'] : CGI 정보. ex) CGI/1.1

$_SERVER['SERVER_PROTOCOL'] : 사용된 서버 프로토콜. ex) HTTP/1.1

$_SERVER['REQUEST_URI'] : 현재페이지의 주소에서 도메인 제외. ex) /index.php?user=ksprg&name=hong

$_SERVER['PHP_SELF'] : 현재페이지의 주소에서 도메인과 넘겨지는 값 제외. ex) /test/index.php
파일명만 가져올때 : basename($_SERVER['PHP_SELF']);

$_SERVER['APPL_PHYSICAL_PATH'] : 현재페이지의 실제 파일 주소. ex) /home/ksprg/www/

$_SERVER['QUERY_STRING'] : GET 방식의 파일명 뒤에 붙어서 넘어오는 파라미터 값. ex) ?user=ksprg&name=hong

array_key_exists('apple', $arr) : apple라는 키가 $arr라는 배열안에 있는 지 확인하고 true false반환

parse_url(도메인) : parse_url 의 결과 변수로는 scheme host path query fragment 가 있으니
										직접다 찍어봐야한다.

strpos(대상문자열, 찾고자하는 문자) : 찾고자 하는 문자가 있는 첫번째 인덱스를 반환한다. 

getimagesize(얻고자하는 파일) : [0]Width 값 [1]Height 값 [2]Image Type Flag, 타입을 정수로 반환
[3]	Width, Height값, [bits]	비트, [channels]	channels ,[mime]	파일 mime-type;

$doc = str_get_html('<img data-src="foo">');
echo $doc->find('img', 0)->getAttribute('data-src'); 이렇게도 dom구조 찾기 가능 

htmlspecialchars() :HTML 환경에서 < 또는 > 문자를 HTML 엔티티로 인코딩하여, 레이아웃이 깨지거나 스크립트 오류가 나는 것을 방지한다.

urlencode() : url에 문자를 표기하기 위한 문자 encoding 방법
urldecode() : urlencode의 반대

strip_tags(태그 제거할 문자열) : PHP 문자열에 섞여 있는 HTML, PHP 태그를 제거하는 함수 

strlen() : 문자열 길이 반환

mb_strlen() : 문자열 길이 반환 UTF-8은 한글의 한문자를 3 Byte로 인식한다 그래서 한글이 포함
되어 있으면 이걸 써야함 

substr('대상문자열', '문자열시작인덱스', '끝인덱스') : 대상문자열을 시작인데스 부터 끝인덱스 
																								까지 조건에 맞게 자른다. 끝 인덱스 없어도 됨.

is_numeric(data): data값이 숫자인지 아닌지 판단해준다 이제 0 때문에 조건문에 2개 조건 넣을
									필요없어짐
sleep() : 초 단위로 시간지연 안에 숫자넣으면 됨

PHP 리다이렉트 하는 법

header("Location: 가고 싶은 url");
die();

PHP 파일 , 디렉토리 삭제법,생성법