PHP
피에이치피 · PHP 언어
는 서버에서 요청 입력을 처리하고 HTML·JSON 같은 응답을 생성하는 데 널리 쓰이는 프로그래밍 언어이다. 웹 서버가 실행기로 요청을 넘기면 코드가 서버에서 실행되고 브라우저에는 보통 그 결과가 전달된다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
로고: PHP Group 공식 자료. 제품 식별을 위해 표시하며 각 상표의 권리는 권리자에게 있습니다.
01무엇이고, 어떤 일을 하나
- 요청 변수와 세션 등 입력을 읽어 애플리케이션 동작을 수행한다.
- DB·파일·외부 API를 이용해 응답에 필요한 자료를 만든다.
- 응답의 상태·헤더·본문을 웹 실행 계층으로 반환한다.
02어떤 순서로 동작하나
- 요청 전달
웹 서버가 처리 경로를 선택하고 FPM 등 실행기에 스크립트 경로와 요청 정보를 보낸다.
- 입력 해석
코드가 입력의 존재·자료형·허용 범위를 검사하고 인증된 사용자 상태를 연결한다.
- 업무 처리
필요한 DB 질의를 매개변수화하여 실행하고 결과와 오류를 처리한다.
- 출력 생성
HTML이면 해당 문맥에 맞게 값을 인코딩하고 상태·헤더·본문을 반환한다. 내부 오류와 비밀값을 그대로 응답에 노출하지 않는다.
03먼저 알아둘 용어와 구성요소
- 클라이언트는 원본 코드를 받아 실행하는 것이 아니라 서버에서 생성한 결과를 받는다. 처리 연결이 잘못되어 원본 파일을 정적으로 내보내면 비밀 코드·설정이 노출될 수 있으므로 확장자 이름만으로 실행을 보장하지 않는다.
- 에서 은 쿼리 문자열에서 파싱된 입력이며 입력이 존재하지 않거나 배열 형태일 수 있다는 점까지 처리해야 한다.
- 문자열을 HTML에 출력할 때 같은 문맥에 맞는 인코딩을 사용하면 <와 & 등이 태그로 해석되는 것을 줄일 수 있다.
- 에는 별도의 가 필요하므로 HTML 인코딩이 안전성까지 제공하지 않는다.
- CLI의 .ini와 FPM의 설정 경로가 다를 수 있으므로 명령행 -v 결과와 웹 런타임의 설정을 같은 것으로 단정하지 않는다.
- display_errors는 응답으로 내부 오류를 노출할지, log_errors는 기록할지의 구분이다.
PHP 파일 작성에서 웹 실행·DB 연결까지 경계 나누기
소스 파일 존재, 실행, 애플리케이션의 DB 접속을 서로 다른 단계의 결과로 확인한다.
실습 구성과 전제
- phpinfo. 내용 조회와 WordPress 설치 화면은 서로 다른 구성 사례다. 첫 파일이 두 번째 설치 프로그램으로 바뀐 연속 실행이 아니다.
- 실행기가 준비된 실습 환경을 사용한다. 설정 정보가 많이 노출되는 phpinfo 페이지를 외부에 상시 공개하지 않는다.
파일 내용과 실행 결과를 구별한다
- 첫 사진의 cat은 파일의 텍스트를 읽는다. 여는 태그와 phpinfo()가 보인다는 것은 소스가 저장되었다는 증거이며 웹 서버가 를 실행했다는 증거는 아니다.
- 브라우저가 코드를 그대로 내보낸다면 실행기 연결 문제를 의심해야 한다. 정상 실행에서는 소스 문장 대신 프로그램이 만든 출력이 HTTP 응답 본문이 된다.
<?php header("Content-Type: text/plain; charset=UTF-8"); echo "PHP executed\n";정보 노출을 줄인 재구성 실행 확인 파일이다. 처리 경로가 준비된 로컬 실습에서만 사용한다.
원본 크기로 보기 ↗- cat phpinfo.php 아래에 PHP 태그와 phpinfo() 호출이 그대로 표시된다.
- 이 화면은 터미널의 파일 조회이며 PHP 정보 페이지가 렌더링된 브라우저 화면이 아니다.
확인 기준파일 존재, 문법 검사, CLI 실행, 웹 요청 실행을 각각 확인한다. 이 서로 다른 버전·설정을 사용할 수 있다.
웹 서버와 PHP 실행기의 연결을 검증한다
- 정적 파일 응답이 성공한 뒤 . 요청을 실행기로 전달하는 설정을 확인한다. FPM을 쓴다면 FastCGI 소켓·스크립트 경로·풀의 실행 계정이 연결되어야 한다.
- -l은 소스의 문법을 검사하지만 DB 접속이나 FPM 요청 경로까지 실행해 보지는 않는다. curl 응답 본문에서 재구성한 고정 문자열을 확인하면 웹 실행을 별도 검증할 수 있다.
bashphp -l /srv/lab-web/check.php curl -i http://127.0.0.1/check.php설정된 실습 문서 루트의 파일 문법과 웹 응답을 조회하는 예시다.
확인 기준소스 노출, 404, 502, 오류는 실패 경계가 다르다. 웹 서버 로그와 FPM 상태를 해당 요청 시각에 맞춰 읽는다.
애플리케이션의 DB 설정은 다음 단계다
- WordPress 화면은 DB 이름·사용자·암호·호스트·테이블 접두사를 요구한다. 프로그램이 실행되더라도 올바른 DB 계정과 접속 경로가 없으면 설치가 이어지지 않는다.
- 테이블 접두사는 생성할 테이블 이름의 접두어이며 DB 서버 주소가 아니다. 실제 암호나 운영 계정은 예시 본문에 복사하지 않는다.
원본 크기로 보기 ↗- 설치 화면에 Database name, Username, Password, Database host, Table prefix 입력 항목이 보인다.
- wp-config.php 안내가 있어 애플리케이션이 사용할 DB 연결 설정 단계임을 알 수 있다.
확인 기준이 양식이 보인다는 사실은 DB 인증 성공의 증거가 아니다. 입력 후 연결·권한·테이블 생성 결과를 추가 확인해야 한다.
실습에서 확인한 동작 원리
- 소스 파일을 읽은 결과와 프로그램을 실행한 HTTP 응답은 구별해야 한다.
- 웹 서버→ 실행기→DB의 각 경계마다 경로·신원·오류 로그가 다르다.
동작·명령 참고 문서
04예제로 따라가기
- 브라우저가 index.를 요청해도 정상 처리에서는 소스가 아니라 실행 후 만든 HTML을 받는다.
- ['name']은 없거나 배열 형태일 수 있으므로 문자열이라고 단정한 처리 전에 입력 형태를 검사한다.
- HTML에 넣는 문자열을 인코딩했다고 그 문자열을 연결한 이 안전해지지는 않는다. HTML 출력과 질의의 해석 경계가 다르다.
05혼동하기 쉬운 점과 확인 기준
- 웹 서버가 FPM 소켓을 열지 못하면 프로토콜 전달 전 경로·권한·listen 상태 문제다. 코드의 구문을 고쳐도 아직 그 코드가 실행되지 않는다.
- FastCGI 연결이 돼도 SCRIPT_FILENAME이 의도한 실제 파일을 가리켜야 한다. HTTP URI와 파일 경로를 혼동하면 잘못된 스크립트를 실행하거나 파일 없음 오류가 난다.
- 앱은 status·헤더·본문을 만들고 서버 인터페이스가 이를 HTTP로 전달한다. 문자 개수와 바이트 길이, 이미 보낸 헤더 뒤 발생한 예외를 구별해야 응답 오류를 설명할 수 있다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.