wiki:it:programming:php
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
wiki:it:programming:php [2025/07/31 07:33] – 만듦 syjang0803 | wiki:it:programming:php [2025/07/31 07:38] (현재) – syjang0803 | ||
---|---|---|---|
줄 1: | 줄 1: | ||
- | ====== | + | ====== PHP 개발 가이드라인 ====== |
- | DokuWiki는 강력하고 유연한 위키 시스템으로, | + | 이 문서는 PHP 언어를 사용하여 웹 애플리케이션을 개발하는 데 필요한 |
- | ===== 1. 개요 및 목적 ===== | + | {{wiki: |
- | DokuWiki는 PHP로 작성된 평면 파일 기반의 위키 엔진입니다. 이는 DokuWiki의 모든 기능과 확장이 | + | ---- |
+ | ===== 1. PHP 개요 ===== | ||
- | * **DokuWiki 환경에서 PHP 사용의 중요성** | + | ---- |
- | | + | ==== 1) PHP란? ==== |
- | | + | |
- | | + | |
- | * **플러그인 개발 시 PHP 활용 강조** | + | |
- | | + | |
- | | + | |
- | - 이 가이드라인은 안전하고 효율적인 플러그인 개발을 위한 지침을 제공합니다. | + | |
- | ===== 2. DokuWiki | + | PHP는 ' |
- | + | ||
- | DokuWiki 환경에서 | + | |
---- | ---- | ||
- | ==== 1) DokuWiki | + | ==== 2) PHP의 특징 |
- | DokuWiki는 별도의 데이터베이스 없이 작동하므로, | + | PHP는 다음과 같은 주요 특징을 가지고 |
- | * **DokuWiki 설치 경로** | + | * **배우기 쉬운 문법**: 다른 프로그래밍 언어에 비해 문법이 직관적이고 간단하여 초보자도 쉽게 학습할 수 있습니다. |
- | - 일반적으로 DokuWiki는 웹 서버의 문서 루트 디렉토리(예: ''/ | + | * **강력한 기능**: 웹 개발에 필요한 다양한 내장 함수와 기능을 제공하며, 파일 |
- | - 모든 PHP 파일, 설정 | + | * **광범위한 지원**: Apache, Nginx 등 다양한 |
- | * **PHP 버전 요구사항** | + | * **다양한 데이터베이스 연동**: MySQL, PostgreSQL, Oracle, SQLite 등 대부분의 주요 데이터베이스와 손쉽게 연동할 수 있습니다. |
- | - DokuWiki는 특정 PHP 버전 이상을 요구합니다. 공식 DokuWiki | + | * **오픈 소스**: 자유롭게 사용, 수정, 배포할 수 있는 오픈 소스 프로젝트로, 활발한 커뮤니티 |
- | - 최신 DokuWiki 버전은 일반적으로 최신 PHP 버전을 | + | |
+ | ===== 2. PHP 기본 문법 ===== | ||
---- | ---- | ||
- | ==== 2) DokuWiki 핵심 파일 이해 | + | ==== 1) 스크립트 태그 |
- | DokuWiki의 주요 디렉토리와 파일은 DokuWiki가 어떻게 작동하는지 이해하는 데 중요합니다. | + | PHP 코드는 웹 서버에서 실행되기 위해 특별한 태그 내에 작성되어야 |
- | * '' | + | < |
- | - DokuWiki의 설정 파일(예: '' | + | <?php |
- | - 플러그인 개발 시 '' | + | // PHP 코드 작성 |
- | * '' | + | ?> |
- | - DokuWiki의 핵심 라이브러리 파일과 모든 플러그인, | + | </file> |
- | - '' | + | |
- | - '' | + | |
- | * '' | + | |
- | - DokuWiki의 주요 함수와 클래스 정의 파일이 위치합니다. | + | |
- | - DokuWiki API와 상호작용할 때 이 디렉토리의 파일들을 참조하게 됩니다. | + | |
- | + | ||
- | ===== 3. PHP 문법 가이드라인 ===== | + | |
- | DokuWiki 플러그인 개발을 위한 PHP 코드를 | + | * **권장 태그**: `< |
+ | * **짧은 태그 (지양)**: `< | ||
---- | ---- | ||
- | ==== 1) 변수 및 상수 | + | ==== 2) 주석 |
- | PHP 변수와 상수는 데이터를 저장하고 참조하는 데 사용됩니다. | + | 코드에 대한 설명이나 특정 코드 블록을 비활성화할 때 주석을 |
- | * **명명 규칙** | + | * **한 줄 주석**: |
- | - 변수: 소문자로 시작하며 언더스코어(underscore)를 사용하여 단어를 구분하는 '' | + | |
- | - 상수: 대문자로만 구성되며 언더스코어를 사용하는 '' | + | |
- | - 클래스 이름: 각 단어의 첫 글자를 대문자로 하는 '' | + | |
- | * **사용 예제** | + | |
< | < | ||
<?php | <?php | ||
- | $page_id = ' | + | // 이것은 한 줄 주석입니다. |
- | define(' | + | # 이것도 한 줄 주석입니다. |
- | class MyPlugin { | + | ?> |
- | const PLUGIN_VERSION = ' | + | </file> |
- | | + | * **여러 줄 주석**: |
- | } | + | < |
+ | <?php | ||
+ | /* | ||
+ | 이것은 | ||
+ | 여러 줄 | ||
+ | 주석입니다. | ||
+ | */ | ||
?> | ?> | ||
</ | </ | ||
---- | ---- | ||
- | ==== 2) 데이터 타입 | + | ==== 3) 변수 |
- | PHP는 | + | PHP에서 변수는 데이터를 저장하는 데 사용됩니다. 모든 변수는 달러 기호(``< |
- | * **주요 데이터 타입** | + | * **변수 선언 및 할당 예제**: |
- | | + | < |
- | - 숫자 ('' | + | <?php |
- | - 배열 ('' | + | $name = " |
- | - 객체 ('' | + | $age = 30; // |
- | | + | $price = 19.99; // 실수 변수 |
- | * **타입 캐스팅 (필요 시)** | + | $is_active = true; // 불리언 변수 |
- | - 명시적 타입 캐스팅을 사용하여 | + | ?> |
- | - 예: '' | + | </ |
- | ---- | + | * **주요 데이터 타입**: |
- | ==== 3) 조건문 및 반복문 ==== | + | |
+ | * | ||
+ | * | ||
+ | * | ||
+ | * | ||
+ | * | ||
+ | * | ||
+ | * | ||
- | 프로그램의 흐름을 제어하는 데 사용됩니다. | + | ---- |
+ | ==== 4) 상수 ==== | ||
- | * '' | + | 상수는 한 번 정의되면 변경할 수 없는 값을 저장합니다. |
- | - 조건에 따라 다른 코드 블록을 실행합니다. | + | |
- | * '' | + | |
- | - 여러 조건 중 하나를 선택하여 실행할 때 유용합니다. | + | |
- | * '' | + | |
- | - '' | + | |
- | - '' | + | |
- | - '' | + | |
+ | * `define()` 함수 사용: | ||
< | < | ||
<?php | <?php | ||
- | $data = array(' | + | define(" |
- | foreach ($data as $item) { | + | echo SITE_NAME; // My Awesome Site |
- | | + | ?> |
- | } | + | </ |
- | + | * `const` 키워드 사용 | |
- | $count = 0; | + | < |
- | while ($count < 3) { | + | <?php |
- | echo " | + | const MAX_USERS = 100; |
- | | + | echo MAX_USERS; // 100 |
- | } | + | |
?> | ?> | ||
</ | </ | ||
---- | ---- | ||
- | ==== 4) 함수 및 클래스 | + | ==== 5) 연산자 |
- | 코드의 재사용성과 모듈화를 위해 함수와 클래스를 적극적으로 활용해야 | + | PHP는 다양한 연산자를 제공합니다. |
+ | * **주요 연산자 유형**: | ||
+ | * | ||
+ | * | ||
+ | * | ||
+ | * | ||
+ | * | ||
+ | |||
+ | ---- | ||
+ | ==== 6) 조건문 ==== | ||
- | * **함수 정의 및 호출** | + | 특정 |
- | - 특정 | + | |
- | - 가능한 한 함수는 단일 책임을 가지도록 작성합니다. | + | |
- | * **클래스 및 객체 지향 프로그래밍 (OOP) 기본** | + | |
- | - DokuWiki 플러그인은 대부분 객체 지향적으로 설계됩니다. | + | |
- | - 클래스를 | + | |
+ | * `if`, `else if`, `else` 문: | ||
< | < | ||
<?php | <?php | ||
- | function my_custom_function($text) { | + | $score = 85; |
- | | + | |
+ | if ($score >= 90) { | ||
+ | | ||
+ | } else if ($score >= 80) { | ||
+ | echo " | ||
+ | } else { | ||
+ | echo " | ||
} | } | ||
+ | ?> | ||
+ | </ | ||
- | echo my_custom_function("Hello DokuWiki"); | + | * `switch` 문: |
+ | < | ||
+ | <?php | ||
+ | $day = "월요일"; | ||
- | class MyDokuPlugin extends DokuWiki_Plugin { | + | switch |
- | public function getInfo() { | + | case " |
- | | + | |
- | ' | + | |
- | ' | + | case " |
- | ' | + | echo " |
- | ' | + | |
- | ' | + | |
- | | + | |
- | } | + | |
} | } | ||
?> | ?> | ||
줄 152: | 줄 158: | ||
---- | ---- | ||
- | ==== 5) 오류 처리 및 디버깅 | + | ==== 7) 반복문 |
- | 문제 발생 시 이를 감지하고 해결하는 것은 개발의 필수적인 부분입니다. | + | 코드 블록을 여러 번 반복 실행할 때 사용합니다. |
- | * '' | + | * `for` 문: |
- | - PHP 오류 보고 수준을 설정합니다. 개발 환경에서는 모든 오류를 보고하도록 설정하는 것이 좋습니다 | + | < |
- | | + | <?php |
- | * '' | + | for ($i = 0; $i < 5; $i++) { |
- | - 예외 처리를 위해 사용됩니다. 잠재적으로 오류를 발생시킬 수 있는 코드를 '' | + | |
- | * **DokuWiki 디버깅 모드** | + | } |
- | - '' | + | ?> |
- | - 이는 오류 메시지를 더 자세히 표시하고, | + | </file> |
- | ===== 4. DokuWiki 플러그인 개발을 위한 PHP 활용 ===== | + | * `while` 문: |
+ | < | ||
+ | <?php | ||
+ | $count | ||
+ | while ($count < 3) { | ||
+ | echo " | ||
+ | $count++; | ||
+ | } | ||
+ | ?> | ||
+ | </ | ||
- | DokuWiki 플러그인은 DokuWiki의 기능을 확장하는 핵심 방법입니다. PHP를 | + | * `foreach` 문 (배열에 주로 |
+ | < | ||
+ | <?php | ||
+ | $colors = array(" | ||
+ | foreach ($colors as $color) { | ||
+ | echo $color | ||
+ | } | ||
+ | ?> | ||
+ | </ | ||
---- | ---- | ||
- | ==== 1) 플러그인 구조 이해 | + | ==== 8) 함수 |
- | DokuWiki 플러그인은 | + | 특정 |
- | * **이벤트 핸들러 (Action Plugin)** | + | * **함수 정의 및 호출 예제**: |
- | - DokuWiki 코어에서 발생하는 특정 이벤트에 반응하여 동작합니다. | + | < |
- | - 파일명: '' | + | <?php |
- | - 클래스: '' | + | function greet($name) { |
- | - `register_hook()` 메서드를 사용하여 이벤트를 " | + | |
- | * **구문 플러그인 (Syntax Plugin)** | + | } |
- | | + | |
- | - 파일명: '' | + | echo greet(" |
- | - 클래스: '' | + | ?> |
- | - `getType()`, `getPType()`, | + | </ |
- | * **관리 플러그인 (Admin Plugin)** | + | |
- | - DokuWiki 관리 패널에 새로운 관리 도구를 추가합니다. | + | |
- | - 파일명: '' | + | |
- | - 클래스: '' | + | |
- | - `handle()` 메서드를 사용하여 관리 작업을 처리합니다. | + | |
---- | ---- | ||
- | ==== 2) DokuWiki API 상호작용 | + | ==== 9) 배열 |
- | DokuWiki 플러그인은 DokuWiki 코어의 함수와 전역 | + | 배열은 여러 값을 하나의 변수에 저장하는 |
- | + | ||
- | * **전역 변수 ('' | + | |
- | - '' | + | |
- | - '' | + | |
- | * **DokuWiki 함수 호출 예제** | + | |
- | - `p_wiki_xhtml($id, | + | |
- | - `io_saveFile($file, | + | |
- | - `msg($text, $level)`: | + | |
+ | * **인덱스 배열 (숫자 인덱스)**: | ||
< | < | ||
<?php | <?php | ||
- | // 현재 페이지 ID 가져오기 | + | $fruits |
- | $current_page_id | + | echo $fruits[0]; |
- | msg("현재 페이지 ID: " | + | ?> |
- | + | </file> | |
- | // 특정 페이지 내용 읽기 (예: ' | + | |
- | $start_page_content = p_wiki_xhtml(' | + | |
- | // ... $start_page_content를 사용하여 작업 ... | + | |
- | // 파일에 내용 쓰기 | + | * **연관 배열 (문자열 키)**: |
- | $file_path = DOKU_INC . ' | + | < |
- | $success | + | <?php |
- | if ($success) { | + | $person |
- | | + | "name" => " |
- | } else { | + | "age" |
- | | + | " |
- | } | + | ); |
+ | echo $person[" | ||
?> | ?> | ||
</ | </ | ||
- | ---- | + | ===== 3. PHP 예제 ===== |
- | ==== 3) 보안 고려사항 | + | |
- | 플러그인을 개발할 때는 항상 보안을 최우선으로 고려해야 합니다. | + | 다음은 위에서 설명한 문법을 활용한 간단한 PHP 코드 예제입니다. |
- | * **사용자 입력 검증** | + | ---- |
- | | + | ==== 1) 'Hello, World!' 출력 |
- | | + | |
- | * **SQL 인젝션 방지** | + | |
- | | + | |
- | | + | |
- | * **XSS (Cross-Site Scripting) 방지** | + | |
- | - 사용자 입력이 HTML로 렌더링될 때, `hsc()` ('' | + | |
- | - `p_render()` 함수를 사용할 때도 | + | |
- | ===== 5. PHP 코드 예제 ===== | + | 가장 기본적인 |
- | 실제 DokuWiki 플러그인 개발에 활용할 수 있는 간단한 PHP 코드 예제입니다. | + | < |
+ | <?php | ||
+ | echo " | ||
+ | ?> | ||
+ | </ | ||
---- | ---- | ||
- | ==== 1) 간단한 플러그인 | + | ==== 2) 변수 및 조건문 사용 |
- | 이 예제는 DokuWiki 페이지 하단에 간단한 | + | 사용자의 나이에 |
- | * '' | ||
< | < | ||
<?php | <?php | ||
- | // DokuWiki_Plugin 클래스를 상속받습니다. | + | $age = 20; |
- | class action_plugin_myexampleplugin extends DokuWiki_Plugin { | + | |
- | // 플러그인 정보 반환 | + | if ($age >= 18) { |
- | public function getInfo() { | + | |
- | return array( | + | } else { |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | | + | |
- | | + | |
- | + | ||
- | // DokuWiki 이벤트에 후킹합니다. | + | |
- | public function register_hook(Doku_Event_Handler $handler) { | + | |
- | // ' | + | |
- | $handler-> | + | |
- | } | + | |
- | + | ||
- | | + | |
- | public function handle_content_display(Doku_Event $event, $param) { | + | |
- | // 이벤트 데이터에 접근하여 HTML 출력을 추가합니다. | + | |
- | $event-> | + | |
- | } | + | |
} | } | ||
?> | ?> | ||
줄 281: | 줄 266: | ||
---- | ---- | ||
- | ==== 2) DokuWiki 데이터 조작 | + | ==== 3) 배열 및 반복문 사용 |
- | 이 예제는 특정 페이지의 내용을 읽고, 새로운 텍스트를 페이지에 추가하는 방법을 보여줍니다. | + | 배열에 저장된 과일 목록을 `foreach` 문을 사용하여 출력하는 예제입니다. |
- | * **페이지 내용 읽기/ | ||
< | < | ||
<?php | <?php | ||
- | // DOKU_INC는 DokuWiki 설치 경로를 나타내는 상수입니다. | + | $fruits |
- | $page_path | + | |
- | // 페이지 내용 읽기 | + | echo "좋아하는 과일 목록: |
- | if (file_exists($page_path)) { | + | foreach |
- | $content = file_get_contents($page_path); | + | echo "- " . $fruit . "\n"; |
- | | + | |
- | echo "< | + | |
- | } else { | + | |
- | echo "< | + | |
- | } | + | |
- | + | ||
- | // 페이지에 새로운 내용 추가 (기존 내용 뒤에) | + | |
- | $new_content = "\n\nThis text was added by a PHP script."; | + | |
- | $success = io_saveFile($page_path, | + | |
- | + | ||
- | if ($success) { | + | |
- | msg(" | + | |
- | } else { | + | |
- | msg(" | + | |
- | } | + | |
- | + | ||
- | // 변경된 내용 확인 (다시 읽기) | + | |
- | if (file_exists($page_path)) { | + | |
- | $updated_content = file_get_contents($page_path); | + | |
- | echo "< | + | |
- | echo "< | + | |
} | } | ||
?> | ?> | ||
</ | </ | ||
- | * **사용자 | + | ---- |
- | - DokuWiki는 사용자 인증 및 권한 관리를 위한 다양한 함수를 제공합니다. | + | ==== 4) 간단한 함수 |
+ | |||
+ | 두 수를 더하는 간단한 함수를 | ||
< | < | ||
<?php | <?php | ||
- | global $USERINFO; // 현재 로그인한 사용자 정보 | + | function addNumbers($num1, $num2) { |
- | + | | |
- | if (isset($USERINFO[' | + | |
- | | + | |
- | } else { | + | |
- | echo "< | + | |
} | } | ||
- | // 사용자 권한 확인 예시 | + | $result = addNumbers(10, 5); |
- | if (checkSecurityToken() && auth_isadmin()) { // 보안 토큰 확인 및 관리자 여부 | + | echo "10 + 5 = " |
- | | + | |
- | } else { | + | |
- | echo "< | + | |
- | } | + | |
?> | ?> | ||
</ | </ | ||
- | ===== 6. 결론 ===== | + | ====== 결론 ====== |
- | + | ||
- | 이 가이드라인은 DokuWiki 환경에서 PHP를 사용하여 플러그인을 개발하고 DokuWiki 기능을 확장하는 데 필요한 기본적인 지식과 모범 사례를 제공했습니다. PHP의 핵심 문법부터 DokuWiki의 특정 API와의 상호작용, | + | |
- | DokuWiki는 강력한 확장성을 제공하며, PHP에 대한 | + | PHP는 강력하고 유연하며 |
- | ===== 7. 관련 | + | ====== 관련 |
* [[wiki: | * [[wiki: |
wiki/it/programming/php.1753947186.txt.gz · 마지막으로 수정됨: 저자 syjang0803