PHP 문서 원본 보기
←
PHP
둘러보기로 가기
검색하러 가기
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
이 문서는 편집하거나 다른 명령을 할 수 없도록 보호되어 있습니다.
문서의 원본을 보거나 복사할 수 있습니다.
서버사이드 스크립팅 언어인 [http://php.net/ 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__ : 함수 명 *참고 문헌 :*[http://www.cuenet.kr/_cn/?document_srl=6094&mid=programming_php&sort_index=last_update&order_type=desc 상수(constant)] ===내장 함수=== *동적인 함수 구현 //--- 함수에 전달된 인자의 수 (인수 갯수 + 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 : 문자열 ::*[http://php.net/manual/kr/ref.strings.php String 함수 목록] ::*[http://www.php.net/manual/kr/function.utf8-encode.php utf8_encode()] ::*[http://www.php.net/manual/kr/function.utf8-decode.php utf8_decode()] :*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; [http://www.php.net/manual/kr/language.oop5.reflection.php 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]); :{| 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 "<b>Error:</b> [$errno] $errstr<br />"; echo "Ending Script"; die(); } set_error_handler("customError"); ===기타 문법=== *함수 선언 //--- 참조 전달 : &$arg1, 함수를 호출하는 방식은 동일함 function funcName(&$arg1, $arg2) { return "Hello World!"; } :*참고 문헌 : [http://www.php.net/manual/kr/functions.internal.php 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')"); *참고 문헌 :*[http://jobdahan.net/?mid=server_linux&page=2&document_srl=17349&listStyle=&cpage= php 의 DB 관련 함수들 (for MySQL)] ===파일 입출력=== *표준 입출력 :*표준 입력 파일명 : 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." <tr>"; $rtstr = $rtstr." <td>"; $rtstr = $rtstr.mb_decode_mimeheader($header->Subject); $rtstr = $rtstr." </td>"; $rtstr = $rtstr." <td align='center'>"; $rtstr = $rtstr.$header->date; $rtstr = $rtstr." </td>"; $rtstr = $rtstr." </tr>"; } imap_close($mbox); *참고 문헌 :*[http://www.phphelptutorials.com/tp-connecting-to-an-imap-server-using-imapopen Connecting to an imap server using imap_open, 2010.10] ===Command Line 입출력=== *아래와 같은 명령어가 실행될 때 전달되는 인수를 확인해 보자. 명령어 : php -f ~.php argv[1] argv[2] $argc : 전달된 인수의 수, 실행되는 php 파일도 포함함, 위의 경우 $argc는 3임 $argv : 전달된 인수의 배열 $argv[0] : ~.php ===Exec=== *http://php.net/manual/en/function.shell-exec.php ===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 " <td width='80%' align='left'>\n"; echo $this->funcShowInfo($name, $value, $maxLevel); echo "\n</td>\n"; } else { echo " <td width='80%' align='left'> [".$value."]</td>\n"; } break; case "object" : if (0 < $maxLevel) { echo " <td width='80%' align='left'>\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</td>\n"; } else { echo " <td width='80%' align='left'> [".$value."]</td>\n"; } break; default : $value = str_replace("<", "<", $value); $value = str_replace(">", ">", $value); echo " <td width='80%' align='left'> [".$value."]</td>\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 ::*[http://www.cakephp.co.kr/index.php CakePHP 한국 사용자 모임] ::*[http://cakephp.springnote.com/ CakePHP 한글 매뉴얼] :*[http://www.symfony-project.org/ symfony] : Mojavi3에서 파생, 커뮤니티등이 활발함 :*[http://framework.zend.com/ Zend Framework], [http://framework.zend.com/license New BSD License] :*기타 프레임워크 ::*[http://www.mojavi.org/ Mojavi] : Java 의 Struts 의 영향을 많이 받음 ::*[http://agavi.org/ Agavi] ::*[http://codeigniter.com/ Codeigniter] ::*[http://ethna.jp/ Ethna] ::*[http://kunit.jp/maple Maple] ::*[http://piece-framework.com Piece Framework] ::*[http://www.pradosoft.com Prado] : Delphi , ASP.NET 등을 참고 ::*[http://zoopframework.com/ Zoop Framework] : 컴포넌트별 이용 가능 ::*[http://www.phpontrax.com PHP on TRAX] *MVC 모델에서 유용한 도구 :*View : Smarty :*Control :*Model : ADOdb PHPEclipse(http://www.phpeclipse.net) : 이클립스 플러그인 PDT(PHP Development) : 이클립스에서 공식적으로 개발하고 있는 공식적인 개발 툴 xdebug(www.xdebug.org)을 사용해서 페이지 단위로 프로파일링을 만들어준답니다. == autoload == spl_autoload_register를 사용하면 자동으로 class를 찾아서 로딩을 할 수 있습니다. autoload.php <pre><?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"; }); ?></pre> == 관리자 매뉴얼 == === 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 " <td width='80%' align='left'>\n"; echo $this->funcShowInfo($name, $value, $maxLevel); echo "\n</td>\n"; } else { echo " <td width='80%' align='left'> [".$value."]</td>\n"; } break; case "object" : if (0 < $maxLevel) { echo " <td width='80%' align='left'>\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</td>\n"; } else { echo " <td width='80%' align='left'> [".$value."]</td>\n"; } break; default : $value = str_replace("<", "<", $value); $value = str_replace(">", ">", $value); echo " <td width='80%' align='left'> [".$value."]</td>\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]); } } *[http://flashcafe.org/?mid=php_study&page=6&sort_index=last_update&order_type=desc&document_srl=11338 PHP튜닝] *[http://flashcafe.org/php_study/11782/page/5 제 3 부: 오라클 환경을 위한 PHP 코드의 성능 개선] *PHP Cache :*[http://pecl.php.net/package/APC Alternative PHP Cache (APC), PHP 라이선스] :*[http://turck-mmcache.sourceforge.net/index_old.html Turck MMCache, GPL] *참조 : [[튜닝|튜닝]] == 참고 문헌 == *[[HTML|HTML]] *[[CSS3|CSS3]] *[[JavaScript|JavaScript]] *[[PHP 5.2.5|PHP_5.2.5]] : 오픈소스 비즈니스 컨설팅의 PHP 설치 가이드 및 매뉴얼 *[http://www.php.net/manual/kr/index.php PHP 매뉴얼] *[http://www.php.net/ 공식 PHP 사이트] :*[http://www.php.net/manual/kr/langref.php PHP 언어 레퍼런스] *[http://www.phpeveryday.com/ http://www.phpeveryday.com/] *[[PhpJavaBridge|PHP/Java Bridge]] : PHP에서 Java 함수를 호출할 수 있도록 하는 라이브러리 *[http://sirjhswin.tistory.com/category/%EC%84%9C%EB%B2%84%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8C%85?page=1 컴퓨터를 사랑하는 Sirjhswin의 티스토리 블로그] *[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/ 매뉴얼], [http://j2k.naver.com/j2k_frame.php/korean/www.rcdtokyo.com/etc/htmlscraping/ 한글 매뉴얼] *[http://bluelenz.tistory.com/entry/%ED%8D%BC%EC%98%A8%EA%B8%80-php%EB%A1%9C-%ED%94%8C%EB%B0%8D%EC%8B%9C-%EC%B0%B8%EA%B3%A0%ED%95%A0%EB%A7%8C%ED%95%A9%EB%8B%88%EB%8B%A4 php로 플밍시 참고할만합니다.] : PHP 성능 관련 정리 자료 *[http://linuxsunny.tistory.com/entry/PHP-%EC%84%A4%EC%A0%95-%ED%8C%8C%EC%9D%BC-%EB%B3%80%EA%B2%BD PHP 설정 파일 변경] [[Category:기술 자료실|Category:기술_자료실]]<br/>[[Category:PHP|Category:PHP]]
PHP
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
변수
보기
읽기
원본 보기
역사 보기
더 보기
검색
주요 메뉴
오픈소스 컨설팅
오픈소스
오픈소스 라이선스
오픈소스 커뮤니티
오픈소스 종류
오픈소스 현황
오픈소스 한글화
문자셋과 인코딩
Storage
Network
보안
고가용성
모니터링
오픈 API
오픈 서비스
Cloud
BigData
Android
산사랑 노트
둘러보기
인기 문서
최근 수정 문서
모든 문서
모든 분류
임의 문서
위키 사용법
자매 사이트
CMS
오비컨 홈페이지
오비컨 CMS
블로그
데모 - SuiteCRM
산사랑의 Twitter
산사랑의 Facebook
친구 사이트
공개SW 포털
OLIS
한국공개소프트웨어협회
AppCenter 지원본부
OLC
PSEG
개발자 블로그
블로터
개인 메뉴
메뉴 수정
양식함
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보