상단

서버사이드 스크립팅 언어인 PHP(Php: Hypertext Preprocessor)에 대해서 정리를 한다.

 

프로그램 문법


PHP 기초

  • PHP 스크립팅 블럭

 
 
 
 
  : php.ini에서 사용 여부를 설정, short_open_tag 설정 값
  : 와 동일
 <% 스크립팅 코드를 여기에 %> : php.ini에서 사용 여부를 설정, asp_tags 설정 값
 
  • 주석

 
 //  한줄 짜리 주석
 /*  여러줄 짜리 주석  */
 # 셀스타일의 한줄짜리 주석
 

내장 상수

  • FILE : 전체 시스템 경로를 포함한 파일명

  • LINE : 현재 파일에서 라인 번호

  • CLASS : 클래스 명

  • METHOD : 클래스 메소드 명

  • FUNCTION : 함수 명

  • 참고 문헌

 
 

내장 함수

  • 동적인 함수 구현

 
 //--- 함수에 전달된 인자의 수 (인수 갯수 + 1)
 $num_args = func_num_args();
 //--- 함수에 전달된 인자의 값 (0, 1, 2, ...)
 $key = func_get_args(2);
 
  • is_object($object) : Object이면 True

 
 $vars = get_object_vars($object);
 foreach($vars as $key => $val) $this->add($key, $val);
 
  • is_array($object) : Array이면 True

 
 foreach($object as $key => $val) $this->add($key, $val);
 
  • isset(), unset()

  • empty(~)

 
 

특수 함수

Magic Methods

 
  • 생성자 : __construct()

 
 public function __construct() {
     $args = func_get_args();
     for ($i = 0, $n = count($args); $i < $n; $i++) {
     }
 }
 
  • __autoload($className)

 
 function __autoload($className) {
     include_once $className . ".php";
 }
 
  • __clone()

 
 $newObj = close $obj;
 
  • ~ instanceof ~

  • 소멸자 : __destruct()

  • get 함수 : __get($name)

 
 public function __get($name = null) {
     return "aaa";
 }
 
  • set 함수 : __set($name, $value)

  • __call($method, $params), __callStatic($method, $params)

  • __isset(), __unset()

  • __sleep(), __wakeup()

  • __toString()

  • __invoke()

  • __set_state()

 
 

상수/변수 선언

PHP는 Loosely Typed Language (자료형 정의가 느슨한) 언어로 변수가 사용되기 전에 선언될 필요가 없다.

 
  • 상수 설정

    • define('상수명', 상수값);

    • const MIN = 0, MAX = 100;

    • $를 사용하지 않고 그냥 상수명을 그대로 사용함

     
  • 변수 설정

 
 $var_name = value;
 $var_array = array("Hello 1", "Hello2"); 인덱스는 0부터 시작함
 $str_array = array("name 1"=> 76, "name 2"=>45); 인덱스를 문자열로 사용함
 
  • 변수 영역 설정자

    • global : 전체적으로 사용할 수 있는 변수 선언

    • public, protected, private

    • static : 모두 하나의 변수를 사용하도록 하는 변수 선언

     
  • 변수 타입

    • Boolean : 논리값, True, False

    • Integer : 정수

    • Float, Double : 실수

    • String : 문자열

    • Array : 배열

    • Object : 객체, $obj->변수/함수(), obj::상수/Static 함수()

    • self::clamp($s), self::MIN

    • Resource : 자원

    • NULL

    • gettype(~) : 변수의 타입을 반환하는 함수

    • setType(~, ~) : 변수의 타입을 변환

     
  • 문자열

    • '', 문자열, "". 문자열 내의 변수 등이 파싱되어 처리됨

    • 문자열 결합 : "Hello "."World!"

    • 문자열 길이 : strlen(~)

    • 문자열 위치 추출 : strpos("Hello World!", "World"), 위치는 0부터 시작함

     
  • 날자

    • 오늘 날자 : time()

    • 날자 함수 : date(formattimestamp)

 
 echo date("Y.m.d");
  • Timestamp : 1970년 1월 1일 00:00:00 GMT 이래로 지난 초(second)

 
 mktime(hour, minute, second, month, day, year[is_dst](,));
  • boolean = checkdate(월, 일, 년);

  • array = getdate(timestamp);

    • seconds, minutes, hours, mday, wday(요일), mon, year, yday, weekday, month

     
  • 기타

    • isset(변수) : 변수에 초기값이 설정되어 있는지 확인 (boolean)

    • unset(변수) : 변수를 메모리에서 삭제

 
 

객체 선언

  • 객체 함수 및 변수 참조

    • 특수한 의미의 변수

      • $this : Class의 Instance

      • parent : 부모 Class

      • self : Class 자신

      • static : static Class에서 Class 자신 (static method 상속시 사용)

    • 객체 생성 : $obj = new Foo();

    • 객체 변수 참조

      • $this->var : class내의 함수에서 참조

      • self::$varStat : class내의 static 함수에서 참조

      • Foo::$varStat

      • Foo::varConst

      • $obj->var : 다른 class에서 참조

      • $obj->varConst : 다른 class에서 참조

    • 객체 함수 참조

      • $this->func() : class내의 함수에서 참조

      • $obj->func() : 다른 class에서 참조

      • Foo::funcStat()

 
 class Foo {
     const varConst = "hello";
     public $var = null;
     public static $varStat = null;
 
     function func() {
         return "result";
     }
 
     function funcStat() {
         return "result";
     }
 }
 
  • Sample

 
 abstract class AbstractClass
 {
     abstract protected function getValue();
 }
 
 interface iTemplate
 {
 }
 
 class foo extends Cart implements iTemplate
 {
     public static $public = 'Public';
     protected $protected = 'Protected';
     private $private = 'Private';
     var $todays_date;
     const CONST_VALUE = 'A constant value';
    
     final function foo()
     {
         $this->todays_date = date("Y-m-d");
         parent::example();
         $globalref[](.md) = &$this;
     }
 
     public function __get($nm) {}
     public function __set($nm, $val) {}
     public function __isset($nm) {}
     public function __unset($nm) {}
 }
 
 $bar = new foo;
 $bar->add_item("10", 1);
 foo::add_item("10", 1);
 $foo::CONST_VALUE;
 $copy_of_object = clone $object;
 
 [Reflection::export(new ReflectionClass('Exception'));](http://www.php.net/manual/kr/language.oop5.reflection.php)
 
 namespace A;
 A::foo();  // "namespace function"
 

연산자

  • 연산자

    • 산술 연산자 : +, -, *, /, %, ++, --

    • 할당 연산자 : =, +=, -=, *=, /=, .=, %=

    • 논리 연산자 : &&, ||, !

 
 

조건문/반복문

  • 조건문

 
 if (조건) {
 } elseif (조건)
 } else {
 }
 
 switch (표현) {
 case label1: 실행될 코드; break;
 default    : 실행될 코드; break;
 }
 
  • 반복문

    • while 반복문

 
 while (조건) {
 }
 
  • do while 반복문

 
 do {
 } while (조건);
 
  • for 반복문

 
 for (초기화;조건;증가값) {
 }
 for ($i = 1; $i <= 10; $i++) {
    echo $i;
 }
 
  • foreach 반복문

 
 foreach ($var_array as $value) {
     여기서 $value를 사용하여 작업
 }
 foreach ($var_array as $name => $value) {
     여기서 $value를 사용하여 작업
 }
 
  • 분기

 
 goto a;
 a:
 

오류 처리

php.ini 파일의 error_log 설정값에 따라 에러 로그를 서버의 로깅 시스템이나 파일로 저장한다.

 
  • 에러 메시지 표시 후 종료

 
 die("에러 메시지");
 
  • 강제로 에러 발생

 
 trigger_error("Error message!"[error_level](,));
 //--- error_level : E_USER_WARNING, E_USER_NOTICE (Default), E_USER_ERROR
 
  • 사용자 정의 오류 처리기 작성

 
 user_error_handler(error_level,error_message[error_file, error_line, error_context](,));
 set_error_handler("user_error_handler"[error_level](,));

{| cellspacing="1" cellpadding="1" border="1" width="100%" 
|- |width="20%" align="center"|매개 변수

|width="80%" align="center"|설명 
|- |error_level

2. E_WARNING, 512. E_USER_WARNING, 8. E_NOTICE, 1024.E_USER_NOTICE, 256. E_USER_ERROR, 4096. E_RECOVERABLE_ERROR, 8191. E_ALL
error_message
사용자 정의 에러를 위한 오류 메시지
-
error_file
에러가 발생한 파일 이름
-
error_line
에러가 발생한 줄번호(line number)
-
error_context
에러가 발생했을때 모든 변수와 그 변수의 값을 담은 배열
}
 function customError($errno, $errstr)
 { 
     echo "Error: [$errno]($errno.md) $errstr<br />";
     echo "Ending Script";
     die();
 }
 set_error_handler("customError");
 

기타 문법

  • 함수 선언

 
 //--- 참조 전달 : &$arg1, 함수를 호출하는 방식은 동일함
 function funcName(&$arg1, $arg2)
 {
     return "Hello World!";
 }
  • 참고 문헌 : PHP 내장 함수

  • 문자열 함수

    • eval(~) : 문자열 실행

     
  • Server Side Includes

    • require("fileName.php");, require_once("~");

      • 반환되는 값이 없음

      • 파일에서 선언이 되면 반드시 읽어 들여 처리함

      • 해당 파일이 없거나 파싱 오류가 발생하면 오류를 발생 시키고 중단됨

    • include("fileName.php");

      • 반환되는 값이 있음 (return 1)

      • 선언이 되어도 실제 호출되기 전까지는 읽어 들이지 않음

      • 해당 파일이 없거나 파싱 오류가 발생하여도 계속 수행됨

     
  • @~ : 에러 억제 연산자로 오류가 발생하여도 프로그램 계속 진행

    • track_errors 환경 변수 (php.ini)

    • $php_errormsg

     
  • ~
    : 실행 연산자로 실행 결과를 반환함

 
 

Type 변환

  • Integer

 
 intval(~)
 

입출력


전역 변수

  • GLOBALS : 전역 변수 배열

  • _SERVERS : 서버 변수

  • _ENV : 환경 변수

  • _SESSION : 세션 정보

  • _COOKIE : 쿠키 정보

  • _REQUEST, _GET, _POST : 사용자 요청

 
 

브라우저 입출력

  • 브라우저 입력

    • Form으로부터 입력 받기
      $_GET["name"], $_POST["name"], $_REQUEST"name"

    • 파일 업로드

      • HTML의

        문에 enctype="multipart/form-data"가 포함되어야 함

      • 환경 설정 : php.ini의 file_uploads, upload_max_filesize, upload_tmp_dir, post_max_size

 
 
      <!-- 항상 여기 위치 -->
     Filename :  
     
 
 
 if ($_FILES["filename"]["error"]("error".md) > 0) {
     echo "Error : " . $_FILES["filename"]["error"]("error".md)."<br />";
 } else {
     echo "Name      : ".$_FILES["filename"]["name"]("name".md)."<br />";
     echo "Type      : ".$_FILES["filename"]["type"]("type".md)."<br />"; (image/gif)
     echo "Size      : ".$_FILES["filename"]["size"]("size".md)." Bytes<br />";
     echo "temp File : ".$_FILES["filename"]["tmp_name"]("tmp_name".md);
 }
 
  • 브라우저 출력

 
 
 
 

Cookie 입출력

  • Cookie 읽기
    $_COOKIE["name"], $_REQUEST"name"

  • Cookie 확인

 
 if (isset($_COOKIE["name"]("name".md))) { ~ }
 
  • Cookie 쓰기/삭제

 
 setcookie(name, value, expire, path, domain);
 setcookie("user", "Sirjhswin", time() + 3600);
 setcookie("user", "", time() - 3600); //--- Cookie 삭제
 setrawcookie(~); //--- URL 인코딩이 안되게 하고 싶을 때 사용
 

세션 입출력

  • 세션 설정

    • <html> 태그 이전에 session_start() 함수를 호출할 것

 
 <?php session_start(); ?>
 <?php session_name(); ?>
 <?php session_id(); ?>
 <html>
 
  • 세션 읽기

 
 $_SESSION["name"]("name".md)
 
  • 세션 쓰기

 
 $_SESSION["name"]("name".md) = value;
 
  • 세션 삭제

 
 unset($_SESSION["name"]("name".md));
 session_destroy(); //--- Session 완전 삭제
 
  • 세션 만료 시간

    • php.ini에서
      :session.gc_maxlifetime=초 
      :session.cookie_lifetime=초 또는 ini_set('session.cookie_lifetime', 0)

 

데이터베이스 입출력

  • MySQL에 접속

 
 $conn = mysql_connect("localhost", "아이디", "암호"); or mysql_pconnect()
 mysql_select_db("데이터베이스", $conn);
 //--- 여기에 필요한 코드 추가
 mysql_close($conn); 
 
  • MySQL에서 select

 
 $query  = "select * from question";
 $result = mysql_query($query, $conn);
 $count  = mysql_num_rows($result);
 
 for ($idx = 0;$idx < $count;$idx++) {
     $fieldName = mysql_result($result, $idx, "fieldName");
 }
 
  • MySQL에 update/insert

 
 mysql_query("insert into tableName value('aa', 'bb')");
 
 
 

파일 입출력

  • 표준 입출력

    • 표준 입력 파일명 : php://stdin

    • 표준 출력 파일명 : php://stdout

    • 표준 오류 파일명 : php://stderr

    • cat custom.php | php -f custom.php 2> /dev/null > custom1.php

 
 
 
  • 파일 존재 확인 : file_exists("welcome.txt");

  • 파일 입력

 
 $finp = fopen("welcome.txt", "r")  or exit("Unable to open file!");
 //--- mode : r. 읽기, r+. 읽기/쓰기, w. 쓰기, w+. 쓰기/읽기, a. 추가, a+. 추가/읽기, x. 쓰기 (파일이 존재하면 오류), x+. 쓰기/읽기
  
 while (!feof($finp)) {
     echo fgets($finp)."<br/>";
     //--- fgetc($finp) : 한 글자씩 읽는다.
     //--- fgets($finp) : 한 줄씩 읽는다.
 }
 
 fclose($finp);
 
  • 파일 출력

 
 $fout = fopen("welcome.txt", "w")  or exit("Unable to open file!");
 $fout = fopen("welcome.txt", "a")  or exit("Unable to open file!");
 
 //--- fputc($fout, $char) : 한 글자씩 쓴다.
 //--- fputs($fout, $str) : 한 줄씩 쓴다.
 //--- fwrite($fout, $str)
 fclose($fout);
 
  • 파일 삭제

 
 unlink(~);
 
  • 폴더 관리

    • opendir(), readdir(), closedir(~)

    • mkdir(, ~), umask(), rmdir(), rename(, ~)

 
 if ($handleDir = opendir($paraDir)) {
 	while (false !== ($file = readdir($handleDir))) {
 		if (($file != ".") && ($file != "..")) {
 			if (is_dir($paraDir."/".$file)) {
 				procDir($paraDir."/".$file);
 			} else {
 				php2po($paraDir."/".$file);
 			} 
 		}
     }
 	closedir($handleDir);
 }
 

메일 입출력

  • 메일 설정
    메일을 사용하려면 메일 서버가 필요하고 php.ini에 관련 설정이 되어 있어야 한다.

    • SMTP : localhost, SMTP 서버의 DNS 이름이나 IP 주소 (for windows)

    • smtp_port : 25, SMTP 포트 번호 (for windows)

    • sendmail_from : NULL, 보낸 사람 주소 (for windows)

    • sendmail_path : sendmail 프로그램의 위치 (for unix)

     
  • 메일 발송
    메일을 사용할 때에는 입력되는 변수를 확인해서 스펨 메일이 발송되지 않도록 주의를 하여야 합니다.

 mail(to, subject, message[headers, parameters](,));
 message에서 각 줄은 각줄은 LF(\n)로 구분되어야 합니다.
 
 mail("test@test.com", "Test mail", "Hello World!");
 
  • 메일 수신

 
 $imap = imap_open(메일박스, 사용자, 암호), imap_close($imap)
 imap_headers($imap), imap_header($imap, $messageid), imap_fetchheader($imap, $messageid)
 imap_body($imap, $messageid)
 imap_delete($imap, $messageid) : 삭제하겠다는 표시, imap_expunge($imap) : 실제 삭제
  • 메일 수신 Sample

 
 $mbox = imap_open("{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX", $strUserid, $strPasswd);
 $msgs = imap_num_msg($mbox);
 for ($i=1;$i<=$msgs; $i++) {
     //--- http://www.php.net/manual/en/function.imap-headerinfo.php
     $header = imap_header($mbox, $i);
     $rtstr = $rtstr."  ";
     $rtstr = $rtstr."    ";
     $rtstr = $rtstr.mb_decode_mimeheader($header->Subject);
     $rtstr = $rtstr."    ";
     $rtstr = $rtstr."    ";
     $rtstr = $rtstr.$header->date;
     $rtstr = $rtstr."    ";
     $rtstr = $rtstr."  ";
 }
 imap_close($mbox);
 
 
 

Command Line 입출력

  • 아래와 같은 명령어가 실행될 때 전달되는 인수를 확인해 보자.

 
 명령어 : php -f ~.php argv[1] argv[2](2.md)
 $argc : 전달된 인수의 수, 실행되는 php 파일도 포함함, 위의 경우 $argc는 3임
 $argv : 전달된 인수의 배열
     $argv[0](0.md) : ~.php
 

Exec

 
 

phpHttpinfo.php

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 	   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 	<meta name="Description" content="PHP HTTP Information" />
 	<meta name="Version" content="0.0.1" />
 	<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 	<title>PHP HTTP Information</title>
 	<link rel="stylesheet" type="text/css" href="./style/default/main.css" media="all" />
 	<link rel="shortcut icon" href="./style/default/images/favicon.ico" type="image/ico" />
 </head>
 
 <?php
 $viewLevel = 5; 
 
 function funcShowInfo($strName, $varArray, $maxLevel)
 {
     $maxLevel = $maxLevel - 1;
     echo("<table width='100%' border='1'>\n");
     echo("    <tr>\n");
     echo("        <td colspan='3' bgcolor='cyan' align='center'>\n");
     echo("            <font color='blue' size='5'><b>".$strName."</b></font>\n");
     echo("        </td>\n");
     echo("    </tr>\n");
     foreach ($varArray as $name => $value) {
         if ($name == "GLOBALS") {
             continue;
         }
         echo "<tr>\n";
         echo "    <td width='15%'>[".$name."](".$name.".md)</td>\n";
         echo "    <td width='5%'>[".gettype($value)."](".gettype($value).".md)</td>\n";
        switch (gettype($value)) {
            case "array" :
                if (0 < $maxLevel) {
                    echo "    \n";
                    echo $this->funcShowInfo($name, $value, $maxLevel);
                    echo "\n\n";
                } else {
                    echo "     [".$value."](".$value.".md)\n";
                }
                break;
            case "object" :
                if (0 < $maxLevel) {
                    echo "    \n";
                    echo $this->funcShowInfo($name . " variables", get_object_vars($value), $maxLevel);
                    echo $this->funcShowInfo($name . " methods", get_class_methods(get_class($value)), $maxLevel);
                    echo "\n\n";
                } else {
                    echo "     [".$value."](".$value.".md)\n";
                }
                break;
            default :
                $value = str_replace("<", "<", $value);
                $value = str_replace(">", ">", $value);
                echo "     [".$value."](".$value.".md)\n";
                break;                
            }
         echo "</tr>\n";
     }
     echo("</table>\n");
 }
 ?>
 
 <body>
 <center>
 <br>
 <?php
 funcShowInfo("GLOBALS", $GLOBALS, $viewLevel);
 ?>
 
 <br>
 <?php
 funcShowInfo("_SERVER", $_SERVER, $viewLevel);
 ?>
 
 <br>
 <?php
 funcShowInfo("_ENV", $_ENV, $viewLevel);
 ?> 
 
 <br>
 <?php
 funcShowInfo("_SESSION", $_SESSION, $viewLevel);
 ?>
 
 <br>
 <?php
 funcShowInfo("_COOKIE", $_COOKIE, $viewLevel);
 ?>
 
 <br>
 <?php
 funcShowInfo("_REQUEST", $_REQUEST, $viewLevel);
 ?> 
 
 <br>
 <?php
 funcShowInfo("_GET", $_GET, $viewLevel);
 ?> 
 
 <br>
 <?php
 funcShowInfo("_POST", $_POST, $viewLevel);
 ?>
 
 <br>
 <?php
 funcShowInfo("user", $user, $viewLevel);
 ?>
 
 </center> 
 
 </body>
 </html>
 

PHP 라이브러리


DateTime

  • 오늘 날짜와 시간 (Timezone 반영)

    • $today = new DateTime();

     
  • DateTime 변경

    • DateInterval : P7Y5M4DT4H3M2S : 7년 5월 4일 4시간 3분 2초

      • P 다음에 연(Y), 월(M), 일(D) 지정

      • T 다음에 시(H), 분(M), 초(S) 지정

      • Date가 없더라도 Time 지정시 P를 적어 주어야 오류가 발생하지 않습니다.

 
 $today->add(new DateInterval("PT9H"));   //--- 9시간 더하기
 $today->sub(new DateInterval("PT9H"));   //--- 9시간 빼기
 
  • Datetime을 문자열로 변환

 
 $today->format('Y-m-d H:i:s');
 $tmpDateStart->format('w');              //--- 0. 일, 1. 월, ...
 

PHP Framework


 
 

PHPEclipse(http://www.phpeclipse.net) : 이클립스 플러그인 
PDT(PHP Development) : 이클립스에서 공식적으로 개발하고 있는 공식적인 개발 툴 xdebug(www.xdebug.org)을 사용해서 페이지 단위로 프로파일링을 만들어준답니다.

 

Composer


 

Composer 설치

 

Composer는 PHP 의존성 관리 도구 입니다.

 

아래 명령을 실행하면 composer.phar 파일이 생성 됩니다. 

curl -sS http://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
composer -version
  


composer ~ 형태로 사용하면 됩니다.

 
 
 

Ciconia 설치

 

Ciconia는 PHP용 markdown 프로그램 입니다.

 

vi  composer.json

{
```
    "require": {
        "kzykhys/ciconia": "~1.0.0"
    }
```
}


composer  install
# composer  update
# composer  update  --dev

 

사용법

render('Markdown is **awesome**');
?>
 

autoload


 

spl_autoload_register를 사용하면 자동으로 class를 찾아서 로딩을 할 수 있습니다.

 

autoload.php


사용법


 

관리자 매뉴얼


 

Debug

 
  • var_export

    • var_export($a);

    • $v = var_export($b, true);

     
  • Object 보기

 
 
 get_object_vars(object)
 get_class_methods(get_class($value))
 echo serialize(object)
 
  • 디버깅용 함수

    • debug : 디버깅 여부 (true, false)

    • debug_file : 디버깅용 파일

 
 
 //--- file : __FILE__, line : __LINE__
 function debugMsg($msg) {
    global $debug, $debug_file;
 
    if (($debug) && ($fp = fopen( $debug_file, "at" ))) {
        if ($file == null) {
            fputs( $fp, strftime( '%Y.%m.%d %H:%M:%S' )." : $msg\n" );
        } else {
            fputs( $fp, strftime( '%Y.%m.%d %H:%M:%S' )." : $file : $line : $msg\n" );
        }
        fclose( $fp );
    }
 }
 
  • ReflectionClass

  • 개체 정보 보기

 
 
 $viewLevel = 5;
 //--- strName : 개체명, varArray : 개체, maxLevel : 하위 개체 보여주는 레벨
 function funcShowInfo($strName, $varArray, $maxLevel)
 {
    $maxLevel = $maxLevel - 1;
    echo("\n");
    echo("    \n");
    echo("        \n");
    echo("    \n");
    foreach ($varArray as $name => $value) {
        if ($name == "GLOBALS") {
            continue;
        }
        echo "\n";
        echo "    \n";
        echo "    \n";
        switch (gettype($value)) {
            case "array" :
                if (0 < $maxLevel) {
                    echo "    \n";
                } else {
                    echo "    \n";
                }
                break;
            case "object" :
                if (0 < $maxLevel) {
                    echo "    \n";
                } else {
                    echo "    \n";
                }
                break;
            default :
                $value = str_replace("<", "<", $value);
                $value = str_replace(">", ">", $value);
                echo "    \n";
                break;                
           }
        echo "\n";
    }
    echo("
\n"); echo(" ".$strName."\n"); echo("
[".$name."](".$name.".md)[".gettype($value)."](".gettype($value).".md)\n"; echo $this->funcShowInfo($name, $value, $maxLevel); echo "\n [".$value."](".$value.".md)\n"; echo $this->funcShowInfo($name . " variables", get_object_vars($value), $maxLevel); echo $this->funcShowInfo($name . " methods", get_class_methods(get_class($value)), $maxLevel); echo "\n [".$value."](".$value.".md) [".$value."](".$value.".md)
\n"); }
 
  • 개체 정보 보기

    • $name->value 또는 $name'value' 로 값을 직접 가져 온다.

 
 
 function viewObject($obj, $prefix) {
   $rtstr = "";
 
   if (100 < strlen($prefix)) {
       return "[Prefix is too long.](Error :)";
   }
 
   if (isset($obj)) {
       foreach ($obj as $name => $value) {
           if (isset($value)) {
               if (is_object($value)) {
                   $rtstr = $rtstr . viewObject($value, $prefix . "." . $name);
               } else if (is_array($value)) {
                   $rtstr = $rtstr . viewObject($value, $prefix . "." . $name);
               } else {
                   $rtstr = $rtstr . $prefix . " : [" . $name . "] : [. $value . "](")
"; } } else { $rtstr = $rtstr . $prefix . " : [. $name . "](")
"; } } } return $rtstr; }
 

모니터링 및 튜닝

 
  • 튜닝용 함수

 
 
 class Turning {
    var $timeFr;
    var $timeDesc;
    var $timeTotal;
    var $timeTotalCount;
 
    function Turning() {
        $this->timeFr = array();
 	 $this->timeDesc = array();
 	 $this->timeTotal = array();
 	 $this->timeTotalCount = array();
    }
 
    function setTime($id, $msg) {
        if (!isset($this->timeDesc[$id]($id.md))) {
            $this->timeTotal[$id]($id.md) = 0;
            $this->timeTotalCount[$id]($id.md) = 0;
        }
        $this->timeFr[$id]($id.md) = microtime(true);
        $this->timeDesc[$id]($id.md) = $msg;
    }
 
    function setDesc($id, $msg) {
        $this->timeDesc[$id]($id.md) = $msg;
    }
 
    function getTime($id, $msg) {
        $duration = microtime(true) - $this->timeFr[$id]($id.md);
        $this->timeTotal[$id] = $this->timeTotal[$id]($id.md) + $duration;
        $this->timeTotalCount[$id] = $this->timeTotalCount[$id]($id.md) + 1;
        if (isset($msg)) {
            return 'Time : '.$msg.' - '.$duration;
        } else {
            return 'Time : '.$this->timeDesc[$id]($id.md).' - '.$duration;
        }
    } 
 
    function getTotalTime($id) {
        if (!isset($this->timeTotalCount[$id]($id.md))) {
            return "";
        }
        return 'Total Time : '.$this->timeDesc[$id]($id.md)
               .' - '.$this->timeTotal[$id]($id.md)
               .', '.$this->timeTotalCount[$id]($id.md)
               .', '.($this->timeTotal[$id] / $this->timeTotalCount[$id]($id.md));
    }
 }
 
 
 

참고 문헌


 
최종 수정일: 2024-09-30 12:26:18

이전글 :
다음글 :