PHP문법

박선규's avatar
Jan 23, 2025
PHP문법

PHP 서버 실행

php -S localhost:8000

PHP 사용 선언

<?= ?>

변수 선언

  • 변수 이름은 $로 시작.
  • 변수 이름은 문자(a-z, A-Z) 또는 밑줄(_)로 시작해야 함.
  • 변수 이름은 숫자로 시작할 수 없음.
  • 변수 이름은 대소문자를 구분함.
 

변수 사용하기

<?=$[변수 명]?>
 

슈퍼 글로벌 변수

📌
변수 사용 범위가 전역인 변수를 얘기한다.
$_GET$_POST$_SERVER$_COOKIE$_REQUEST$_FILES$_SESSION$_ENV$GLOBALS가 있다.
 

$_GET

📌
HTTP GET 메서드를 통해 전달된 데이터 즉, URL 매개변수로 전달된 데이터를 저장한다.
키와 값으로 구성된 연관 배열이다.
<a href="test-get.php?name=Hannes">Test $_GET</a>
echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!';
Hello Hannes!
 

$_POST

📌
HTML 양식을 통해 HTTP POST 메서드인 method="post"로 제출된 데이터를 저장한다.
키와 값으로 구성된 연관 배열입니다.
<form method="post" action="process.php"> <input type="text" name="username"> <input type="text" name="age"> <button type="submit">제출</button> </form>
/* $_POST 변수는 다음과 같은 키 = 값 쌍을 저장하게 됩니다. $_POST['username'] = 'John'; $_POST['age'] = '25'; */
$name = $_POST['username']; $age = $_POST['age']; echo 'Name: ' . $name . '<br>'; echo 'Age: ' . $age;
Name: John Age: 25
 

$_SERVER

📌
현재 실행 중인 PHP 스크립트에서 관련된 서버 및 실행 환경에 대한 정보를 저장한다.
키와 값으로 구성된 연관 배열입니다.
// 현재 스크립트의 파일명을 출력한다. echo $_SERVER['PHP_SELF']; // 호스트 서버의 IP 주소를 출력한다. echo $_SERVER['SERVER_ADDR']; // 호스트 서버의 이름을 출력한다. echo $_SERVER['SERVER_NAME']; // 현재 페이지의 완전한 URL을 출력한다. echo $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; // 현재 스크립트가 실행되는 문서 루트 디렉토리를 반환한다. echo $_SERVER['DOCUMENT_ROOT']
 

$_COOKIE

📌
클라이언트에 저장된 쿠키를 가져오거나 설정할 수 있게 쿠키 정보를 저장한다.
$name = $_COOKIE['name'];
//쿠키 설정 setcookie('name', 'value', time() + (3600 * 24 * 365), '/');
// 사용자 이름이 설정되어 있는지 확인합니다. if (isset($_COOKIE['username'])) { $username = $_COOKIE['username']; echo "안녕하세요, $username 님!"; } else { // 사용자 이름이 설정되어 있지 않으면 기본 인사말을 표시합니다. echo '안녕하세요, 방문자님!'; } // 사용자 이름을 쿠키로 설정합니다. setcookie('username', 'John Doe', time() + 3600); // 1시간 동안 유지됨
 

$_REQUEST

📌
클라이언트의 요청을 저장한다.
// GET 매개변수 액세스 if (isset($_REQUEST['name'])) { $name = $_REQUEST['name']; echo "안녕하세요, {$name}님!"; } // POST 매개변수 액세스 if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_REQUEST['email'])) { $email = $_REQUEST['email']; echo "가입해 주셔서 감사합니다. 등록된 이메일: {$email}"; } } // 쿠키 값 액세스 if (isset($_REQUEST['visited'])) { $visited = $_REQUEST['visited']; echo "방문한 적이 있습니다. 마지막 방문일: {$visited}"; } ?> <!DOCTYPE html> <html> <head> <title>$_REQUEST 예제</title> </head> <body> <h1>사용자 정보 입력</h1> <form method="post" action="index.php"> <label for="name">이름:</label> <input type="text" name="name" id="name"> <label for="email">이메일:</label> <input type="email" name="email" id="email"> <button type="submit">가입</button> </form> </body> </html>
 

$_FILES

📌
클라이언트가 웹 양식을 통해 서버에 업로드한 파일 정보를 저장한다.
<form action="upload-file.php" enctype="multipart/form-data" method="post"> <input type="file" name="userfile"> <button type="button">파일 업로드하기</button> </form>
// 업로드된 파일의 배열 $_FILES['userfile'] // 배열 키는 파일을 업로드하는 input 요소 name 속성의 값: name="userfile" // 업로드된 배열의 주요 속성 $_FILES['userfile']['name'] // 업로드된 파일의 원래 이름 $_FILES['userfile']['type'] // 업로드된 파일의 MIME 유형 $_FILES['userfile']['size'] // 업로드된 파일의 크기 (바이트) $_FILES['userfile']['tmp_name'] // 서버에 임시로 저장된 파일의 경로 $_FILES['userfile']['error'] // 업로드 과정에서 발생한 오류 코드
if ($_FILES['userfile']['error'] === UPLOAD_ERR_OK) { $tempFilePath = $_FILES['userfile']['tmp_name']; $targetFilePath = 'uploads/' . $_FILES['userfile']['name']; if (move_uploaded_file($tempFilePath, $targetFilePath)) { echo '파일이 성공적으로 업로드되었습니다.'; } else { echo '파일 업로드 중에 오류가 발생했습니다.'; } } else { echo '파일 업로드 중에 오류가 발생했습니다.'; } ?> // $_FILES['userfile']['error']가 UPLOAD_ERR_OK인지 확인하는 조건은 파일 업로드가 정상적으로 완료되었는지 확인하는 부분 // 상태코드 UPLOAD_ERR_OK (값: 0): 파일이 정상적으로 업로드됨. UPLOAD_ERR_INI_SIZE (값: 1): 업로드된 파일이 php.ini에서 설정한 upload_max_filesize를 초과함. UPLOAD_ERR_FORM_SIZE (값: 2): 업로드된 파일이 HTML 폼에서 설정한 MAX_FILE_SIZE를 초과함. UPLOAD_ERR_PARTIAL (값: 3): 파일이 부분적으로만 업로드됨. UPLOAD_ERR_NO_FILE (값: 4): 파일이 업로드되지 않음. UPLOAD_ERR_NO_TMP_DIR (값: 6): 임시 폴더가 없음. UPLOAD_ERR_CANT_WRITE (값: 7): 디스크에 파일을 쓸 수 없음. UPLOAD_ERR_EXTENSION (값: 8): PHP 확장 프로그램에 의해 파일 업로드가 중단됨.
 

$_SESSION

📌
세션 데이터 정보를 저장한다. 세션을 사용하려면 먼저 session_start() 함수를 호출하여 세션을 시작해야 한다. 이렇게 하면 세션 ID가 생성되고, 클라이언트의 쿠키 또는 URL 임베딩을 통해 클라이언트에게 전송된다. 이후 클라이언트가 서버로 요청을 보낼 때마다 세션 ID가 함께 전송되어 서버에서 해당 세션에 접근할 수 있다.
session_start(); // 방문 횟수를 추적하는 세션 변수를 증가시킵니다. if (isset($_SESSION['visit_count'])) { $_SESSION['visit_count']++; } else { $_SESSION['visit_count'] = 1; } // 방문 횟수를 표시합니다. echo "방문 횟수: " . $_SESSION['visit_count'];
 

$_ENV

📌
PHP 환경 변수를 저장한다.
// 환경 변수 설정 $_ENV['DATABASE_HOST'] = 'localhost'; $_ENV['DATABASE_USER'] = 'myuser'; $_ENV['DATABASE_PASSWORD'] = 'mypassword'; // 환경 변수 읽기 $host = $_ENV['DATABASE_HOST']; $user = $_ENV['DATABASE_USER']; $password = $_ENV['DATABASE_PASSWORD']; // 환경 변수 출력 var_dump($_ENV);
 

$GLOBALS

📌
PHP에서 사용되는 전역 변수를 저장한다.
$GLOBALS는 PHP에서 사용되는 전역 변수를 담고 있는 배열 변수다. 이 배열의 키는 변수 이름이며, 값은 해당 변수에 할당된 값이다. 예를 들어, $GLOBALS['myVar']는 전역 변수 $myVar에 접근할 수 있도록 한다.
//전역 변수로 사용할 변수 선언 $foo = "bar"; //$GLOBALS 배열을 사용하여 전역 변수 $foo의 값을 가져온다 $value = $GLOBALS["foo"]; //$GLOBALS 배열을 사용하여 전역 변수의 값을 설정 $GLOBALS['foo'] = 'baz';

상수

📌
값을 한번 정의하면 변경할 수 없는 변수
define(string $constant_name, mixed $value, bool $case_insensitive = false): bool
notion image
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>PHP 테스트</title> </head> <body> <h1>PHP 테스트 페이지</h1> <p>현재 PHP 상태:</p> <p> <? /* define() 함수를 사용하여 선언 */ define('GLOBAL_CONSTANT', 200); echo GLOBAL_CONSTANT; // 200 ?> <br/> <!-- /* 클래스 내에서 const 키워드를 사용하여 선언 */ --> <?class MyClass { const CONSTANT = 'constant value'; function showConstant() { echo self::CONSTANT . "\n"; } } echo MyClass::CONSTANT; // 'constant value' ?> <br/> <?$class = new MyClass(); $class->showConstant(); // 'constant value' ?> </p> </body> </html>
notion image

배열

<?=$a[$b]['hi']?> $a = [ 1 => ["hi" => "Hello!", "bye" => "Goodbye!"], 2 => ["hi" => "Bonjour!", "bye" => "Au revoir!"], ]; $b = 1; echo $a[$b]['hi']; // 출력: Hello! echo $a[$b]['bye']; // 출력: Goodbye!
  • $a는 배열입니다.
  • $b$a인덱스를 동적으로 지정하는 변수입니다.
  • $b의 값에 따라 $a 배열의 특정 요소를 참조합니다.
 

배열의 값 소문자로 바꾸기

<?php $a = [ 'key1' => ['c' => 'UPPERCASE'], 'key2' => ['c' => 'MixedCase'] ]; $b = 'key1'; ?> <a href="/z/<?= strtolower($a[$b]['c']) ?>/d.php">gd</a>

출력

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>PHP 테스트</title> </head> <body> <h1>PHP 테스트 페이지</h1> <p>현재 PHP 상태:</p> <p> <? $name = 'sun' ; $age = 25; echo 'My name is ', $name, ' and I am ', $age, ' years old.'; //여러개 인수 사용 가능 ?> <br/> <?print 'My name is ' . $name . ' and I am '. $age . ' years old.'; // , 대신 . (문자열 연산자) 을 사용 해야 여러개 인수 사용 가능 ?> </p> </body> </html>
notion image
 

버튼 클릭 표시

{echo 'on';}
 

경로로 내부 파일 가져오기 (import)

include

📌
에러 발생 시 경고만 표시하고 계속 스크립트 실행시킨다.
// logging.php // 로그 작성 함수 function writeLog($message) { // 로그 작성 코드 // ... }
// main.php // 로깅 파일 선택적으로 포함 include 'logging.php'; // 나머지 코드 실행 // 필요한 경우 로그 작성 writeLog('이벤트 발생');

require

📌
에러 발생 시 오류를 발생시키고 스크립트를 중단 시킨다. ex) 파일이 존재 하지 않을 시 오류 발생시키고 스크립트를 중단
// database.php // 데이터베이스 연결 정보 $host = 'localhost'; $username = 'myusername'; $password = 'mypassword'; // 기타 데이터베이스 설정 // 데이터베이스 연결 $db = new PDO('mysql:host=$host;dbname=mydatabase', $username, $password);
// 데이터베이스 연결 정보 필수 require 'database.php';

if문

<? if($a == 1) {?> <? } ?>
 

오류 터질 때 찾는 법

<? echo 'b'; exit ; ?> // exit: php스크립트 종료로 이후 코드가 실행 안되게한다.
notion image
페이지에 b 를 출력 시킨다
📌
다른 방법으로는 코드 한 뭉태기씩 자르면서 화면 실행해 오류 찾기
 

parse_url (url 불러오기)

URL을 구성 요소별로 분해하여 사용자가 쉽게 접근할 수 있도록 배열로 반환하는 함수
Array ( [scheme] => https [host] => www.example.com [port] => 8080 [user] => username [pass] => password [path] => /path/to/page [query] => query=value [fragment] => fragment )
구성 요소:
  • scheme: https (프로토콜)
  • host: www.example.com (호스트명)
  • port: 8080 (포트 번호)
  • user: username (사용자 이름)
  • pass: password (비밀번호)
  • path: /path/to/page (경로)
  • query: query=value (쿼리 문자열)
  • fragment: fragment (# 뒤의 앵커)
 

검색 escape_like_str( )

📌
  like 조건에서 사용하는 문자열을 안전하게 처리하기 위해 SQL에서 특수문자(예: %, _)를 이스케이프 처리하여 SQL 인젝션 공격을 방지한다.
📌
이스케이프 처리: 특정 문자나 문자열이 특수한 의미를 가지는 경우, 이를 문자 그대로 인식되도록 처리하거나, 안전하게 사용하기 위해 앞에 특정 문자를 붙이는 과정을 의미합니다. 이 작업은 주로 보안 강화정확한 데이터 처리를 위해 수행됩니다.
Share article

p4rksk