- 프로그램 문법
- PHP 기초
- 내장 상수
- 내장 함수
- 특수 함수
- 상수/변수 선언
- 객체 선언
- 연산자
- 조건문/반복문
- 오류 처리
- 기타 문법
- Type 변환
- 입출력
- 전역 변수
- 브라우저 입출력
- Cookie 입출력
- 세션 입출력
- 데이터베이스 입출력
- 파일 입출력
- 메일 입출력
- Command Line 입출력
- Exec
- phpHttpinfo.php
- PHP 라이브러리
- DateTime
- PHP Framework
- Composer
- Composer 설치
- Ciconia 설치
- autoload
- 관리자 매뉴얼
- Debug
- 모니터링 및 튜닝
- 참고 문헌
서버사이드 스크립팅 언어인 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의
환경 설정 : php.ini의 file_uploads, upload_max_filesize, upload_tmp_dir, post_max_size
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);
}
브라우저 출력
= "Hello World!" ?>
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
php 3대 프레임워크
CakePHP, [http://cakephp.org/ cakePHP], MIT License
symfony : Mojavi3에서 파생, 커뮤니티등이 활발함
[http://framework.zend.com/ Zend Framework], New BSD License
기타 프레임워크
Mojavi : Java 의 Struts 의 영향을 많이 받음
Prado : Delphi , ASP.NET 등을 참고
Zoop Framework : 컴포넌트별 이용 가능
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
사용법
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(" ".$strName."\n");
echo(" \n");
echo(" \n");
foreach ($varArray as $name => $value) {
if ($name == "GLOBALS") {
continue;
}
echo "\n";
echo " [".$name."](".$name.".md) \n";
echo " [".gettype($value)."](".gettype($value).".md) \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 " \n";
}
echo("
\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));
}
}
PHP Cache
참조 : 튜닝
참고 문헌
[PHP_5.2.5](PHP 5.2.5.md) : 오픈소스 비즈니스 컨설팅의 PHP 설치 가이드 및 매뉴얼
-
PHP/Java Bridge : PHP에서 Java 함수를 호출할 수 있도록 하는 라이브러리
[http://www.rcdtokyo.com/ucb/contents/i000851.php HTML 파서] ([http://j2k.naver.com/j2k_frame.php/korean/www.rcdtokyo.com/ucb/contents/i000851.php 한글]), [http://www.rcdtokyo.com/etc/htmlscraping/ 매뉴얼], 한글 매뉴얼
php로 플밍시 참고할만합니다. : PHP 성능 관련 정리 자료
PHP 설정 파일 변경
[[Category:기술 자료실|Category:기술_자료실]]
분류: PHP