기타/WWW

PHP 5 투토리얼 (1) 기초

하늘이푸른오늘 2014. 6. 22. 23:49

저는 요즘 자바스크립트 열공중입니다. 그런데, 자바스크립트를 공부하려니, 점점 공부할게 늘어납니다. 자바스크립트는 클라이언트용 스크립트입니다. 즉, 웹브라우저와 같은 환경에서 서버로부터 받은 정보를 처리하는 용도입니다. 


그런데, 서버에서도 여러가지 작업이 필요합니다. 이를 위해서 필요한 게 서버측 스크립트인 PHP입니다.  파일을 올리고 DB를 조작하는 등 서버와 통신 등을 담당합니다.


이글은 http://www.w3schools.com/php/에 있는 PHP 5 투토리얼을 제 마음대로 간략하게 정리한 겁니다. 참고하세요.


PHP 는 서버 스크립트용 언어로, 동적/대화식 웹페이지를 빠르게 구축할 수 있는 강력한 도구이다. PHP는 널리 사용되며, 무료이고, 마이크로소프트의 ASP와 같은 유사한 도구를 효율적으로 대체할 수 있다.


첫번째 예제: 

<!DOCTYPE html>
<html>
<body>

<?php
echo "My first PHP script!";
?>


</body>
</html>


PHP란 무엇인가?

  • PHP는 "PHP Hypertext Preprocessor"의 약어임
  • PHP는 광범위하게 사용되는 오픈소스 스크립트 언어
  • PHP 스크립트는 서버에서 실행됨
  • PHP는 무료임.

PHP 파일은 어떤 것이 있나?

  • PHP files can contain text, HTML, CSS, JavaScript, and PHP code PHP code are executed on the server, and the result is returned to the browser as plain HTML PHP files have extension ".php"
  • PHP 파일에는 텍스트, HTML, CSS, Javascript, PHP 코드가 들어갈 수 있다.
  • PHP는 서버에서 실행되며, 그 결과는 브라우저에게 일반 HTML 형식으로 반환됨.
  • PHP 파일의 확장자는 .php

PHP로 할 수 있는 것

  • PHP can generate dynamic page content PHP can create, open, read, write, and close files on the server PHP can collect form data PHP can send and receive cookies PHP can add, delete, modify data in your database PHP can restrict users to access some pages on your website PHP can encrypt data
  • PHP는 동적인 페이지를 생성할 수 있음
  • PHP는 서버에 파일을 생성하고, 열기/읽기/쓰기/닫기 등이 가능함
  • PHP는 폼 data를 수집할 수 있음
  • PHP는 쿠키를 전송/수신할 수 있음
  • PHP는 데이터베이스에서 데이터를 추가/삭제/수정할 수 있음
  • PHP는 웹사이트중 일부를 사용자가 접근하지 못하도록 막을 수 있음
  • PHP는 데이터를 암호화할 수 있음

PHP의 결과가 HTML만 나오는 건 아님. 영상, PDF, 플래시 등도 가능하다. XHTML, XML 등의 텍스트도 가능


PHP를 사용하는 이유

  • PHP는 다양한 플랫폼(윈도, Linux, Unix, Mac OS X 등)을 지원함
  • 현재 사용되는 거의 모든 서버(Apache, IIS, 등)와 사용가능
  • 다양한 데이터베이스 지원
  • 무료. www.php.net 에서 다운로드 받으면 됨.
  • 배우기 쉽고, 서버에서 효율적으로 운영됨

PHP 문법

  • PHP는 문서 어디나 있어도 됨. <?php 로 시작하고 ?>로 끝남
  • 기본 확장자는 .php
  • PHP 파일에는 일반적으로 HTML 태그와 PHP 스크립트가 들어있음

<!DOCTYPE html>
<html>
<body>

<h1>My first PHP page</h1>

<?php
echo "Hello World!";
?>


</body>
</html>


참고로 php 구문은 세미콜론으로 끝남. 

코멘트

3가지 종류가 있음

  • 라인 코멘트 : //, #
  • 블록 코멘트 : /*   */

대소문자 구별

  • 사용자 정의 함수, 클래스, 키워드(if, else, while, echo, 등)은 대소문자 구별 없음
  • 단, 모든 변수는 대소문자를 구별함

PHP 변수


  • 변수명은 $로 시작하고 그 뒤에 변수명이 따라옴
  • 변수명은 반드시 문자 혹은 밑줄로 시작해야 함
  • 변수 이름은 숫자로 시작할 수 없음
  • 변수 이름에는 영문자, 숫자, 밑줄만 사용가능(A-z, 0-9, and _ ) 
  • 변수명은 대소문자를 구별함

변수선언

  • PHP에는 별도의 변수 선언이 없음. 값을 할당하는 순간 생성됨
  • 변수타입이 정해져 있지 않음
  • 변수타입은 필요에 따라 자동으로 변환됨


<?php
$txt="Hello world!";
$x=5;
$y=10.5;
?>


변수 범위(Scope)

  • 변수는 어디에서나 선언할 수 있음. 
  • 함수 바깥쪽에서 선언한 변수는 전역범위(global scope)를 가지며, 함수 바깥쪽에서만 사용가능 
  • 함수 내부에서 선언한 변수는 지역범위(local scope)를 가지며, 해당함수 안쪽에서만 사용가능

Global 키워드

  • global 이라는 키워드를 사용하면 global 변수를 함수 내부에서 사용할 수 있음.
  • 함수 내부에서 변수명 앞에 global이라고 쓰면 됨.
  • 글로벌 변수는 $GLOBAL[index]에 보관되므로(여기에서 index는 변수명), 이를 통해 직접 접근할 수도 있음

Static 키워드

  • 로컬 변수는 함수가 종료가 되면 사라지지만, static 변수는 그대로 살아 있음. 변수 앞에 stattic 키워드를 붙이면 됨
<?php
$x=5;
$y=10;

function myTest()
{
global $x,$y;
$y=$x+$y;

// $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']; 도 가능함
}


myTest();
echo $y; // outputs 15
?>


echo 와 print

  • 출력하기 위한 함수.
  • echo : 여러개의 string을 한꺼번에 출력 가능
  • print : 한번에 한개만 가능. 항상 1을 반환함.
  • echo "문자열" 도 가능하고, echo("문자열") 도 가능함. print 도 비슷

<?php
$txt1="Learn PHP";
$txt2="W3Schools.com";
$cars=array("Volvo","BMW","Toyota");

echo $txt1;
echo "<br>";
echo "Study PHP at $txt2";
echo "My car is a {$cars[0]}";
?>



데이터 타입

  • String, Integer, Floating point numbers, Boolean, Array, Object, NULL. 등이 있음.
  • string
    • 큰따옴표, 작은 따옴표 모두 허용. 
  • Integer
    • 10진수, 16진수 (0x로 시작), 8진수 (0으로 시작) 가 지원됨.
    • var_dump()함수를 사용하면 데이터 타입과 값이 반환됨.
  • Floating point numbers
    • 일반형(소수점) 및 지수형(2.4e4 등) 지원함
  • Bloolean
    • true, false
  • Array
    • 하나의 변수에 여러개의 값을 저장
    • index는 0부터 시작. 아래에서는 $cars(1)=="BMW".
    • $cars=array("Volvo","BMW","Toyota");
  • Object
    • 데이터와 처리방법(메소드)이 저장되어 있는 데이터 타입
    • 객체는 반드시 명시적으로 정의해야 함
    • 먼저 class 키워드를 사용하여 class를 정의해야 함.
    • this->$color 와 같은 방식으로 프로퍼터 참조.
  • NULL
    • 값이 없음을 알려주는 타입. 이 타입의 값은 NULL 하나뿐임. 
    • 변수가 값이 있는지 없는지 알아낼 수 있음. "" 과 NULL은 다름
    • 변수에 NULL을 저장하면 변수의 값을 지울 수 있음

PHP String 함수

  • strlen()
  • strpos(A, a) - 문자열 A에 a가 있는지 검색. 성공하면 첫번째 매칭 위치 반환. 아니면 false 반환

PHP 상수

  • 프로그램 시행중 값을 변경시킬 수 없는 식별자(이름)
  • 변수와는 달리 $ 표시가 없음. 범위(scope)는 자동적으로 global임
  • 상수는 define()을 사용하여 정의. 세번째 인수는 대소문자 구분여부를 설정

<?php
define("GREETING", "Welcome to W3Schools.com!", true); //case-insensitive
echo GREETING;
?>


PHP 연산자

  • 산술연산자 : +, -, *, /, %
  • 할당연산자 : =, +=, -=, *=, /=, %=
  • 문자열연산자 : . (문자열 연결) ...
  • 증가연산자, 감소연산자 : ++, --. 전치 후치 모두 가능

<?php
$a = "Hello";
$b = $a . " world!";
echo $b; // outputs Hello world! 
?>

PHP 비교연산자

  • 동등, 일치 : ==, === : 일치는 데이터 타입도 같아야 함.
  • 같지  않음 : <>, !=    : 이 두가지는 동일
  • 크다/작다  : >, <, <=, >=

<?php

$x = 100;

$y = "100";


var_dump($x==$y);   // boolean(true)

var_dump($x===$y);   // boolean(false)


?>

PHP 논리연산자

  • and, &&,          or, ||,      xor,    !

PHP 배열 연산자

  • + : 두 배열을 합침.  (단, 중복된 key를 덮어쓰지는 않음)
  • 비교연산자 : ==, ===, <>, !=, !==     : ===의 경우, key/values 일치, 순서일치, 타입일치 모두 성립해야 함

PHP 조건문

  • if()  {....}
  • if() elseif() elseif() else

<?php
$t=date("H");
if ($t<"10")
  {
  echo "Have a good morning!";
  }
elseif ($t<"20")
  {
  echo "Have a good day!";
  }
else
  {
  echo "Have a good night!";
  }
?>


PHP switch 문

  • c와 동일함

PHP 반복문

  • while (condition is true) { execute this code }
  • do { execute this code) while (condition is true)
  • for (initialize; test; increment) {execute}
  • foreach ($array as $value) {execute}

<?php 
$colors = array("red","green","blue","yellow"); 
foreach ($colors as $value)
  {
  echo "$value <br>";
  }
?>


PHP 함수

  • 함수 선언 : function functioname(arg, arg, ..) { }
    • 함수명은 대소문자를 구분하지 않음
  • default arguments  -> function(arg="10") { }  와 같이 인수에 값을 지정해 두면, 인수 없이 호출 가능
  • return 수식; 방식으로 반환값을 지정

<?php
function setHeight($minheight=50)
{
echo "The height is : $minheight <br>";
}

setHeight(350);
setHeight(); // will use the default value of 50
?>


PHP 배열

  • 배열은 여러개의 값을 한꺼번에 담을 수 있는 특수한 변수
  • 배열 생성 : array(); 세가지 종류가 있음
    • indexed array : index가 숫자임
    • Associative array : named key로 참조
    • Multidimensional array : 여러개의 배열을 담은 배열
  • Indexed array : 일반적 배열, 숫자가 인덱스. 
    • $cars=array("Volvo","BMW","Toyota");  - index가 자동으로 부여됨
    • $cars[0] 등으로 참조가능. 
  • Array의 크기(요소의 갯수)는 count($cars) 로 알 수 있음

<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);

for($x=0; $x<$arrlength; $x++)
  {
  echo $cars[$x];
  echo "<br>";
  }

// foreach로 구현하려면

// foreach($cars as $x)

//   {

//      echo $x . "<br>";

//   }
?>

  • Associative array : 이름이 키. 자바스크립트의 객체와 비슷.
    • $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
    • 또는  $age['Peter']="35";    $age['Ben']="37";     $age['Joe']="43"; 
    • foreach 를 사용하여 순환함.

<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

foreach($age as $x=>$x_value)
  {
  echo "Key=" . $x . ", Value=" . $x_value;
  echo "<br>";
  }
?>

  • Multidimensional array : 원소가 배열인 배열

PHP 배열 소팅

  • sort() : 오름차순
  • rsort() : 내림차순
  • asort() : Associative 배열에 대해, value 를 기준으로 오름차순
  • ksort() : Associative 배열에 대해, key 를 기준으로 오름차순
  • arsort() : Associative 배열에 대해, value 를 기준으로 내림차순
  • krsort() : Associative 배열에 대해, key 를 기준으로 내림차순

PHP 전역변수 - SuperGlobals

  • 미리 정의되어 있는 전역변수. 어디에서나 접근가능. 
  • $GLOBALS $_SERVER $_REQUEST $_POST $_GET $_FILES $_ENV $_COOKIE $_SESSION 등이 있음.

PHP $GLOBAL

  • PHP의 전역변수를 어디에서든 접근할 수 있게 해주는 Super Global 변수
  • 모든 전역변수는 $GLOBALS[index]에 저장됨. 
    • 전역변수 $gx  는 $GLOBALS['gx'] 로 접근가능.

PHP $_SERVER

  • 헤더, 경로, 스크립트 파일의 위치 등의 정보를 담고 있는 전역변수
  • $_SERVER['PHP_SELF']  현재 수행중인 스크립트 파일명 
  • $_SERVER['SERVER_ADDR'] 호스트 서버의 IP 주소
  • $_SERVER['REQUEST_METHOD'] 해당 페이지를 호출하는 데 사용된 호출방법 (POST 등)
  • $_SERVER['QUERY_STRING'] query string으로 호출되었을 경우, 그 쿼리문
  • $_SERVER['REMOTE_ADDR'] 뷰어의 IP 주소
  • $_SERVER['SCRIPT_URI'] 현재 페이지의 URI

PHP $_REQUEST

PHP $_REQUEST 는 HTML 폼을 제출한 후, 데이터를 수집하는데 사용됨.


아래의 예는 input 필드와 submit 버튼이 있는 폼임. 사용자가 submit 버튼을 제출하면, Form 의 데이터가 <form> 태그의 action 속성에 지정된 파일에 전달됨. 이 예제에서는 자기 자신을 지정하였음 <?php echo $_SERVER['PHP_SELF']; ?> 폼데이터를 다른 PHP 파일로 처리하게 하려면 여기에 파일명을 지정하면 됨. 그 다음 input 필드의 값은 super 전역변수인 $_REQUEST 를 사용하여 수집함.


<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">

// 실행시킬 파일명으로 자기 자신을 지정함
Name: <input type="text" name="fname">
<input type="submit">
</form>

<?php 
$name = $_REQUEST['fname'];  // 제출된 form에서 fname 필드 값을 읽어옴
echo $name; 
?>

</body>
</html>


PHP $_POST

PHP $_POST는 method="post"를 사용하여 HTML 폼을 제출한 후, 데이터를 수집하는데 널리 사용됨

아래의 예는 input 필드와 submit 버튼이 있는 폼임. 사용자가 submit 버튼을 제출하면, Form 의 데이터가 <form> 태그의 action 속성에 지정된 파일에 전달됨. 이 예제에서는 폼데이터를 처리하기 위해 자기 자신을 지정하고 있음. 폼데이터를 다른 PHP 파일로 처리하게 하려면, 파일명을 바꾸면 됨. input 필드의 값을 수집하려면 super 전역변수인 $_POST 를 사용하면 됨.


    <html>

    <body>


    <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">

    Name: <input type="text" name="fname">

    <input type="submit">
    </form>


    <?php
    $name = $_POST['fname'];

    echo $name;

    ?>

    </body>

    </html>

    PHP $_GET

    PHP $_GET으로도 method="get"을 사용하여 HTML 폼을 제출한 후 데이터를 수집하는데 사용할 수있음. 

    아울러 URL에서 전송된 데이터를 수집할 수 있음. 

    다음과 같은 페이지가 있다고 가정.

    <html>
    <body>

    <a href="test_get.php?subject=PHP&web=W3schools.com">Test $GET</a>

    </body>
    </html>


    사용자가 이 페이지에서 "TEST $GET" 링크를 누르면, "subject"와 "web" 파라미터가 "test_get.php"에 보내짐. 

    "test_get.php" 파일에서는 $_GET 을 사용하여 그 값에 접근할 수 있음. 

    아래는 "test_get.php"의 소스임


    <html>
    <body>

    <?php 
    echo "Study " . $_GET['subject'] . " at " . $_GET['web'];
    ?>

    </body>
    </html>