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

기타/웹 2.0 2014.06.23 16:36 Posted by 푸른하늘 푸른하늘이

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);
      }
      ?>


      댓글을 달아 주세요

      BLOG main image
      공간정보와 인터넷지도
      제 관심사는 계속 바뀝니다. 이 블로그를 유지하는 동안에도 벌써 여러번 주제가 빠뀐 것 같습니다. 돌고 돌아 이제 고향으로 돌아왔습니다. 공간정보입니다. 세계를 측정하고, 그 기준을 세우고, 데이터를 효율적으로 공유하는 것이 공간정보에서 다루는 내용입니다. 4차산업혁명이 데이터 기반이라고들 합니다. 데이터는 그냥 모아둔다고 정보가 되지 않습니다. 표준에 따른 공통 스키마를 기반으로 만들어져야 합니다. 누구나 언제든지, 쉽고 투명하게 데이터를 가져다 쓸
      by 푸른하늘이
      Profile for bluesky61

      달력

      «   2019/11   »
                1 2
      3 4 5 6 7 8 9
      10 11 12 13 14 15 16
      17 18 19 20 21 22 23
      24 25 26 27 28 29 30

      카테고리

      전체보기 (1590)
      구글어스 (829)
      공간정보 (240)
      사진 (103)
      드론/쿼드콥터 (239)
      지오캐싱 (47)
      기타 (131)
      • 4,672,798
      • 42423
      TNM Media textcube get rss

      공간정보와 인터넷지도

      푸른하늘이's Blog is powered by Tistory. / Supported by TNM Media.
      Copyright by 푸른하늘이 [ http://www.ringblog.com ]. All rights reserved.

      Textcube TNM Media
      푸른하늘이's Blog is powered by Tistory. Designed by Qwer999. Supported by TNM Media.