PHP 8

[PHP] Secure Password Hashing - password_hash()로 비밀번호 저장

개념 설명사용자의 비밀번호를 데이터베이스에 그대로 저장해서는 안 됩니다. 만약 데이터베이스가 유출되면 모든 사용자의 계정이 탈취되기 때문입니다. 이를 방지하기 위해 비밀번호는 해시된 형태로 저장해야 합니다. 해싱??임의의 길이 데이터를 고정된 길이의 데이터로 매핑하는 단방향 함수입니다. 해시 함수는 다음과 같은 특징을 가집니다.1. 단방향성: 원본 데이터(비밀번호)로 해시 값을 계산하기는 쉽지만, 해시 값으로 원본 데이터를 알아내는 것은 거의 불가능해야 합니다. md5()나 sha1() 같은 오래된 해시 함수는 이 원칙이 깨졌으므로 절대 비밀번호 저장에 사용하면 안 됩니다.2. 솔팅 : 동일한 비밀번호라도 해싱할 때마다 결과가 달라져야 합니다. 이는 '레인보우 테이블' 공격(미리 계산된 해시 값 목록을 ..

PHP 2025.11.10

[PHP] IteratorAggregate - 루프에서 사용될 때 어떤 이터레이터를 사용할지 위임하기.

[개념 설명]IteratorAggregate는 PHP의 SPL(Standard PHP Library)에 내장된 인터페이스입니다. 어떤 객체가 이 인터페이스를 구현하면, foreach 루프에서 사용될 때 어떻게 반복(iterate)해야 하는지를 다른 이터레이터 객체에게 위임할 수 있습니다.IteratorAggregate는 단 하나의 메소드, getIterator()만 구현하면 됩니다. 이 메소드는 반드시 Traversable 인터페이스(주로 Iterator 또는 다른 IteratorAggregate 객체)를 구현한 객체를 반환해야 합니다.[왜 Iterator 대신 IteratorAggregate를 사용할까요?]Iterator 인터페이스는 rewind(), current(), key(), next(), va..

PHP 2025.11.03

[PHP] Constructor Property Promotion (생성자 속성 승격)

생성자 속성 승격은 PHP 8.0부터 도입되었습니다. 클래스의 속성을 선언하고 생성자에서 그 값을 초기화 하는 반복적인 코드를 한줄로 줄여주는 기능입니다. 기존에는 클래스 상단에 속성을 선언, 생성자 매개변수를 받아 생성자 본문에서 $this -> $매개변수; 와 같이 일일이 할당 해야했습니다. 기존class Point{ public float $x; public float $y; public float $z; public function __construct( float $x, float $y, float $z ) { $this->x = $x; $this->y = $y; $this->z = $z; ..

PHP 2025.10.27

[PHP] match 표현법

match는 하나의 값을 여러 조건과 비교하여 일치하는 경우 특정 값을 반환하는 표현식입니다.기존의 switch가 문이었던 것과 차이점입니다. 이로 인해 코드가 간결해지고 예측 가능해집니다. $statusCode = 200;// switch 문 방식$message = '';switch ($statusCode) { case 200: $message = 'OK'; break; case 404: $message = 'Not Found'; break; case 500: $message = 'Server Error'; break; default: $message = 'Unknown Status'; ..

PHP 2025.10.20

[PHP] 숫자 내장 함수: number_format, round, rand 함수

PHP를 개발하다 보면 변수를 출력하는 것 이상으로 숫자를 다뤄야 하는 경우가 있습니다. 예를 들어 상품가격을 표시하거나, 통계 데이터의 소수점을 처리하거나, 숫자를 무작위로 뽑아야하는 상황도 있습니다. PHP가 기본적으로 제공하는 숫자 관련 함수들을 사용하면 편리하게 작성이 가능합니다. 쇼핑몰에서 1200000원 보다는 1,200,000원 이라고 표시된 것이 훨씬 보기 편하죠? number_format() 함수는 이처럼 숫자의 천 단위마다 콤마(,)를 찍어주거나 소수점 자리를 깔끔하게 정리해 주는 역할을 합니다. // 기존 방식: number_format()$price = 1234567;echo number_format($price); // 출력: 1,234,567 소수점 처리$pi = 3.141592..

PHP 2025.10.13

SQL 문 사용하기 / 공부하기 / DB명령어/ 해석하기

1. $sql_Email_ch = "SELECT userEmail FROM userinfo WHERE userEmail = :userEmail";$실행할 SQL 문 = "SELECT 필드값 FROM 테이블 WHERE 필드값(기준) = :바인딩값";SELECT 절:SELECT userEmail: 이 부분은 데이터베이스에서 가져올 필드를 지정하는 부분입니다. 여기서는 "userinfo" 테이블에서 "userEmail" 필드 값을 가져옵니다. 이 부분은 반환될 결과에 포함됩니다.FROM 절:FROM userinfo: 데이터를 가져올 테이블을 지정하는 부분입니다. 여기서는 "userinfo" 테이블에서 데이터를 가져옵니다.WHERE 절:WHERE userEmail = :userEmail: 이 부분은 데이터를 필..

PHP 2024.05.15

안드로이드 이메일 인증번호 보내기 / PHPMailer / SMTP / Gmail

1. 깃허브에서 PHPMailer 을 로컬PC에 다운받습니다. https://github.com/PHPMailer/PHPMailer GitHub - PHPMailer/PHPMailer: The classic email sending library for PHPThe classic email sending library for PHP. Contribute to PHPMailer/PHPMailer development by creating an account on GitHub.github.com 2. 압축파일을 해제합니다 3. 파일을 드래그하여 VScode로 옮깁니다. 4. 이동된 곳은 AWS 우분투 서버이며 폴더경로를 require처럼 작성합니다 (해당위치가 틀릴수있으니 꼭 경로확인!) 5. 지메일 SMT..

PHP 2024.05.12

login.php / sql문 해석하기

error_reporting(E_ALL);// php 의 오류 레포팅을 모든 오류를 보고 하도록 설정합니다ini_set('display_errors', 1);// php오류 메세지를 화면에 표시하도록 설정합니다 include ('dbcon.php');// 외부파일을 스크립트의 포함시켜서 필요한 설정이나 함수들을 사용 할 수 있습니다.$android = strpos($_SERVER['HTTP_USER_AGENT'], "Android");// 사용자 에이전트문자열에서 안드로이드를 찾아서 그 위치를 $android 변수에 저장합니다. 이렇게하면 안드로이드에서 요청이 왔는지 알 수 있습니다.if ($_SERVER['REQUEST_METHOD'] == 'POST' || $android) {    // 안드로이드 ..

PHP 2024.05.03