OllyDBG

Ollydbg 화면구성

PE 파일 동작한다는 것은 메모리에 올라간 PE 데이터 중에서 .text 섹션에 기록되어 있는 기계어 코드가 실행되는 것이다.

 

1. Disassemble 영역

- 어셈블리 코드를 실행 또는 중지할 수 있도록 한다.

- 왼쪽부터 차례로 Address(명령어가 실행될 주소), 기계어 코드, 어셈블리 코드(기계어를 어셈블리어로 바꿔놓음)로 구성된다.

 

2. 레지스터

- 레지스터는 CPU 내부에 존재하는 다목적 저장 공간

- 이러한 레지스터 값을 표시해주는 곳

 

3. Memory Dump

- Address 주소, Hex dump, 각 Hex에 따른 ASCII코드로 해석된 창을 보여준다.

- 프로세스 동작과정에서 읽고 쓰는 값들을 확인 및 수정이 가능

 

4. Stack

- Stack 영역은 임시 저장 공간

- 스택 주소, 스택 값, comment 순으로 표시된 창

- 함수 호출 시 필요한 인자 정보를 전달

 

 

어셈블리어

:: 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어

기계어를 어셈블리어로 번역하는 작업은 디버거가 알아서 해주기 때문에 기계어를 알아야 하는 경우는 잘 없다.

 

명령어 설명
PUSHAD 8개의 범용 레지스터 값을 Stack에 저장
POPAD PUSHAD 명령에 의해서 Stack에 저장된 값을 다시 레지스터에 입력
PUSH A A값을 Stack에 넣음
POP 레지스터 Stack에서 값을 꺼내서 레지스터에 넣음
INC A A값을 1 증가
DEC A A값을 1 감소

 

명령어 설명
ADD A B A와 B를 더해서 그 결과를 A에 저장
SUB A B A에서 B를 빼고 그 결과를 A에 저장
IML A B A와 B를 곱한 후 그 결과를 A에 저장
LEA A B A를 B로 만듬(레지스터에서 주로 사용)
MOV A B B를 A로 복사
XCHG A B A와 B를 바꿈
TEST A B A와 B를 AND 연산
(연산 결과 값이 a에 저장되지 않지만 ZF 플래그 설정에 영향을 줌)
(연산 결과가 0이면 ZF가 1이 되고 연산 결과가 0이 아니면 ZF는 0이 된다)
AND A B A와 B를 AND 연산
(연산 결과 값이 a에 저장되고 ZF 플래그 설정에 영향을 줌)
(연산 결과가 0이면 ZF가 1이 되고 연산 결과가 0이 아니면 ZF는 0이 된다)
CMP A B 비교 구문. A와 B가 같은지 판단
(같을 경우 ZE는 1이 되고 다를 경우 ZE는 0이 된다.)

 

명령어 설명
JMP                         Address 해당 주소로 무조건 이동
JZ(Zump if Zero)         Address 연산 결과가 0이면(ZE=1)이동하고,
아니면(ZF=0) 다음 명령을 실행
ZE(Zump if Equal)        Address 연산 결과가 0이면(ZE=1)이동하고,
아니면(ZF=0) 다음 명령을 실행
JNZ(Zump if not Zero)  Address 연산 결과가 0이 아니면(ZF=0)이동하고,
0이면 (ZE=1) 다음 명령을 실행
JNE(Zump if not Equal) Address 연산 결과가 0이 아니면(ZF=0)이동하고,
0이면 (ZE=1) 다음 명령을 실행

 

명령어 설명
MOVE         DWORD PTR DS:[Address],  EAX Address부터 4Byte 값을 EAX로 복사
CALL          DWORD PTR DS:[Address] Address부터 4Byte 주소 값을 호출

DWORD ; 크기 값 (BYTE : 1byte, WORD : 2byte, DWORD: 4byte)

PTR ; 기준

 

 

주요 단축키

단축키 정보 설명
F2 BreakPoint를 설치하고 해제
F7 하나의 명령어 실행,
Call 명령어 실행 시 해당 함수 내부로 들어감
F8 하나의 명령어 실행,
Call 명령어 실행 시 해당 함수 내부로 들어가지 않음
F9 실행(Execute)
Ctrl + F2 디버깅을 처음부터 다시 시작(재실행)
Ctrl + F9 해당 함수 내에서 RETN 명령어까지 실행
Ctrl + G
원하는 주소로 이동
Alt + M Memory Map 확인

 

'Study > Reversing' 카테고리의 다른 글

Reversing.kr 1번 풀이  (0) 2021.03.24
main 함수 찾기  (0) 2021.03.23
IAT & EAT  (0) 2021.01.25
PE 헤더  (0) 2021.01.24
PE File Format 이해  (0) 2021.01.23

Filtering : 사용자가 입력한 정보에서 문제가 될만한 것을 차단하는 것

Escaping : 저장되어 있는 정보를 사용자에게 표시할 때(출력) 문제가 될만한 것을 차단하는 것

 

 

Filtering

사용자가 입력하는 정보는 모두 불신해야 한다.

mysqli_real_escape_string( ) : 인자로 들어온 데이터 중에서 sql 공격 관련 기호들을 문자로 바꾸는 함수

=> SQL Injection 방어 가능 

SQL Injection문 시도
왼쪽은 mysqli_real_escape_string( )를 사용하지 않았을 때, 오른쪽은 사용하였을 때의 결과이다.

 

Escaping

오염된 데이터 출력을 막아야 한다.

htmlspecialchars( ) : HTML 특수 문자가 일반 문자로 인식되어 그대로 출력되도록 해주는 함수

=> XXS 방어 가능

& &
" "
' '
< &lt;
> &gt;

 

<?php
	echo '<script>alert("hi");</script>'; //1번
	echo htmlspecialchars('<script>alert("hi");</script>');//2번
?>

 

왼쪽부터 차례로 1번, 2번

1번의 경우는 대표적인 XXS 공격으로, hi라는 경고창이 뜨게 되지만

2번의 경우는 함수를 이용해 특수문자들을 문자열 그대로 출력하고 있다.

 

<!--사용 예시-->
...
$escaped_title  = htmlspecialchars($row['title']);
echo "<li><a href=\"index.php?id={$row['id']}\">{$escaped_title}</a></li>"
...

'WEB > PHP' 카테고리의 다른 글

PHP와 MySQL_연동 후 데이터 출력  (0) 2021.01.31
PHP와 MySQL 연동  (0) 2021.01.31
PHP & DATABASE  (0) 2021.01.30
form과 GET, POST  (0) 2021.01.29
PHP 문법 기초  (0) 2021.01.28

여행을 가면 우리는 일단 새로운 곳에 집중하게 되어

떠나기 전 가지고 있던 복잡한 생각을 잊을 수 있고

돌아와서 다시 생각한 복잡했던 그 생각은

처음보다 훨씬 작아져 있다.

 

좋은 여행지는 희망을 준다.

현실의 삶이 당장 변하지 않아도

가기 전 준비로 설레고 다녀온 후 좋았다면

다음에 또 가고 싶다는 희망이

현재를 살아가는 데 꽤 큰 힘이 된다.

 

먹고 싶은 것이, 맛있는 것이, 좋은 것이

세상에 정말 많다는 것을 알게 되어

현실에서 일을 게을리 하지 않고 더 열심히 살게 된다.

왜냐면 내가 하고 싶은 것을 하기 위해

경제력이 있어야 하기 때문이다.

 

여행을 같이 하다 보면

그 사람이 평생 함께할 사람인지 아닌지 알게 된다.

가까이서 많은 것을 경험하며 자세히 보기 때문이다.

이 사람은 힘들 때 어떻게 표현하는지, 

상대방을 배려하는 사람인지

나와 맞춰나갈 수 있는 사람인지를 알게 된다.

 

여행은 '장소에 간다'의 개념이 아니다.

내 삶이란 책 속에서 멋진 한 페이지가 장식되는 순간이다.

가지 않았다면 알 수 없는 많은 것을 

생각하고 느끼고 돌아보게 해준다.

 

물론 좋은 여행만 있지는 않다.

다시는 가고 싶지 않은 여행지도 많다.

그러나 그걸 통해

앞으로 가지 않을 곳을 명확히 알게 되었으니

그것 또한 시간 낭비는 아니다.

 

완벽한 여행은 없다.

즐거운 여행이었는지 즐겁지 않은 여행이었는지

둘 중 하나만 있을 뿐이다.

헤메기도 하고 불완전하기도 한 여행일지라도

내가 좋아하는 걸 많이 봤다면 

그 여행은 즐거운 여행이 된다.

 

우리 삶도 여행과 비슷하다.

헤매고 실수하고 불완전하기에

인생이란 길이 처음 가보는 길이기에

완벽한 여행은 될 수 없고

즐거운 여행인가 즐겁지 않은 여행인가만 있을 뿐이다.

 

당신의 지난 시간이 비록 상처가 있고

실수도 하는 불완전한 시간이었다 해도 괜찮다.

 

그럼에도 불구하고

내 인생에서 내가 좋아하는 것을 많이 만나고 있다면

그것을 위해 노력하고 있다면

 

우리는 인생이란 여행이 끝나고

즐거운 여행이었다고 말 할 수 있지 않을까?

 

앞으로 당신의 인생이란 여행이

잊혀지지 않는 좋은 추억들로 더 많이 채워지며

좋아하는 것을 많이 만나며 즐거운 여행이 될 수 있기를

 

즐거운 노래와 맛있는 음식과 좋은 장소와

마음이 풍요로운 사람들을 

여행에서 많이 만날 수 있기를 희망한다.

 

 

「지쳤거나 좋아하는게 없거나」 中

아 여행가고 싶다..

 

 

'Think' 카테고리의 다른 글

두 번은 없다  (0) 2021.08.19
마음과 말  (0) 2021.07.10
신호등  (0) 2021.01.22
혼자의 시간을 잘 보내는 방법  (0) 2020.11.04

데이터베이스에서 가져온 데이터를 php에서 실행하고자 할 때, 
데이터베이스와 php는 서로 완전히 다른 기술이기 때문에 우리가 php라는 컴퓨터 언어를 통해서 그 데이터를 활용하기 위해서는 php 데이터 타입으로 전환하는 과정을 거쳐야 한다.

 

그 때 사용하는 api가 mysqli_fetch_... 들이다.

<!-- SELECT 문으로 하나의 행만 확인 -->
<?php
$conn = mysqli_connect('localhost','root','1111','mysqls');

$sql = "SELECT * FROM topic WHERE id=1";
$result = mysqli_query($conn, $sql);

$row = mysqli_fetch_array($result);
echo '<h1>'.$row['title'].'</h1>';
echo $row['description'];
?>

위 코드를 이해하기 위해 연관배열을 잠깐 언급하겠다.

 

 

현재 topic 테이블

$row = mysqli_fetch_array($result);
print_r($row);
echo $row[1]; 
echo $row['title']; 

mysqli_fetch_array($result) 는 result문이 가리키는 쿼리문의 결과를 하나씩 하나씩 배열로 리턴한다.

+) 더 이상 가져올 행이 없다면 NULL을 리턴한다.

 

따라서 $row 변수에는 php에 맞는 데이터 타입으로 전환된 배열이 들어가 있다.

 

실제 Array 배열을 출력

배열 = 키 값이 숫자, 연관배열 = 키 값이 문자

echo $row[1];  // MySQL =>데이터의 인덱스를 이용해서 데이터를 가져온다 : 배열
echo $row['title'];  // MySQL =>데이터의 컬럼의 이름을 이용해서 데이터를 가져온다 : 연관배열

 

 

우리는 해당 데이터의 배열의 인덱스를 하나하나 다 알 수 없기 때문에

연관배열 방법을 이용해서 원하는 데이터의 결과를 가져온 것이다.

echo '<h1>'.$row['title'].'</h1>';
echo $row['description'];

 

 

<!-- SELECT 문으로 모든 행 확인 -->
<?php
$conn = mysqli_connect('localhost','root','1111','mysqls');

$sql = "SELECT * FROM topic";
$result = mysqli_query($conn, $sql);

while($row = mysqli_fetch_array($result)){
  echo '<h1>'.$row['title'].'</h1>';
  echo $row['description'];
}
?>

while문을 활용해서 모든 행의 결과를 불러올 수 있다.

 

결과화면


+ PHP while문

<?php while(A)
B
C
?>

// A에 있는 코드는 무조건 실행. 그 결과가 true라면 B와 C를 순차적 실행. 더 이상 실행시킬 코드가 없으면 다시 A로 돌아감. 결과가 NULL(flase)라면 while문 종료

 

'WEB > PHP' 카테고리의 다른 글

보안  (0) 2021.01.31
PHP와 MySQL 연동  (0) 2021.01.31
PHP & DATABASE  (0) 2021.01.30
form과 GET, POST  (0) 2021.01.29
PHP 문법 기초  (0) 2021.01.28

PHP와 MySQL 연동 원리

MySQL 서버를 제어하기 위해선 MySQL 모니터가 필요했다.

 

대표적 MySQL Monitor

MySQL 모니터에서 sql문을 입력하면 MySQL 서버가 처리한 후 결과를 보여준다.

MySQL 모니터는 MySQL에 대해서 클라이언트인 셈이다.

(MySQL 클라이언트에는 Workbench, phpMyAdmin 등이 있다.)

 

이때, PHP 도 MySQL 서버에 대해서 클라이언트로서 동작이 가능하다. 

 

PHP와 MySQL 연동을 위해

php mysql api를 검색 후, 이후 진행되는 실습에서는 mysqli api 방식을 사용하기로 하였다.

 

<?php
$conn = mysqli_connect('localhost','root','1111','mysqls'); 
$sql = "INSERT INTO topic
    (title, description, created)
    VALUES(
      '{$_POST['title']}',
      '{$_POST['description']}',
      NOW()
    )";
$result = mysqli_query($conn,$sql);
    
if ($result === false){
  echo mysqli_error($conn);
  echo '저장하는 과정에서 문제가 생겼습니다. 관리자에게 문의해주세요';
  error_log(mysqli_error($conn)); 
} else {
  echo '성공했습니다.';
}

if(mysqli_connect_error()){
	printf("Connect failed: %s\n",mysqli_connect_error()); 
	exit();
};
?>


① $conn = mysqli_connect('localhost','root','1111','mysqls');

// 데이터베이스에 PHP 접속
//함수에 들어가는 인자 : 호스트(데이터베이스의 서버 주소), 사용자 네임, 비밀번호, 데이터베이스(스키마) 이름

 

② $sql = "INSERT INTO topic
    (title, description, created)
    VALUES(

      '{$_POST['title']}',
      '{$_POST['description']}',

       NOW()

     )

";

// sql 문 작성. html에서 POST 방식으로 작성할 것이기 때문에 $_POST['name'] 방식 사용

 

③ $result = mysqli_query($conn,$sql);
//mysqli_query( ): php가 클라이언트가 되어 데이터베이스 서버에 sql문 실행

//실패 시 false, 성공 시 객체 리턴

// 함수에 들어가는 인자 : (데이터베이스 접속 정보 변수, sql문)

 

④ if ($result === false){
  echo mysqli_error($conn);

// mysqli_error( ) :저장하는 과정에서 어떤 에러가 발생했는지 알려주는 함수

// 그러나 사용자에게 그대로 보여주면 보안 위협이 있으므로 아래와 같이 진행
  echo '저장하는 과정에서 문제가 생겼습니다. 관리자에게 문의해주세요';
  error_log(mysqli_error($conn)); //error_log( ): 아파치 error log 디렉토리에 에러사항이 기록됨
} else {
  echo '성공했습니다.';
}

 

⑤ if(mysqli_connect_error()){

printf("Connect failed: %s\n",mysqli_connect_error());

exit();

}; // 접속 에러일 때 사용하는 함수
?>

'WEB > PHP' 카테고리의 다른 글

보안  (0) 2021.01.31
PHP와 MySQL_연동 후 데이터 출력  (0) 2021.01.31
PHP & DATABASE  (0) 2021.01.30
form과 GET, POST  (0) 2021.01.29
PHP 문법 기초  (0) 2021.01.28

PHP & DATABASE 원리

 

데이터베이스가 갖는 '데이터를 효율적으로 관리할 수 있다'라는 장점과 이 갖는 '접근성'이라는 장점.

PHP의 '미들웨어'적 장점 등 이렇게 웹 서버, PHP, 데이터베이스 각각의 장점에 따라 역할을 분담하게 되는 것이다.

(PHP는 웹이라는 부품과 MySQL이라는 데이터베이스 부품을 붙이는 본드같은 기능을 한다.

따라서 이를 미들웨어 라고도 부른다.)

 

여기서 PHP는 웹 서버의 서버로서 동작하고, MySQL의 클라이언트로서 동작하고 있다는 것을 기억해야 한다.

 

'WEB > PHP' 카테고리의 다른 글

PHP와 MySQL_연동 후 데이터 출력  (0) 2021.01.31
PHP와 MySQL 연동  (0) 2021.01.31
form과 GET, POST  (0) 2021.01.29
PHP 문법 기초  (0) 2021.01.28
PHP의 이해  (0) 2021.01.28

MySQL

:: 세계에서 가장 많이 쓰이는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS).

:: 데이터베이스를 관리하거나 자료를 관리하기 위한 GUI 관리툴은 내장되어 있지 않고 오로지 명령어로만 동작

따라서 MySQL 프론트엔드 데스크톱 소프트웨어나 웹 애플리케이션을 사용해야 함

MySQL Workbench : 공식적 MySQL 프론트엔드 툴

MySQL과 같은 관계형 데이터베이스의 중요한 특징은 스프레드시트와 마찬가지로 데이터를 표의 형태로 표현해준다. 

 

 

MySQL의 구조

- 표(table)에 저장됨 -> 표가 늘어남 -> 정리정돈(디렉토리)의 필요성 증대

- 스키마? 서로 연관된 표들을 서로 그룹핑할 때 사용하는 일종의 폴더.

- 스키마들이 모인 것 = 데이터베이스 서버(database server)

데이터베이스 서버> 데이터베이스(스키마)> 표(table)

 

효용 

1. 보안 (자체적 보안 체계를 가지고 있어 안전한 보관 가능)

2. 권한 (다양한 사용자들이 관리할 수 있음 + 차등적 권한을 줄 수 있음)

 

SQL

(Structed Query Language)

:: 데이터를 관리하기 위한 쿼리 언어

:: 데이터베이스 종류와 상관 없이 모든 데이터베이스는 SQL을 통해서만 관리가 가능함

:: 기본적으로는 ANSI 표준이며 데이터베이스 회사별로 조금씩 차이가 있음

 

 

그리고 다양한 MySQL 명령들

(※ 주의 : 공부한 것을 까먹지 않도록 간단하게 적어놓은 것이므로 설명 등이 매우 부실함)

 

1. 데이터베이스 생성

CREATE DATABASE 데이터베이스명;

2. 데이터베이스 목록보기

SHOW databases;

3. 데이터베이스 선택

USE 데이터베이스명;

4. 테이블 생성

CREATE TABLE 테이블명(
-> 필드1 데이터타입 NULL수용여부(사용하지 않으면 기본적으로 NULL),
-> 필드2 데이터타입 NOT NULL,
...
-> PRIMARY KEY(필드1)); // PRIMARY KEY 부여 


예를 들어
CREATE TABLE opentutorials(
-> id INT(11) NOT NULL AUTO_INCREMENT,
-> title VARCHAR(30) NOT NULL,
-> description TEXT NULL,
-> created DATETIME NOT NULL,
-> profile VARCHAR(100) NULL,
-> PRIMARY KEY(id));

3. 테이블 목록보기

SHOW tables;

4. 테이블 구조 확인

DESC 테이블명;

5. 특정 칼럼에 키 부여

ALTER TABLE 테이블명 ADD PRIMARY KEY(필드명);

6. 데이터 입력

INSERT INTO //모든 필드에 데이터 추가 
-> 테이블명
-> VALUES(데이터1, 데이터2, 데이터3,,,);

예를 들어
INSERT INTO 
->opentutorials
->VALUES("SQL","SQL is....",NOW(),'kkami','developer');
INSERT INTO 테이블명(필드1, 필드2) VALUES(데이터1,데이터2);

예를 들어
INSERT INTO opentutorials(title,description,created,author,profile) 
->VALUES("SQL","SQL is....",NOW(),'kkami','developer');

7. 데이터 조회

SELECT * FROM 테이블명; // 전체 필드 데이터 검색

SELECT 필드명1, 필드명2 FROM 테이블명; // 특정 필드 데이터 검색

SELECT 필드명1, 필드명2 FROM 테이블명 WHERE 조건식; // 조건에 맞는 레코드 검색 명령

SELECT 필드명1, 필드명2 FROM 테이블명 WHERE 검색필드 LIKE 조건식 // 특정 문자열이 포함된 레코드 검색 명령

SELECT 필드명1, 필드명2 FROM 테이블명 ORDER BY 필드명; // 레코드 정렬 명령 -오름차순
SELECT 필드명1, 필드명2 FROM 테이블명 ORDER BY 필드명 DESC; // 레코드 정렬 명령 -내림차순

SELECT 필드명1, 필드명2 FROM 테이블명 ORDER BY 필드명 LIMIT 숫자;// 오름차순으로 해당 숫자만큼만 출력

SELECT * FROM 테이블명 LEFT JOIN 붙일 테이블명 ON 조건; // 테이블 합치기
ex) SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id; 

8. 데이터 수정

UPDATE 테이블명 SET 필드명='바꾸고자 하는 값' WHERE 조건;

예를 들어
UPDATE opentutorials SET id=3 WHERE id=1;

9. 데이터 삭제

DELETE FROM 테이블명 WHERE 조건;

10. 이름 변경

RENAME TABLE 테이블명 TO 바꾸고자 하는 값;

 

<form>태그

:: 입력 양식 전체를 감싸는 태그

:: form은 컨트롤 요소로 구성된다.(컨트롤 요소: text, button, radio 등)

 

▷ name : form의 이름. 서버로 보내질 때 이름의 값으로 데이터 전송

▷ action : form이 전송되는 서버 url 또는 html 링크

 method : 전송 방법 설정. get은 default, post는 데이터를 url에 공개하지 않고 숨겨서 전송하는 방법

 autocomplete : 자동 완성. on으로 하면 form 전체에 자동 완성 허용

<form name="profile" action="/action_page.php" method="get" 
      autocomplete="on">
  <input type="text" name="id">
</form>

 

 

form.html

<form 태그는 사용자 입력정보를 URL 파라미터로 만들어 내는 기계>

:: submit이 속해있는 form 태그의 action 속성이 가리키는 URL로 웹 브라우저는 그 URL 뒤에 내용을 붙여 전해준다.

 

form.html에서 title과 contents에 데이터를 넣어서 form.php에 보내고 있다.

+ form 태그 내부에서 method를 지정하지 않으면 기본값은 GET 이다.

 

 

form.php

php는 data 디렉토리에 title 파일을 생성한다.

+ file_put_contents(디렉토리,내용) : 지정한 디렉토리에 입력한 내용이 담긴 파일을 만들어주는 함수이다.

+ 입력 내용을 $_GET[' '] 방식으로 받는 것도 주목

 

data 디렉토리 내부 구성
 GET 방식_내용 작성
form.php로 보내진 url

url을 확인해보면 title과 contetns에 어떤 내용이 담겼는지 알 수가 있다.

 

해당 파일 추가

파일 추가 기능이 잘 이루어졌다는 것도 확인할 수 있다.

 


이렇게 GET방식(url 파라미터를 통해서 서버 쪽에 데이터를 전송하는 것)은 북마크에서 사용하기 적합한 방식이다.

즉, 어떤 콘텐츠를 다른 사람에게 공유할 때 적합한 방식이다.

 

반대로 내용을 작성하여 url을 통해 데이터를 서버로 전송하는 방식은 이 주소를 공유했을 때 데이터가 추가돼버리는 등 여러 문제가 생긴다. (삭제, 수정의 경우도 마찬가지)

 

따라서 form에 데이터를 전송하는 하는 방식을 POST로 설정하여 url을 통하지 않고 해당 데이터를 은밀하게 서버로 전송해야 한다.

수정한 form.html
수정한 form.php

+ 입력 내용 $_POST[' '] 방식

 

수정한 form.html 페이지_내용 작성
form.php로 보내진 url

URL 부분이 깔끔하다!

 

form.php 확인

form.php의 네트워크 부분을 확인해보니

해당 내용이 우리가 볼 수 없는 방식으로 은밀히 전달된 것을 확인할 수 있다.

 

해당 파일 추가

 

'WEB > PHP' 카테고리의 다른 글

PHP와 MySQL_연동 후 데이터 출력  (0) 2021.01.31
PHP와 MySQL 연동  (0) 2021.01.31
PHP & DATABASE  (0) 2021.01.30
PHP 문법 기초  (0) 2021.01.28
PHP의 이해  (0) 2021.01.28

php의 기본이 되는 것들을 아주 간단하게 적어놓았다. 

 

Variable

:: 변수는 $로 표시

:: . 으로 연결

<?php  
$name="kkami"  
"hello".$name."good morning";
?>

 

Parameter

:: url의 입력값 전달은 ?

ex) http://127.0.0.1/parameter.php?name=kkami&address=서울

 

:: 전달받은 것을 화면에 출력하고자 할 땐 $_GET['변수명']로 출력

 <html>
 	<body>
    	안녕하세요. <?php echo $_GET['address'];?>에 사시는 <?php echo $_GET['name'];?>님
  	</body>
</html>

 

줄바꿈

:: 1. 문자열 안에 <br>태그 삽입

:: 2. nl2br( ) 함수 사용 (new line to br)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <h1>newline</h1>
    <?php
    $str = "발 끝에 닿을 듯한 어둠에
            그림자마저 사라져
            등뒤로 도망가는 너란 해 Bye
            궤도를 벗어난 행성
            이별에 우린 부딪히려 해
            난 차라리 모든 걸 잊어버린
            너를 원해
            흐르는 별들 속에 헤매던 그때
            이뤄지지 않을 꿈안에 갇혀 Fly away
            빛을 건너 그 날의 널 볼 수 있다면
            지금 너와 난 영원을 속삭였을까
            Let me catch the light";
    echo $str;
    ?>
  </body>
</html>

가사 : 「하현상-3108」

이렇게 문자열을 입력했을 때 결과화면은 아래와 같다.

 

가사가 str변수 안에 입력한 대로 줄바꿈이 되기를 원한다.

 

<br>태그 이용

    $str = "발 끝에 닿을 듯한 어둠에<br>
            그림자마저 사라져<br>
            등뒤로 도망가는 너란 해 Bye<br>
            궤도를 벗어난 행성<br>
            이별에 우린 부딪히려 해<br>
            ....
            let me catch the light";

이런식으로 문자열 사이에 줄바꿈을 원하는 곳에 <br>태그를 입력하면 된다.

 

nl2br( ) 함수

     <?php
     echo nl2br($str);
     ?>

하지만 nl2br( ) 함수를 이용한다면? 

한꺼번에 개발자가 원하는대로 코드의 줄바꿈이 가능해진다.

 

'WEB > PHP' 카테고리의 다른 글

PHP와 MySQL_연동 후 데이터 출력  (0) 2021.01.31
PHP와 MySQL 연동  (0) 2021.01.31
PHP & DATABASE  (0) 2021.01.30
form과 GET, POST  (0) 2021.01.29
PHP의 이해  (0) 2021.01.28

PHP¹

:: PHP는 웹프로그래밍을 위한 높은 생산성을 제공하는 언어이다.(웹을 위해서 만들어졌고, 지금도 웹을 위해서 발전하고 있는 웹을 위한 언어)

:: 서버 측에서 실행되는 프로그래밍 언어로 HTML을 프로그래밍적으로 생성해주고, 데이터베이스와 상호작용 하면서 데이터를 저장하고, 표현한다.

+) 특히 서버에 직접 설치해서 운영할 수 있는 설치형 웹에플리케이션(제로보드, 텍스트큐브, 워드프래스, PHPBB등)의 과반이 PHP로 만들어졌다.

 

PHP 이용 시 웹 페이지를 자동으로 생성할 수 있다.

사이트의 운영자가 컨텐츠의 내용을 작성해서 PHP에게 넘기면 PHP는 사용자 대신에 컨텐츠를 html으로 만들어준다.

 

PHP의 원리

웹 브라우저 상에서 html 문서를 요청하면 웹 서버는 자신이 가지고 있던 html 파일을 그대로 보여준다.(정적)

그러나 php 문서를 요청하면 웹 서버는 이 요청을 php 에 위임하고 php가 html 파일을 생성한 후, 웹 서버가 이를 보여준다.(동적)

 

 

 

 

 

 

(¹출처: opentutorials.org/index.php/course/62)

'WEB > PHP' 카테고리의 다른 글

PHP와 MySQL_연동 후 데이터 출력  (0) 2021.01.31
PHP와 MySQL 연동  (0) 2021.01.31
PHP & DATABASE  (0) 2021.01.30
form과 GET, POST  (0) 2021.01.29
PHP 문법 기초  (0) 2021.01.28

+ Recent posts