개념 사전 · 언어

PHP

피에이치피 · PHP 언어

는 서버에서 요청 입력을 처리하고 HTML·JSON 같은 응답을 생성하는 데 널리 쓰이는 프로그래밍 언어이다. 웹 서버가 실행기로 요청을 넘기면 코드가 서버에서 실행되고 브라우저에는 보통 그 결과가 전달된다.

밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.

로고: PHP Group 공식 자료. 제품 식별을 위해 표시하며 각 상표의 권리는 권리자에게 있습니다.

01무엇이고, 어떤 일을 하나

  • 요청 변수와 세션 등 입력을 읽어 애플리케이션 동작을 수행한다.
  • DB·파일·외부 API를 이용해 응답에 필요한 자료를 만든다.
  • 응답의 상태·헤더·본문을 웹 실행 계층으로 반환한다.

02어떤 순서로 동작하나

  1. 요청 전달

    웹 서버가 처리 경로를 선택하고 FPM 등 실행기에 스크립트 경로와 요청 정보를 보낸다.

  2. 입력 해석

    코드가 입력의 존재·자료형·허용 범위를 검사하고 인증된 사용자 상태를 연결한다.

  3. 업무 처리

    필요한 DB 질의를 매개변수화하여 실행하고 결과와 오류를 처리한다.

  4. 출력 생성

    HTML이면 해당 문맥에 맞게 값을 인코딩하고 상태·헤더·본문을 반환한다. 내부 오류와 비밀값을 그대로 응답에 노출하지 않는다.

03먼저 알아둘 용어와 구성요소

클라이언트는 원본 코드를 받아 실행하는 것이 아니라 서버에서 생성한 결과를 받는다. 처리 연결이 잘못되어 원본 파일을 정적으로 내보내면 비밀 코드·설정이 노출될 수 있으므로 확장자 이름만으로 실행을 보장하지 않는다.
에서 은 쿼리 문자열에서 파싱된 입력이며 입력이 존재하지 않거나 배열 형태일 수 있다는 점까지 처리해야 한다.
문자열을 HTML에 출력할 때 같은 문맥에 맞는 인코딩을 사용하면 <와 & 등이 태그로 해석되는 것을 줄일 수 있다.
에는 별도의 가 필요하므로 HTML 인코딩이 안전성까지 제공하지 않는다.
CLI의 .ini와 FPM의 설정 경로가 다를 수 있으므로 명령행 -v 결과와 웹 런타임의 설정을 같은 것으로 단정하지 않는다.
display_errors는 응답으로 내부 오류를 노출할지, log_errors는 기록할지의 구분이다.
LEARN THROUGH PRACTICE

PHP 파일 작성에서 웹 실행·DB 연결까지 경계 나누기

소스 파일 존재, 실행, 애플리케이션의 DB 접속을 서로 다른 단계의 결과로 확인한다.

실습 구성과 전제

  • phpinfo. 내용 조회와 WordPress 설치 화면은 서로 다른 구성 사례다. 첫 파일이 두 번째 설치 프로그램으로 바뀐 연속 실행이 아니다.
  • 실행기가 준비된 실습 환경을 사용한다. 설정 정보가 많이 노출되는 phpinfo 페이지를 외부에 상시 공개하지 않는다.
  1. 파일 내용과 실행 결과를 구별한다

    • 첫 사진의 cat은 파일의 텍스트를 읽는다. 여는 태그와 phpinfo()가 보인다는 것은 소스가 저장되었다는 증거이며 웹 서버가 를 실행했다는 증거는 아니다.
    • 브라우저가 코드를 그대로 내보낸다면 실행기 연결 문제를 의심해야 한다. 정상 실행에서는 소스 문장 대신 프로그램이 만든 출력이 HTTP 응답 본문이 된다.
    <?php
    header("Content-Type: text/plain; charset=UTF-8");
    echo "PHP executed\n";

    정보 노출을 줄인 재구성 실행 확인 파일이다. 처리 경로가 준비된 로컬 실습에서만 사용한다.

    5/26 - php, mariaDB · 명령·상태 출력 5원본 크기로 보기 ↗
    • cat phpinfo.php 아래에 PHP 태그와 phpinfo() 호출이 그대로 표시된다.
    • 이 화면은 터미널의 파일 조회이며 PHP 정보 페이지가 렌더링된 브라우저 화면이 아니다.
    확인 기준

    파일 존재, 문법 검사, CLI 실행, 웹 요청 실행을 각각 확인한다. 이 서로 다른 버전·설정을 사용할 수 있다.

  2. 웹 서버와 PHP 실행기의 연결을 검증한다

    • 정적 파일 응답이 성공한 뒤 . 요청을 실행기로 전달하는 설정을 확인한다. FPM을 쓴다면 FastCGI 소켓·스크립트 경로·풀의 실행 계정이 연결되어야 한다.
    • -l은 소스의 문법을 검사하지만 DB 접속이나 FPM 요청 경로까지 실행해 보지는 않는다. curl 응답 본문에서 재구성한 고정 문자열을 확인하면 웹 실행을 별도 검증할 수 있다.
    bash
    php -l /srv/lab-web/check.php
    curl -i http://127.0.0.1/check.php

    설정된 실습 문서 루트의 파일 문법과 웹 응답을 조회하는 예시다.

    확인 기준

    소스 노출, 404, 502, 오류는 실패 경계가 다르다. 웹 서버 로그와 FPM 상태를 해당 요청 시각에 맞춰 읽는다.

  3. 애플리케이션의 DB 설정은 다음 단계다

    • WordPress 화면은 DB 이름·사용자·암호·호스트·테이블 접두사를 요구한다. 프로그램이 실행되더라도 올바른 DB 계정과 접속 경로가 없으면 설치가 이어지지 않는다.
    • 테이블 접두사는 생성할 테이블 이름의 접두어이며 DB 서버 주소가 아니다. 실제 암호나 운영 계정은 예시 본문에 복사하지 않는다.
    PHP·MariaDB·CMS · CMS : Contents Management System (8)원본 크기로 보기 ↗
    • 설치 화면에 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상세 노트 · 실습 자료

헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.

공식 문서 · 표준

기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.