"PHP"의 두 판 사이의 차이

오픈소스 비즈니스 컨설팅
둘러보기로 가기 검색하러 가기
잔글
 
(같은 사용자의 중간 판 3개는 보이지 않습니다)
454번째 줄: 454번째 줄:
 
*파일 출력
 
*파일 출력
 
  $fout = fopen("welcome.txt", "w")  or exit("Unable to open file!");
 
  $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) : 한 글자씩 쓴다.
 
  //--- fputc($fout, $char) : 한 글자씩 쓴다.
459번째 줄: 460번째 줄:
 
  //--- fwrite($fout, $str)
 
  //--- fwrite($fout, $str)
 
  fclose($fout);
 
  fclose($fout);
 +
 +
*파일 삭제
 +
unlink(~);
  
 
*폴더 관리
 
*폴더 관리
687번째 줄: 691번째 줄:
 
xdebug(www.xdebug.org)을 사용해서 페이지 단위로 프로파일링을 만들어준답니다.
 
xdebug(www.xdebug.org)을 사용해서 페이지 단위로 프로파일링을 만들어준답니다.
  
== Composer 설치 ==
+
== Composer ==
 +
 
 +
=== Composer 설치 ===
  
 
Composer는 PHP 의존성 관리 도구 입니다.
 
Composer는 PHP 의존성 관리 도구 입니다.
698번째 줄: 704번째 줄:
 
</pre>
 
</pre>
 
<br/>composer ~ 형태로 사용하면 됩니다.
 
<br/>composer ~ 형태로 사용하면 됩니다.
 +
 +
 +
 +
=== Ciconia 설치 ===
 +
 +
Ciconia는 PHP용 markdown 프로그램 입니다.
 +
 +
vi&nbsp; composer.json
 +
<pre>{
 +
    "require": {
 +
        "kzykhys/ciconia": "~1.0.0"
 +
    }
 +
}</pre>
 +
<br/>composer&nbsp; install<br/>#&nbsp;composer&nbsp; update<br/>#&nbsp;composer&nbsp; update&nbsp; --dev
 +
 +
사용법
 +
<pre><?php
 +
require 'vendor/autoload.php';
 +
 +
use Ciconia\Ciconia;
 +
 +
$ciconia = new Ciconia();
 +
$html = $ciconia->render('Markdown is **awesome**');
 +
?></pre>
  
 
== autoload ==
 
== autoload ==

2018년 3월 11일 (일) 13:02 기준 최신판

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

프로그램 문법

PHP 기초

  • PHP 스크립팅 블럭
<?php 스크립팅 코드를 여기에  ?>
<script language="php">스크립팅 코드를 여기에</script>

<? 스크립팅 코드를 여기에 ?> : php.ini에서 사용 여부를 설정, short_open_tag 설정 값
<?= 스크립팅 코드를 여기에 ?> : <?php echo 스크립팅 코드를 여기에 ?>와 동일
<% 스크립팅 코드를 여기에 %> : 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(format[, timestamp])
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[] = &$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'));

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]);
매개 변수 설명
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] $errstr<br />";
    echo "Ending Script";
    die();
}
set_error_handler("customError");

기타 문법

  • 함수 선언
//--- 참조 전달 : &$arg1, 함수를 호출하는 방식은 동일함
function funcName(&$arg1, $arg2)
{
    return "Hello World!";
}
  • 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의 <form> 문에 enctype="multipart/form-data"가 포함되어야 함
  • 환경 설정 : php.ini의 file_uploads, upload_max_filesize, upload_tmp_dir, post_max_size
<form action="upload_file.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <!-- 항상 여기 위치 -->
    Filename : <input type="file" name="filename" id="file" /> 
    <input type="submit" name="submit" value="Submit" />
</form>

if ($_FILES["filename"]["error"] > 0) {
    echo "Error : " . $_FILES["filename"]["error"]."<br />";
} else {
    echo "Name      : ".$_FILES["filename"]["name"]."<br />";
    echo "Type      : ".$_FILES["filename"]["type"]."<br />"; (image/gif)
    echo "Size      : ".$_FILES["filename"]["size"]." Bytes<br />";
    echo "temp File : ".$_FILES["filename"]["tmp_name"];
}
  • 브라우저 출력
<?php  echo "Hello World!";  ?>
<?= "Hello World!" ?>

Cookie 입출력

  • Cookie 읽기
$_COOKIE["name"], $_REQUEST["name"]
  • Cookie 확인
if (isset($_COOKIE["name"])) { ~ }
  • 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"]
  • 세션 쓰기
$_SESSION["name"] = value;
  • 세션 삭제
unset($_SESSION["name"]);
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
<?php
$finp = fopen("php://stdin", "r");
while (!feof($finp)) {
    echo fgets($finp);
}
fclose($finp);
?>
  • 파일 존재 확인 : 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]
$argc : 전달된 인수의 수, 실행되는 php 파일도 포함함, 위의 경우 $argc는 3임
$argv : 전달된 인수의 배열
    $argv[0] : ~.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."]</td>\n";
        echo "    <td width='5%'>[".gettype($value)."]</td>\n";
       switch (gettype($value)) {
           case "array" :
               if (0 < $maxLevel) {

echo " \n";

                   echo $this->funcShowInfo($name, $value, $maxLevel);

echo "\n\n"; } else { echo " [".$value."]\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."]\n";

               }
               break;
           default :
               $value = str_replace("<", "<", $value);
               $value = str_replace(">", ">", $value);

echo " [".$value."]\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

  • php 3대 프레임워크
  • 기타 프레임워크
  • MVC 모델에서 유용한 도구
  • View : Smarty
  • Control
  • Model : ADOdb

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

사용법

<?php
require 'vendor/autoload.php';

use Ciconia\Ciconia;

$ciconia = new Ciconia();
$html = $ciconia->render('Markdown is **awesome**');
?>

autoload

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

autoload.php

<?php
spl_autoload_register(function($className) {
    // $namespace = str_replace("\\", "/", __NAMESPACE__);
    $className = str_replace("\\", "/", $className);
    $class = __DIR__ . "/" . (empty($namespace) ? "" : $namespace . "/") . "{$className}.php";
    include_once($class);

    // require_once __DIR__ . "/" . $ClassName . ".php";
});
?>


사용법

<?php
require_once __DIR__ . '/autoload.php';

use Ciconia\Ciconia;

$ciconia = new Ciconia();
?><font face="sans-serif, Arial, Verdana, Trebuchet MS"><span style="white-space: normal;">
</span></font>

관리자 매뉴얼

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."][".gettype($value)."]\n";
                   echo $this->funcShowInfo($name, $value, $maxLevel);
echo "\n
[".$value."]\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."]

\n");

}
  • 개체 정보 보기
  • $name->value 또는 $name['value'] 로 값을 직접 가져 온다.
function viewObject($obj, $prefix) {
  $rtstr = "";

  if (100 < strlen($prefix)) {
      return "[Error : Prefix is too long.]";
  }

  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])) {
           $this->timeTotal[$id] = 0;
           $this->timeTotalCount[$id] = 0;
       }
       $this->timeFr[$id] = microtime(true);
       $this->timeDesc[$id] = $msg;
   }

   function setDesc($id, $msg) {
       $this->timeDesc[$id] = $msg;
   }

   function getTime($id, $msg) {
       $duration = microtime(true) - $this->timeFr[$id];
       $this->timeTotal[$id] = $this->timeTotal[$id] + $duration;
       $this->timeTotalCount[$id] = $this->timeTotalCount[$id] + 1;
       if (isset($msg)) {
           return 'Time : '.$msg.' - '.$duration;
       } else {
           return 'Time : '.$this->timeDesc[$id].' - '.$duration;
       }
   } 

   function getTotalTime($id) {
       if (!isset($this->timeTotalCount[$id])) {
           return "";
       }
       return 'Total Time : '.$this->timeDesc[$id]
              .' - '.$this->timeTotal[$id]
              .', '.$this->timeTotalCount[$id]
              .', '.($this->timeTotal[$id] / $this->timeTotalCount[$id]);
   }
}

참고 문헌

  • PHP/Java Bridge : PHP에서 Java 함수를 호출할 수 있도록 하는 라이브러리