PHP

최명수·2023년 2월 15일

개요

PHP는 서버 측에서 실행되는 프로그래밍 언어로 HTML을 프로그래밍적으로 생성해주고, 데이터베이스와 상호작용 하면서 데이터를 저장하고 표현합니다. PHP는 웹을 위해서 만들어졌고, 지금도 웹을 위해서 발전하고 있는 웹을 위한 언어입니다.

✏ PHP?

  • 주로 HTML 코드를 프로그래밍적으로 생성
  • 서버쪽에서 실행되는 프로그래밍 언어
  • Personal Home Page Tools의 약자에서 PHP:Hypertext Preprocessor로 의미가 변경 되었다.

✏ PHP의 장점

  • 웹에 최적화된 언어
  • 웹개발에 필요한 수많은 로직들이 함수의 형태로 미리 제공됨
  • 처리속도가 빠르다.
  • 거의 모든 데이터베이스를 지원
  • 가장 많은 공개소프트웨어가 PHP로 만들어짐
  • 코드 작성이 쉽고 문법이 간단하다.(PHP 문법은 C/C++언의 문법과 비슷하여 클래스를 지원하여 효율적인 코딩이 가능하고, 스크립트 언어이기 때문에 HTML문서 내부에 입력하여 실행 할 수 있는 편리한 언어이다)

✏ HTTP와 CGI

- HTTP : 웹 브라우저(클랑이언트)와 웹서버(서버)사이에 데이터를 주고 받기 위한 통신 규약

- CGI : 서버와 서버사이드스크립트 사이에 데이터를 주고 받기 위한 통신 규약

✏ PHP 실행에 대한 구조


컴퓨터의 운영체제(OS)위에 Web Server인 Apache가 설치되어 있다. 그 위에는 PHP interpreter가 존재한다. 정확히 말하면, PHP interpreter는 Apache위에 설치되었다기보다는 함께 등장하는 형태라고 표한하는 것이 맞을거 같다. PHP interpreter는 Apache와 통신을 통해 PHP 코드 실행 결과를 해석해서 Apache에게 전달한다. 그리고 그 위에 우리가 만드는 소프트웨어인 PHP Application이 존재한다. 이 PHP Application이 우리가 알고있는 확장자가 .php인 스크립트라고 보면 된다.

✏ PHP 기본 문법 정리

숫자와 문자

  • var_dump : 형식에 대해 알 수 있따.
  • 문자에 대해 표현할 때는 ""(큰따옴표)나 ''(작은따옴표)로 묶어줘야 한다.
  • 문자와 문자를 결합하기 위해서는 .(마침표)를 사용한다.
  • 문자 안에서 인용구를 사용하는 방법은 첫 번째 따옴표를 다르게 사용하는 것, 두번째는 \ (역슬래시)를 사용하는 것이다. 역슬래쉬 뒤에 있는 문자는 escaping이라고 해서 문자 그자체를 인식하게 된다. ex)
<?php
echo '그는 "안녕하세요" 라고 말했다.';
echo "그는 \"안녕하세요\" 라고 말했다."
?>

변수와 상수

  • 변수를 선언하기 위해서는 $(달러 기호)를 사용한다
    $변수 이름 = 초깃값; 변수는 정수 값뿐만 아니라 실수 값, 문자열도 대입할 수 있다.
  • 작성한 변수를 문자열 내에서 사용하면, PHP는 해당 변수에 저장된 값으로 자동 변환해준다. 그러나 변수의 이름 뒤에 다른 문자가 오게 되면 해당 변수를 정확하게 인식하지 못하기 때문에 {}(중괄호)로 변수이름을 감싸서 어디까지가 변수 명인지 확실하게 명시해야 한다.
<?php
$var = 10;
echo "변수 \$var에 저장된 값은 $var 입니다. </br>";
echo "변수 \$var에 저장된 값은 $var입니다. </br>";
echo "변수 \$var에 저장된 값은 {$var}입니다.";
?>
  • 상수는 변하지 않는 값입니다. define() 함수를 사용하여 선언할 수 있다.
    define(상수 이름, 상숫값, 대소문자 구분여부)

global - 전역 변수

  • 일반 javascript와는 다르게 php에서는 전역변수를 사용하기 위해 global라는 것을 변수 앞에 붙여줘야 제대로 전역변수를 사용할 수 있음.
    형식 : global $변수;

배열

  • 배열은 한쌍의 키와 값으로 이루어진 맵(map)으로 구성된 순서가 있는 집합입니다. 배열은 주로 연관된 데이터를 모아서 관리하기 위해 사용하는 데이터 타입입니다. PHP에서의 배열은 다음 언어에서 리스트라고도 하는 형태입니다.
  • 배열을 생성할때는 array()라는 함수를 이용한다
    $배열이름=array();
  • 배열의 요소에 접근하기 위해 인덱스사용 0부터시작한다.
    $배열이름[인덱스];
<?php
$arr = array();
$arr[0] = "A";
$arr[1] = "B";
$arr[2] = "C";
var_dump($arr);
?>
  • 생성과 동시에 초기화도 가능하다
    $배열이름=array(배열요소1,배열요소2,...)
  • isset()함수는 인수로 전달받은 변수가 초기화되어 있는지 확인해준다
<?php
$arr = array();
$arr[10] = "hello";

var_dump($arr);
var_dump($arr[0]);
var_dump(isset($arr[0]));   // 결과  :false
var_dump(isset($arr[10]));  // 결과  :true
?>
  • 배열과 반복문
<?php
$arr = array("A", "B", "C");
for ($i=0; $i<count($arr); $i++) {
    echo $arr[$i]."<br/>";
}
?>
  • count()는 배열의 모든 요소의 개수를 반환하는 함수이다. 배열에 3개의 요소가 존재하므로 count($arr)은 3이다.
  • foreacah를 사용하면 배열의 모든 요소에 접근할 수 있다.
  • 배열의 맨 끝에 요소추가
    array_push($배열이름,배열요소);
  • 배열의 맨끝에 복수 요소 추가
    배열이름=arraymerge(배열이름=array_merge(배열이름,[배열요소1,배열요소2]);
  • 배열의 맨 앞에 요소 추가
    array_unshift($배열이름,배열요소);
  • 배열의 특정 인덱스에 요소 추가
    array_splice($배열이름,인덱스번호,0,배열요소);
  • 배열의 특정 인덱스 기준으로 특정 길이 제거 후 요소 추가
    array_splice($배열이름,인덱스번호,제거할길이,배열요소);
  • 배열의 맨 앞 요소 제거
    array_shift(%배열이름);
  • 배열의 맨 뒤 요소 제거
    array_pop($배열이름);
  • 정렬
    sort($배열이름);
  • 역순정렬
    rsort($배열이름);

✏ 입출력 그리고 폼과 HTTP

에플리케이션의 입력값과 폼

<?php
echo $_GET['id'];
?>

위의 코드를 브라우저로 열어보자. 이 때 파일명 뒤에 ?id=k8805 입력

url의 k8805를 choi으로 변경하면 화면에는 choi가 출력된다. 코드상의 $_GET['id']는 url의 내용 중 에서 '?id='뒤에 따라오는 데이터로 치환된다는 것을 추정할 수 있다.

<?php
echo $_GET['id'].','.$_GET['password'];
?>

위의 코드로 만들어진 에플리케이션이 http://localhost/IO_form/2.php라고 한다면 url을 아래와 같이 입력해보자.
localhost/IO_form/2.php?id=k8805&password=111111
결과는 k8805,111111 일 것이다. 값을 바꿔보면 출력 값이 달라진다.
$_GET['password']의 값은 url의 내용 중 '&password=' 뒤의 데이터 라는 것을 알 수 있다.

  • '?'는 에플리케이션 2.php와 데이터를 구분해주는 구분자다.

  • '&'는 값과 값을 구분해주는 구분자다.

  • '='는 값과 값 사이의 구분자다

HTML Form

  • url에 직접 정보를 입력하는 것은 불편하다. 그래서 고안된 방법이 HTML의 폼이다.
<html>
<body>
    <form method="get" action="2.php">
        id :  <input type="text" name="id" />
        password :  <input type="text" name="password" />
        <input type="submit" />
    </form>
</body>
</html>
  • form이란 사용자가 입력한 정보를 받아서 서버로 전송하기 위한 HTML 태그이다. 사용자가 입력한 정보를 받는 UI를 입력컨트롤이라고 하는데 위으 코드에는 id와 password를 입력받는 입력컨트롤이 포함되어 있다. 입력 컨트롤에 입력된 정보는 해당 컨트롤의 속성 name의 값을 이름으로 데이터가 서버로 전송된다.
    정보 입력을 마치면 사용자가 입력한 정보를 서버로 전송할 수 있도록 해야하는데 그 때 사용하는 컨트롤이 submit버튼이다. 사용자가 submit 버튼을 누르면 입력 컨트롤에 입력된 정보는 form 태그의 action 속성에 지정된 url로 전송된다. 이 때 method에 지정된 방식에 따라서 get/post방식으로 데이터가 전송된다. 위에서 살펴본 url에 데이터를 첨부해서 전송하는 방식을 get방식이라고 부르고, post방식은 http 메시지의 본문에 데이터를 포함해서 전송한다.

  • GET VS POST 방식
    GET방식으로 데이터를 전송할 때 URL에 데이터를 포함시키는 것에 비해서 POST 방식으로 데이터를 전송할때는 전송하는 데이터를 URL에 포함시키지 않고 전송 할 수 있다. 이러한 차이로 인해서 GET방식은 정보에 대한 링크로 많이 사용되고, POST방식은 사용자의 아이디나 비밀번호와 같은 데이터를 전송하는 방식으로 주로 사용한다.

출처 : 생활코딩

0개의 댓글