기타/WWW

PHP 5 투토리얼 (3) - 고급

하늘이푸른오늘 2014. 6. 23. 16:36

W3C PHP 강좌 제3장 입니다. 1장 기초2장 Form도 참고하세요.


다차원 배열


  • PHP의 배열(Array)는 key/value의 리스트
  • PHP의 다차원 배열은 여러개의 배열을 담은 배열(array containing one or more arrays)
  • 2차원 배열은 배열의 배열

$cars = array (
    array("Volvo",22,18),
    array("BMW",15,13),
    array("Saab",5,2),
    array("Land Rover",17,15)
);


  • echo $cars[0][0]." : in stock ".$cars[0][1]." : sold ".$cars[0][2].".<br />"; 와 같이 참조가능


날짜와 시간


  • date(format, timestamp) : timestamp는 옵션. default는 현재시간.
  • echo "Today is " . date("Y-m-d") . "<br />";     // 여기에서 Y, m, d, 1 (요일) 등 사용가능
  • &copy 2010-<?php date("Y") ?>                         // @2010-2014 로 표시됨
  • echo "The time is : " . date("h:i:s") . <br />";    // 여기에서 h, i(시간), s, a(오전 오후)  등 사용가능 
  • date_default_timezone_set()                             // 시간대 설정
  • mktime(hour, min, sec, month, day, year)         // 시간 생성
  • strtotime("10:30am April 15 1999"); strtotime("tomorrow")    // 인간이 사용하는 시간을 저장


Include


  • Include (혹은 require)는 지정한 텍스트/코드/등을 읽어들이는 문장으로, php, html 등을 반복적으로 사용할 때 유용함. 두 문장은 기능적으로 동일
    • include 의 경우, 에러가 발생하더라도 경고만 하고 계속진행
    • require의 경우, 에러가 발생하면 정지
  • include 'filename'; 또는 require 'filename'; 으로 사용
  • 공통 라이브러리로 사용하거나, 메뉴로 사용하거나, 변수 저장소로 사용하거나... 


File Handling


  • readfile() : 파일을 읽어서 output buffer로 보냄. (즉, 일반적으로는 화면에 그대로 표시됨)
  • fopen("filename", "mode");     // 모드는 r/w/a/x/r+/w+/a+/r+

<?php

$myfile = fopen("webdictionary.txt", "r") or die("Unable to open");

// echo fread($myfile, filesize("webdictionary.txt"));

while(!feof($myfile)) {

echo fgets($myfile) . "<br />";    // 한줄 읽기

}

fclose($myfile);

?>


  • File upload form
<html>
<body>

<form action="file_upload.php" method="post" enctype="multipart/form-data">
<label for="file">Filename :</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html>


  • file_upload.php
  • 다만 여기에 파일의 최대크기, file type 등을 체크하는 기능이 필요
<?php
if ($_FILES["file"]["error"] > 0){
echo "Error : " . $_FILES["file"]["error"] . "<br />";

} else {

echo "Upload : " . $_FILES["file"]["name"] . "<br />";

echo "Type : " . $_FILES["file"]["type"] . "<br />";

echo "Size : " . ($_FILES["file"]["size"] / 1024) . " KB<br />"; 

echo "Stored in : "  . $_FILES["file"]["tmp_name"];

}

?>


Cookies


  • 쿠키는 사용자를 구분하는데 주로 사용된다. 쿠키는 서버에서 사용자 컴퓨터에 심는 작은 파일로서, 컴퓨터가 동일한 요청을 하면 쿠키도 함께 전송된다. PHP를 사용하면 쿠키를 생성할 수도, 값을 불러올 수도 있다.

<?php

$expire = time() + 60*60*24*30;
setcookie("user", "Min Heo", $expire);  // user 에 "Min Heo" 부여, 30일 후 해제

?>  // setcookie는 반드시 html 앞에 위치해야 한다. 


<html>


  • setcookie()는 자동으로 URLencode 됨. 원하지 않을때는 setrawcookie() 사용.
  • 쿠키를 읽을 때는 별도의 file open 작업이 필요없음. 

<?php

echo $_COOKIE["user"];    // "user"의 값

print_r ($_COOKIE);            // 모든 쿠키 값을 보는 방법

?>


Session


  • 세션... 한번의 접속?? 이때 세션에 따른 정보를 저장해 둘 수 있음

<?php

session_start();


if(isset($_SESSION['views'])) {

$_SESSION['views'] = $_SESSION['views'] +1;

} else {

$_SESSION['views'] = 1;

}


echo 'Pageviews = " . $_SESSION['views'];

?>


PHP Error


    • die() 로 처리
    • 별도의 에러 처리 루틴을 만듦
    • 에러 보고 


    PHP Filter


      • 의심스런 곳에서 입력된 데이터의 유효성 검증 및 필터링
      • PHP filter 는 데이터 필터링을 손쉽게 하기 위한 확장
      • 대부분의 웹앱은 외부 입력이 필요. 필터를 사용하면 항상 올바른 입력이 들어오도록
      • 모든 종류의 외부 데이터는 다 필터링을 해야 함
        • form 으로부터의 입력
        • 쿠키
        • 웹 서비스 데이터
        • 서버 변수
        • 데이터 쿼리 결과
      • Validating Filter
        • 사용자 입력의 검증
        • 정확한 포맷 확인 (이메일 또는 URL 등)
        • 성공시 기대한 타입을 반환, 실패시 FALSE 반환
      <?php
      if(!filter_has_var(INPUT_GET, "email")){   //GET 타입의 INPUT 변수인 "email"이 존재하는가?
      echo("Input type does not exist");
      } else {
      if(!filter_input(INPUT_GET, "email", FILTER_VALIDATION_EMAIL)) { 
      echo("Email is not valid");
      } else {
      echo("Email is valid");
      }
      }
      ?>
      • Sanitizing Filter
        • 문자열에서 특정 문자를 허용/불가
        • No data의 포맷 룰
        • 항상 문자열을 반환함
      <?php
      if(!filter_has_var(INPUT_POST, "url")) {
      echo ("Input type does not exist");
      } else {
      $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL);
      }
      ?>