"PHP"의 두 판 사이의 차이
잔글 (→파일 입출력) |
잔글 |
||
686번째 줄: | 686번째 줄: | ||
PDT(PHP Development) : 이클립스에서 공식적으로 개발하고 있는 공식적인 개발 툴 | PDT(PHP Development) : 이클립스에서 공식적으로 개발하고 있는 공식적인 개발 툴 | ||
xdebug(www.xdebug.org)을 사용해서 페이지 단위로 프로파일링을 만들어준답니다. | xdebug(www.xdebug.org)을 사용해서 페이지 단위로 프로파일링을 만들어준답니다. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
==관리자 매뉴얼== | ==관리자 매뉴얼== |
2018년 2월 21일 (수) 11:42 판
서버사이드 스크립팅 언어인 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!"; }
- 참고 문헌 : 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의 <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!"); //--- fputc($fout, $char) : 한 글자씩 쓴다. //--- fputs($fout, $str) : 한 줄씩 쓴다. //--- fwrite($fout, $str) fclose($fout);
- 폴더 관리
- 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대 프레임워크
-
- symfony : Mojavi3에서 파생, 커뮤니티등이 활발함
- Zend Framework, New BSD License
- 기타 프레임워크
- Mojavi : Java 의 Struts 의 영향을 많이 받음
- Agavi
- Codeigniter
- Ethna
- Maple
- Piece Framework
- Prado : Delphi , ASP.NET 등을 참고
- Zoop Framework : 컴포넌트별 이용 가능
- PHP on TRAX
- MVC 모델에서 유용한 도구
- View : Smarty
- Control
- Model : ADOdb
PHPEclipse(http://www.phpeclipse.net) : 이클립스 플러그인 PDT(PHP Development) : 이클립스에서 공식적으로 개발하고 있는 공식적인 개발 툴 xdebug(www.xdebug.org)을 사용해서 페이지 단위로 프로파일링을 만들어준답니다.
관리자 매뉴얼
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("<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"); }
- 개체 정보 보기
- $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 . "]<br>"; } } else { $rtstr = $rtstr . $prefix . " : [" . $name . "]<br>"; } } } 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튜닝
- 제 3 부: 오라클 환경을 위한 PHP 코드의 성능 개선
- PHP Cache
- 참조 : 튜닝
참고 문헌
- PHP_5.2.5 : 오픈소스 비즈니스 컨설팅의 PHP 설치 가이드 및 매뉴얼
- PHP 매뉴얼
- 공식 PHP 사이트
- PHP/Java Bridge : PHP에서 Java 함수를 호출할 수 있도록 하는 라이브러리
- 컴퓨터를 사랑하는 Sirjhswin의 티스토리 블로그
- HTML 파서 (한글), 매뉴얼, 한글 매뉴얼
- php로 플밍시 참고할만합니다. : PHP 성능 관련 정리 자료
- PHP 설정 파일 변경