PHP Manual

Stig Sæther Bakken
Alexander Aulbach
Egon Schmid
Jim Winstead
Lars Torben Wilson
Rasmus Lerdorf
Zeev Suraski

Edited by

Stig Sæther Bakken
Egon Schmid

번역 :

황원희 (Home Page: http://php.morosolution.com E-Mail: regina@morosolution.com)
(이 글은 황원희 개인이 번역한 내용입니다. 글의 오역에 따른 책임을 지지 않습니다. 글의 잘못된 부분은 연락해 주시면 감사하겠습니다.)

Copyright ⓒ 1997, 1998, 1999, 2000 by the PHP Documentation Group

Copyright (역자주 : 원문의 법적인 효력문제로 번역하지 않습니다. 내용은 GPL을 따르고 있다는 내용입니다.)

This manual is © Copyright 1997, 1998, 1999, 2000 by the PHP Documentation Group. The members of this group are listed on the front page of this manual.

This manual can be redistributed under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.


Dedication

차례
서문
이 매뉴얼에 대하여
I. Getting Started
1. 소개 (Introduction)
2. 설치 (Installation)
3. 설정 (Configuration)
4. 보안 (Security)
II. Language Reference
5. 기본문법 (Basic syntax)
6. 변수형태 (Types)
7. 변수 (Variables)
8. 상수 (Constants)
9. 표현식 (Expressions)
10. 연산자 (Operators)
11. 제어 구조 (Control Structures)
12. 함수 (Functions)
13. 클래스와 객체 (Classes and Objects)
III. 기능 (Features)
14. Error handling
15. Creating GIF images
16. HTTP authentication with PHP
17. Cookies
18. Handling file uploads
19. Using remote files
20. Connection handling
21. Persistent database connections
IV. 함수 목록 (Function Reference)
I. Apache-specific functions
II. Arbitrary precision mathematics functions
III. Array functions
IV. Aspell functions
V. Calendar functions
VI. COM support functions for Windows
VII. Class/Object Functions
VIII. ClibPDF functions
IX. Cybercash payment functions
X. DOM XML functions
XI. Compression functions
XII. Database (dbm-style) abstraction layer functions
XIII. Date and Time functions
XIV. dBase functions
XV. dbm functions
XVI. Directory functions
XVII. Dynamic Loading functions
XVIII. Encryption functions
XIX. filePro functions
XX. Filesystem functions
XXI. Forms Data Format functions
XXII. FTP functions
XXIII. GNU Gettext
XXIV. Hash functions
XXV. HTTP functions
XXVI. Hyperwave functions
XXVII. Image functions
XXVIII. IMAP, POP3, and NNTP functions
XXIX. Informix functions
XXX. InterBase functions
XXXI. LDAP functions
XXXII. Mail functions
XXXIII. Mathematical functions
XXXIV. MCAL functions
XXXV. Microsoft SQL Server functions
XXXVI. Miscellaneous functions
XXXVII. mSQL functions
XXXVIII. MySQL functions
XXXIX. Network functions
XL. NIS functions
XLI. ODBC functions
XLII. Oracle functions
XLIII. Oracle 8 functions
XLIV. PDF functions
XLV. Perl-compatible Regular Expression functions
XLVI. PHP options & information
XLVII. POSIX functions
XLVIII. PostgreSQL functions
XLIX. Program Execution functions
L. GNU Recode functions
LI. Regular expression functions
LII. Semaphore and shared memory functions
LIII. Session handling functions
LIV. SNMP functions
LV. String functions
LVI. Shockwave Flash functions
LVII. Sybase functions
LVIII. URL functions
LIX. Variable functions
LX. Vmailmgr functions
LXI. WDDX functions
LXII. XML parser functions
V. 부록 (Appendixes)
A. Migrating from PHP/FI 2.0 to PHP 3.0
B. PHP development
C. The PHP Debugger


서문

PHP Version 3.0은 HTML에 내장되어 동작하는 스크립트 언어이다.(HTML-embedded scripting language) PHP는 C와 Java, Perl등으로부터 많은 문장 형식을 빌려쓰고 있고, 몇가지는 고유한 것도 있다. 이 언어의 목적은 웹개발자들이 동적인 웹문서를 빠르고 쉽게 작성할 수 있도록 하는 것이다.


이 매뉴얼에 대하여

원래 영문 매뉴얼은 DocBook DTD을 사용한 SGML로 작성되어 있고, formatting을 위해서는 DSSSL (Document Style and Semantics Specification Language)을 사용하고 있다. 또한 Tex와 RTF버젼도 있으나, 한글 문서는 역자의 편의를 위해 일단 HTML만을 사용하도록 하겠다.


I. Getting Started

Table of Contents
1. 소개 (Introduction)
2. 설치 (Installation)
3. 설정 (Configuration)
4. 보안 (Security)


Chapter 1. 소개 (Introduction)


PHP란 무엇인가?

PHP는 server-side HTML-embedded scripting language입니다.

간단한 답이지만, 무엇을 의미할까? 다음 예를 보자. :

Example 1-1. An introductory example

<html><head><title>Example</title>
<body>
<?php echo "Hi, I'm a PHP script!"; ?>
</body></html>
 

Perl이나 C와같은 다른 언어와 다르게 HTML을 출력하는데 많은 명령어가 필요없다. 여러분은 HTML내에 여러분이 하고자 하는 일(위의 경우는 한줄의 문자열 출력)에 대한 스크립트를 적어주면 된다. PHP 코드는 특정한 시작/끝 태크사이에 들어가게 되는데 이 태그는 "PHP 모드"로 들어가거나 나오게 하는 것이다.

PHP가 client-side Javascript 같은 것과 구별되는 것은 이 코드가 서버에서 실행된다는 것이다.


PHP는 무엇을 할 수 있는가?

가장 기본적인 레벨에서, PHP는 CGI 프로그램에서 할 수 있는 모든 것을 할 수 있다. form data를 가져오고, 동적인 웹페이지를 만들거나, Cookie를 보내고 받을 수도 있다.

아마 PHP의 가장 강력하고 관심가는 부분은 database와의 연동부분일 것이다. PHP를 사용하면 여러분은 Database의 Data를 사용한 Web page를 놀랍도록 간단히 만들 수 있다. 다음에 나오는 DB server들을 현재 사용할 수 있다. :

Adabas D

InterBase

Solid

dBase

mSQL

Sybase

Empress

MySQL

Velocis

FilePro

Oracle

Unix dbm

Informix

PostgreSQL

 

 

PHP는 IMAP나 SNMP, NNTP, POP3, HTTP등의 프로토콜들을 사용해서 다른 서비스들에 대해 접근하여 데이터를 교환할 수 있다. 심지어는 raw network 소켓을 사용하면, 그외의 프로토콜들을 사용할 수도 있다.


PHP의 역사

PHP는 1994년 가을 Rasmus Lerdorf가 처음 고안하였다. 처음 비공개판은 그의 홈페이지에 사용되었고, 외부에 사용된 것은 1995년 초부터 사용되어 Personal Home Page Tools라고 불리게 되었다. 이것은 몇 개의 특별한 매크로를 사용할 수 있는 단순한 파서(명령 해석기) 엔진과 방명록이나 카운터 같이 홈페이지의 뒤에서 공통적으로 사용할 수 있는 몇 개의 간단한 유틸리티로 구성되었다. 이 파서가 1995년 중반에 재작성되어 PHP/FI Version 2라고 명명되었다. FI는 Rasmus가 작성한 html 형식의 데이터를 해석할 수 있는 별도의 패키지다. 그는 이 두가지를 합치고 mSQL을 지원하도록하여 PHP/FI를 탄생시켰다. PHP/FI는 빠른 속도로 발전하였고, 많은 사람들이 이에 공헌하였다.

정확한 통계는 없지만 1996년 후반 PHP/FI는 전세계적으로 최소한 15,000개 이상의 웹사이트에서 사용되는 것으로 추정되었고, 1997년 중반에 그수는 50,000으로 늘어났다. 1997년 중반 PHP는 또다른 중요한 변화를 가져왔다. 이때부터 PHP는 Rasmus의 개인이 아닌 팀에 의해 개발되고 있다. 새 파서는 Zeev Suraski와 Andi Gutmans가 재 작성되었고, PHP Version 3라는 이름으로 나타났다. 많은 PHP/FI의 기능들이 옮겨왔고, 그외에도 많은 기능들이 새로 작성되었다.

1998년 중반인 현재 PHP/FI나 PHP3는 C2의 StrongHold web server나 RedHat Linux같은 여러 상업적인 제품과 함께 제공되고 있으며, 전세계적으로 최소한 150,000개의 웹사이트가 사용하고 있다. 이 수는 인터넷에서 Netscape's flagship Enterprise server의 사용수보다 많다.

이 글이 쓰여지고 있는 가운데, PHP의 차기 버전이 제작되고 있다. 새로운 PHP는 Zend 같은 효율적인 스크립트 엔진과 Apache이외의 웹서버에서도 모듈로 실행될 수 있도록 제작되고 있다.


Chapter 2. 설치 (Installation)


최신 버전 내려받기 (Downloading the latest version)

여러분은 최신버전의 소스와 (윈도우즈를 포함한)여러 플랫폼의 배포판을 http://www.php.net에서 내려 받을 수 있다.


Unix에서 소스로 설치 (Installing From Source on UNIX)

이 장은 PHP를 설치하고 설정하는 방법에 대해 설명하고 있다. 필요한 지식과 소프트웨어 :


빠른 설치 방법 (Apache Module Version)

 

  1 
  2 1.  gunzip apache_1.3.x.tar.gz
  3 2.  tar xvf apache_1.3.x.tar
  4 3.  gunzip php-3.0.x.tar.gz
  5 4.  tar xvf php-3.0.x.tar
  6 5.  cd apache_1.3.x
  7 6.  ./configure --prefix=/www
  8 7.  cd ../php-3.0.x
  9 8.  ./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars
 10 9.  make
 11 10. make install
 12 11. cd ../apache_1.3.x
 13 12. ./configure --prefix=/www --activate-module=src/modules/php3/libphp3.a
 14 13. make
 15 14. make install
 16 
 17      이 단계 대신 httpd 이진 파일을 기존의 파일에 덮어 쓸 수도 있다.
 18      이 작업을 하려면 우선 httpd 서버를 끄는 것을 잊지 말도록 하자.
 19
 20 
 21 15. cd ../php-3.0.x
 22 16. cp php3.ini-dist /usr/local/lib/php3.ini
 23 
 24      여러분은 이제 PHP의 설정을 고치기위해 /usr/local/lib/php3.ini를 수정하면 된다.
 25      만약 이 파일의 위치를 옮기고 싶다면 위의 8단계에서 --with-config-file=/path 옵션을 준다.
 26 
 27 
 28 17. Edit your httpd.conf or srm.conf file and add: 
 29       
 30             AddType application/x-httpd-php3 .php3
 31  
 32     여기서 여러분은 .php3외에 다른 확장자를 사용할 수도 있다.
 33     하지만 많은 사람들이 사용하는대로 그냥 .php3를 사용할 것을 권한다.
 34
 35 18. 일반적인 방식대로 Apache 서버를 시작한다. 
 36     (반드시 stop과 start하여 재시동하여야한다. 
 37      HUP이나 USR1같은 signal을 주는 등의 reload만 해서는 소용이 없다.)
 38       



설정 (Configuration)

PHP를 설정하는 방법에는 크게 두가지가 있다.

다음은 여러 가지 설정 옵션들의 자세한 내용이다.


Apache 모듈

PHP를 아파치 모듈로 만들려면, "Build as an Apache module?"의 질문에 "yes"로 답하고, Apache 배포본의 base 디렉토리를 명시해 주면 된다. (configure에서는 --with-apache=DIR 옵션을 주면 된다.) 만약 여러분의 Apache 소스의 배포본을 /usr/local/src/apache_1.3.3에 풀어 놓았다면, 이 디렉토리가 Apache 배포본의 base 디렉토리가 된다. 기본 디렉토리는 /usr/local/etc/httpd이다.


fhttpd 모듈

PHP를 fhttpd 모듈로 만들려면, "Build as an fhttpd module?"의 질문에 "yes"로 답하고, fhttpd 소스의 base 디렉토리를 명시해 주면 된다. (configure에서는 --with-fhttpd=DIR 옵션을 주면 된다.) 기본 디렉토리는 /usr/local/src/fhttpd이다. 여러분이 fhttpd를 운영중에 있다면, 이 모듈로 만들어 실행하는 것이 더 좋은 성능을 제공하며, 또한 제어와 원격 실행 능력도 향상된다.


CGI version

PHP는 기본적으로 CGI 프로그램으로 만들어 진다. 만약 여러분이 PHP가 모듈로 제공되는 웹 서버를 운영중이라면, 해당 모듈로 사용하는 것이 일반적으로 좋은 성능을 낼 수 있다. 하지만, CGI 버전은 아파치 사용자들에게 다른 user-id를 사용하여 별도의 PHP-enabled 페이지를 실행할 수 있도록 해 준다. 만약 PHP를 CGI로 실행하고 싶다면 Security chapter를 반드시 읽어보기 바란다.


Database 지원 옵션

PHP는 다음의 database들에 대한 고유의 지원을 제공한다. (ODBC도 제공한다.)


Adabas D

      --with-adabas=DIR

Adabas D 지원으로 컴파일한다. DIR은 Adabas D가 설치된 Directory이고, 기본값은 /usr/local/adabasd이다.

Adabas home page


dBase

      --with-dbase

DBase지원으로 컴파일 한다. 별도의 라이브러리는 필요 없다.


filePro

      --with-filepro 

번들된 읽기 전용 filePro(bundled read-only filePro)를 지원하도록 해 준다. 별도의 라이브러리는 필요 없다.


mSQL

      --with-msql=DIR     

mSQL을 지원하도록 한다. DIR은 mSQL이 설치된 디렉토리이고 기본값은 /usr/local/Hughes이다. 이 디렉토리는 mSQL 2.0 배포본의 기본 디렉토리이다. configure는 현재 작동중인 mSQL의 버전을 자동으로 탐지하여 1.0과 2.0중 하나를 지원하도록 한다. 만약 PHP가 mSQL 1.0지원으로 컴파일되었다면, 여러분은 mSQL 2.0 database는 사용하지 못한다. 마찬가지로 2.0으로 컴파일 되었다면 1.0 database는 사용할 수 없다.

See also mSQL Configuration Directives in the configuration file.

mSQL home page


MySQL

      --with-mysql=DIR     

MySQL을 지원하도록 한다. DIR은 MySQL이 설치된 디렉토리이고, 기본값은 /usr/local이다. 이 디렉토리는 MySQL 배포본의 기본 디렉토리 이다.

See also MySQL Configuration Directives in the configuration file.

MySQL home page


iODBC

      --with-iodbc=DIR     

iODBC지원을 포함하도록 한다. 이 기능은 iODBC 드라이버 관리자를 위해 맨 먼저 개발되었는데, 이 iODBC 드라이버 관리자 많은 UNIX하에서 돌아가는 무료 배포가 가능한 ODBC 드라이버 관리자이다. DIR은 iODBC가 설치된 디렉토리이고, 기본값은 /usr/local이다.

FreeODBC home page or iODBC home page


OpenLink ODBC

      --with-openlink=DIR 

OpenLink ODBC 지원을 포함하도록 한다. DIR은 OpenLink ODBC가 설치된 디렉토리이고, 기본값은 /usr/local/openlink이다.

OpenLink Software's home page


Oracle

      --with-oracle=DIR     

오라클 지원을 포함하도록 한다. 오라클 버전 7.0에서 7.3까지는 동작을 테스트하여 문제가 없었다. DIRORACLE_HOME 디렉토리이다. 오라클 환경이 이미 설정되어 있다면, DIR을 반드시 정해줄 필요는 없다.

Oracle home page


PostgreSQL

      --with-pgsql=DIR     

IPostgreSQL지원을 포함하도록 한다. DIR은 PostgreSQL이 설치된 base 디렉토리이고, 기본값은 /usr/local/pgsql이다.

See also Postgres Configuration Directives in the configuration file.

PostgreSQL home page


Solid

      --with-solid=DIR     

Solid지원을 포함하도록 한다. =DIR은 Solid가 설치된 디렉토리이고, 기본값은 /usr/local/solid이다.

Solid home page


Sybase

      --with-sybase=DIR     

Sybase지원을 포함하도록 한다. DIR은 Sybase가 설치된 디렉토리이고, 기본값은 /home/sybase이다.

See also Sybase Configuration Directives in the configuration file.

Sybase home page


Sybase-CT

      --with-sybase-ct=DIR     

Sybase-CT지원을 포함하도록 한다. DIR은 Sybase-CT가 설치된 디렉토리이고, 기본값은 /home/sybase이다.

See also Sybase-CT Configuration Directives in the configuration file.


Velocis

      --with-velocis=DIR     

Velocis지원을 포함하도록 한다. DIR은 Velocis가 설치된 디렉토리이고, 기본값은 /usr/local/velocis이다.

Velocis home page


A custom ODBC library

      --with-custom-odbc=DIR     

사용자 지정의 ODBC 라이브러리 지원을 포함하도록 한다. DIR은 base 디렉토리이고, 기본값은 /usr/local이다.

이 옵션을 사용하려면 여러분은 configure 스크립트를 실행할 때 CUSTOM_ODBC_LIBS를 이미 정의해 주었어야 한다. 또한, 여러분의 include path에는 적합한 odbc.h라는 헤더 파일이 반드시 있어야 한다. 만약 없다면, 여러분이 만들어서 포함시켜야 한다. 헤더에는 좀 특별한 정의들이 필요하게 되는데, 특히 그것이 multiplatform일 경우는 상세히 적어주어야 한다. 그 정의는CFLAGS 옵션에 적어준다.

예를들어 다음과 같은 옵션으로 QNX 하에서 Sybase SQL Anywhere를 사용할수 있다. : CFLAGS=-DODBC_QNX LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc" ./configure --with-custom-odbc=/usr/lib/sqlany50


Unified ODBC

      --disable-unified-odbc 

Unified ODBC 모듈을 사용하지 않도록한다. 이 Unified ODBC 모듈은 Solid나 Adabas D같은 ODBC기 반의 인터페이스(ODBC-based interface)를 가지고 있는 모든 database의 공통의 interface이다. 또한 이 모듈은 보통의 ODBC 라이브러리를 위해 동작한다. 이 옵션은 iODBC와 Solid, Adabas D, Sybase SQL Anywhere에서 시험을 거쳤다. 이 옵션을 사용하려 면 위의 모듈들 중 하나(반드시 하나만)거나, vELOCIS 모듈이 enabled되어 있거나 custom ODBC library가 설정되어 있어야 한다. 즉, 이 옵션은 다음과 같은 옵션중 하나가 사용되었을 경우만 사용이 가능하다. : --with-iodbc, --with-solid, --with-adabas, --with-velocis, --with-custom-odbc.

See also Unified ODBC Configuration Directives in the configuration file.


LDAP

      --with-ldap=DIR     

LDAP (Lightweight Directory Access Protocol) 지원을 포함한다. DIR은 LDAP가 설치된 base 디렉토리이고, 기본값은 /usr/local/ldap이다.

LDAP에 대한 자세한 설명은 RFC1777RFC1778에서 찾을 수 있다.


기타 설정 옵션


--with-mcrypt=DIR

      --with-mcrypt

mcrypt 라이브러리를 포함한다. 자세한 내용은 mcrypt documentation을 보자. DIR 옵션을 주게되면 PHP는 DIR/include에서 mcrypt.h를 찾는다.


--enable-sysvsem

      --enable-sysvsem

대부분의 UNIX에서 지원하는 Sys V 세마포어의 지원을 포함한다. 자세한 정보는 Semaphore and Shared Memory documentation을 읽어 보도록 한다.


--enable-sysvshm

      --enable-sysvshm

대부분의 UNIX에서 지원하는 Sys V 의 공유 메모리(shared memory) 지원을 포함한다. 자세한 정보는 Semaphore and Shared Memory documentation을 읽어 보도록 한다.


--with-xml

      --with-xml     

James Clark의 expat library를 사용한, 아직 공인받지 못한 XML parser를 사용하도록 한다. 자세한 내용은 XML function reference을 보자.


--enable-maintainer-mode

      --enable-maintainer-mode

PHP개발자들을 위한 컴파일러 주의 메시지나, extra dependencie 메시지등을 출력하게 한다.


--with-system-regex

      --with-system-regex

정규 표현식(regular expression) 라이브러리를 PHP와 같이 제공된 것이 아닌, 시스템의 것을 사용하도록 한다. 만약 여러분이 PHP를 서버 모듈로 만든다면, 여러분은 서버를 만들 때와 같은 라이브러리를 PHP를 만들 때도 사용하여야 한다. 만약 시스템의 라이브러리가 여러분이 원하는 특별한 기능을 가지고 있다면 이 옵션을 Enable시키도록 하자. 그러나, 가능하면 PHP와 같이 제공된 라이브러리를 사용하는 것이 권장된다.


--with-config-file-path

      --with-config-file-path=DIR     

PHP가 시작될 때 사용할 configuration file(php3.ini)을 찾을 디렉토리를 정해준다.


--with-exec-dir

      --with-exec-dir=DIR     

안전 모드(safe mode)일 때, 여기서 지정해 준 =DIR안의 실행 파일만 실행이 가능하다. 기본값은 /usr/local/bin이다. 이 옵션은 단지 Default값을 지정해 주는 것 뿐이고, configuration filesafe_mode_exec_dir 지시자에 의해서 나중에 바뀔 수 있다.


--disable-debug

      --disable-debug     

라이브러리나 실행 파일에 디버그 정보를 포함시키지 않는다. 디버그 정보는 버그의 위치를 정확하게 나타내는데 도움을 준다. 따라서, PHP가 alpha나 beta상태일 경우에는 디버그 정보를 포함시키는 것이 좋다.


--enable-safe-mode

      --enable-safe-mode     

기본값으로 "안전 모드"(safe mode)를 지정한다. 안전 모드는 문서의 root에 있는 파일만을 열수 있게 하는 등, PHP가 할 수 있는 작업에 여러 가지 제약을 가한다. 더 자세한 정보는 Security chapter를 읽어보기 바란다. CGI사용자들은 언제나 secure mode에서 사용하여야 한다. 이 옵션은 단지 Default 값을 정하는 것 뿐이고, 후에 configuration filesafe_mode 지시자에 의해 Enable/Disable 될 수 있다.


--enable-track-vars

      --enable-track-vars     

HTTP_GET_VARS, HTTP_POST_VARS, HTTP_COOKIE_VARS 배열에 들어있는 GET / POST / cookie 변수들이 어디서 왔는지 기억하고 있게 만든다. 이 옵션은 단지 Default 값을 정하는 것 뿐이고, 후에 configuration filetrack_vars 지시자에 의해 Enable/Disable 될 수 있다.


--enable-magic-quotes

      --enable-magic-quotes     

magic quotes의 기본값을 Enable로 한다. 이 옵션은 단지 Default 값을 정하는 것 뿐이고, 후에 configuration filemagic_quotes_runtime지시자에 의해 Enable/Disable 될 수 있다.

magic_quotes_gpcmagic_quotes_sybase 지시자를 참조하여 보기 바란다.


--enable-debugger

      --enable-debugger     

내장된 PHP 디버거 지원을 가능하게 한다. 이 기능은 아직 실험적인 상태이다.

configuration fileDebugger Configuration 지시자를 살펴보자.


--enable-discard-path

      --enable-discard-path     

만약 이것이 Enabled되면, PHP CGI 실행파일이 웹 트리 밖에 안전하게 위치할 수 있게 되어 사용자들이 .htaccess security를 피할 수 없게 된다. 자세한 사항은 section in the security chapter를 읽어보기 바란다.


--enable-bcmath

      --enable-bcmath     

bc 형식의 수의 정밀도(precision)를 마음대로 조정할 수 있는 수학 함수를 사용할 수 있게 해 준다.

See also the bcmath.scale option in the configuration file.


--enable-force-cgi-redirect

      --enable-force-cgi-redirect     

내부적인 서버 리디렉트(internal server redirects) 시에 보안 검사(security check)를 하도록 한다. 여러분이 Apache와 함께 CGI 버전을 사용한다면 반드시 이 옵션을 사용하여야 한다.

GI binary형태로 PHP를 사용할 때, PHP는 기본적으로 그것이 리디렉션으로 사용되었는가를 우선 검사한다(예를 들어, Apache에서 Action directives를 사용한 경우이다). 이 옵션을 사용하면 http://my.host/cgi-bin/php/secret/doc.html과 같은 방법으로 PHP binary를 직접 호출하여 표준 web server authentication 절차를 회피하는 방법을 사용할 수 없게 된다. 이 예는 http://my.host/secret/doc.html에 접근할 수 있지만, httpd가 /secret디렉토리에 설정한 어떠한 보안 설정에도 영향을 받지 않게 된다.

이 옵션을 Enable하지 않으면 httpdd의 보안과 인증 설정을 체크하지 않고, 회피가 가능하게 된다. 이 옵션은 서버 소프트웨어가 안전한 리디렉션이 되어 있다는 것을 나타내는 것이 불가능하고, document root와 사용자 디렉토리 아래의 모든 파일이 누구에게나 개방되어 있을 때만 사용하자.

이 옵션에 대한 자세한 설명은 section in the security chapter을 읽어보기 바란다


--disable-short-tags

      --disable-short-tags     

short form <? ?> PHP 태그의 사용을 불가능하게 한다. 여러분은 PHP와 XML을 함께 사용할 경우 short form의 사용을 불가능하게 하여야 한다. 짧은 태그의 사용이 불가능하다면, PHP의 코드는 태그는 <?php ?> 뿐이다. 이 옵션은 단지 Default 값을 정하는 것 뿐이고, 후에 configuration fileshort_open_tag 지시자에 의해 Enable/Disable 될 수 있다.


--enable-url-includes

      --enable-url-includes     

include()함수를 사용하여 PHP에서 직접 다른 HTTP나 FTP서버에 있는 코드를 실행시킬수 있도록 한다.

See also the include_path option in the configuration file.


--disable-syntax-hl

      --disable-syntax-hl 

syntax highlighting 기능을 끈다.


CPPFLAGS and LDFLAGS

PHP를 설치할 때 다른 디렉토리에 있는 헤더나 라이브러리를 찾아서 만들려면, CPPFLAGSLDFLAGS 환경변수를 각각 수정해 주어야 한다. 여러분이 일반적인 쉘을 사용하고 있다면 다음과 같이 사용하는 것이 가능할 것이다. LDFLAGS=-L/my/lib/dir CPPFLAGS=-I/my/include/dir ./configure


Building

PHP의 설정이 완료되면 여러분은 PHP 라이브러리나 CGI 실행 파일을 생성할 준비가 끝난 것이다. make 명령으로 여러분은 그것을 만들 수 있다. 만약 만들 수 없고 그 이유를 모를 경우에는 Problems section을 살펴보기 바란다.

( 역자주 : PHP를 Apache 모듈로 만들었다면 restart가 아닌 stop후 start하여야 합니다.)


Testing

PHP를 CGI 프로그램 형태로 만들었다면, 여러분은 make test라고 입력하여 테스트해 볼 수 있다. 이 방법은 결과물을 테스트하는 언제나 좋은 방법이다. 이 방법은 여러분의 시스템 환경에서 나중에 문제로 골치 썩이지 않고 미리 PHP의 문제를 발견할 수 있게 해 준다.


Benchmarking

PHP를 CGI 프로그램 형태로 만들었다면, 여러분은 make bench라고 입력하여 벤치마크 테스트를 할 수 있다. 안전 모드(safe mode)의 기본값이 on 되어 있을 때는, 작업이 허용된 30초 보다 많이 걸리게 되면 벤치마크를 끝낼 수 없다. 이것은 안전 모드에서는 set_time_limit() 함수를 사용할 수 없기 때문이다. 스크립트에서 max_execution_time을 조절하여 이 시간 간격을 조절한다. make benchconfiguration file을 무시한다.


PHP Installation Guide for Windows

이 설치 안내서는 여러분에게 PHP를 Windows 9x/NT 웹서버에서 설치하고 설정하는데 도움을 줄 것입니다. 이 안내서는 Bob Silva에 의해 작성되었습니다. 따라서 가장 최신의 개정판은 http://www.umesd.k12.or.us/php/win32install.html에서 찾을 수 있을 것입니다.

이 안내서는 다음과 같은 웹서버를 대상으로 합니다.


일반적인 설치 과정

웹 서버의 종류와 관계없이 다음의 설치 과정들이 완료되어야 한다.

PHP 확장을 위한 DLL들은 'php3_'로 시작한다. 이것은 PHP 확장을 위한 DLL들과 자체적인 지원을 위한 DLL들간의 혼란을 방지하기 위해서이다.


Windows 95/98/NT와 PWS/IIS 3

이 서버들에서의 설정은 배포판의 INF 파일(php_iis_reg.inf)을 사용하는 것을 권한다. 여러분은 이 파일을 수정하여 여러분이 원하는 PHP 설치 디렉토리와 확장 내용들을 설정할 수 있다. 만약 수동으로 설정하고 싶다면 다음과 같이 합니다.

주의 : 이 과정은 윈도우의 resistry를 직접 다룹니다. 하나의 실수가 여러분의 시스템 전체를 불안한 상태로 만들 수 있습니다. 우리는 여러분이 registry를 편집하기 전에 반드시 편집 전의 registry를 백업해 놓을 것. PHP 개발팀은 어떠한 registry의 파손도 책임지지 않습니다. 만약 registry에 손상이 갈 경우 OS를 새로 깔기 전에는 부팅되지 않을 수도 있습니다.

PWS와 IIS 3 사용자들은 현재 완전한 운영중인 시스템을 갖고 있습니다. IIS 3 사용자들은 Steven Genusa가 작성한 스크립트 맵을 설정하는 매력적인 tool을 사용할 수 있습니다.


Windows NT와 IIS 4

PHP를 IIS 4가 운영중인 NT Server에 설치하려면 다음 과정을 따른다.


Windows 9x/NT와 Apache 1.3.x

Apache를 PHP CGI binary와 함께 실행하도록 설정하려면 srm.conf이나 httpd.conf를 다음과 같이 수정하여야 한다.

비록 Apache하에서 PHP의 설정이 약간 차이가 있을지 모르지만, 이 설정은 초보자도 할 수 있을 정도로 쉽다. 여기에 나온 것 이상의 설정 지시자는 Apache Docs를 참조하도록 하자.

소스 코드 하이라이팅 기능(소스에 색깔을 넣어서 보기 좋게 출력해 주는 기능)을 사용하기 위해서는 다음과 같은 내용을 가지는 스크립트를 만들어주면 된다. : <?php show_source ("original_php_script.php3"); ?>. 여기서 original_php_script.php3를 여러분이 원하는 소스 코드의 이름으로 바꿔주면 된다.

Note: Win-Apache에서 "c:\directory\file.ext"와 같이 path에 사용되는 모든 백슬래시(\)는 일반 슬래시(/)로 바꿔야 합니다.


Windows에서 Omni HTTPd 2.0b1

이 설정은 매우 쉬운 편이다.

Step 1: Omni server를 설치한다.

Step 2: system tray의 푸른색 OmniHTTPd 아이콘에서 오른쪽 버튼을 클릭하여 Properties(등록정보)를 선택한다.

Step 3: Web Server Global Settings을 클릭한다.

Step 4: 'External' 탭에서 다음을 입력한다. : virtual = .php3 | actual = c:\path-to-php-dir\php.exe

Step 5: Mime 탭에서 다음을 입력한다. : virtual = wwwserver/stdcgi | actual = .php3

Step 6: OK를 클릭한다.

PHP의 모든 확장자에 대해 steps 2 - 6을 반복한다.


PHP Modules

Table 2-1. PHP Modules

php3_calendar.dll

Calendar conversion functions

php3_crypt.dll

Crypt functions

php3_dbase.dll

DBase functions

php3_dbm.dll

GDBM emulation via Berkely DB2 library

php3_filepro.dll

READ ONLY access to filepro databases

php3_gd.dll

GD Library functions for gif manipulation

php3_hyperwave.dll

HyperWave functions

php3_imap4r2.dll

IMAP 4 functions

php3_ldap.dll

LDAP functions

php3_msql1.dll

mSQL 1 client

php3_msql2.dll

mSQL 2 client

php3_mssql.dll

MSSQL client (requires MSSQL DB-Libraries)

php3_mysql.dll

MySQL functions

php3_nsmail.dll

Netscape mail functions

php3_oci73.dll

Oracle functions

php3_snmp.dll

SNMP get and walk functions (NT only!)

php3_zlib.dll

ZLib functions


Problems?


Read the FAQ

일부 질문들은 공통적인 것이 많다. PHP FAQ에 이 공통적인 질문들이 모여있으니 찾아보자. 이 문서는 http://www.php.net/FAQ.php3에서 찾을 수 있다.

(역자주 : FAQ의 번역본은 http://w3.to/regina/FAQ.htm에 번역되어 있으나 최신판은 아니다.)


Bug reports

만약 여러분이 Bug라고 생각되는 것이 발견될 경우 이것을 반드시 보고해 주기 바란다. PHP의 개발자들은 아마 그 버그에 대해 여러분이 알려주기 전에는 모르고 있을 것이다. 여러분의 버그 레포트로 그 버그들을 잡을 수 있다. 버그 보고용 폼이 PHP 사이트에 있다. 주요 양식은 http://ca.php.net/bugs.php3에서 찾을 수 있을 것이다. (역자주: 버그 레포트는 영어로 써야 겠지요. Hi)


Other problems

만약 여러분이 아직도 고생하고 있다면, PHP의 메일링 리스트(mailing list)가 도움을 줄 수 있을 것이다. 여러분이 만약 어떤 질문을 하기 전에 우선 보관 문서(archive)를 찾아보아 같은 문제에 대한 해답이 있는지 찾아보는 것을 잊지 말도록 하자. 보관 문서는 http://www.php.net/에서 찾아 볼 수 있다. PHP 메일링 리스트에 참가하려면 php3-subscribe@lists.php.net으로 빈 편지를 하나 보내면 된다. mailing list 주소는 php3@lists.php.net이다.

만약 여러분이 mailing list를 통해서 어떤 도움을 받고 싶다면, 질문시에 자세하고 명확한 질문과 함께, 여러분의 운영 환경에 대한 세부항목을 첨부하는 것이 좋다 (운영체계, PHP 버전, 웹서버의 종류와 버전, PHP를 CGI로 쓰고 있는지 모듈로 쓰고 있는지 등). 또한 여러분이 당면한 문제를 재현할 수 있는 코드를 포함시키면 더욱 좋다. (역자주: 이것도 당연히 영어로 써야 겠지요. Hi)


Chapter 3. 설정(Configuration)


The configuration file

설정 파일(configuration file)은 (PHP 3.0에서는 php3.ini 이고, PHP 4.0에서는 php.ini 이다.) PHP가 시작될 때 읽혀진다. 서버 모듈 형태의 PHP는 이 작업을 서버가 실행 될 때 한번만 하게 된다. CGI형태의 경우는 불려질 때마다 매번 일어난다.

PHP를 아파치 모듈로 사용할 때는, PHP의 설정을 Apache configuration 파일과 .htaccess 파일에서 지정하여 설정할 수도 있다.

PHP 3.0에서는, PHP의 지시자(directive)들과 일치하는 Apache httpd.conf 지시자가 있다. httpd.conf에서의 지시자 이름은 php3.ini의 지시자 이름 앞에 "php3_"를 붙인 것이다.

PHP 4.0에서는 다음과 같은 몇 개의 Apache 지시자만으로 PHP 설정을 바꿀 수 있다.

php_value name value
지정된 변수에 원하는 값을 설정한다.
php_flag name on|off
Boolean 값을 가지는 설정 옵션의 값을 설정한다.
php_admin_value name value
지정된 변수에 원하는 값을 설정한다. "Admin" 으로 지정된 설정은 main Apache 설정파일에서만 설정이 가능하다. .htaccess 파일에서 그 내용을 변경하는 것은 불가능하다.
php_admin_flag name on|off
Boolean 값을 가지는 설정 옵션의 값을 설정한다.

( 역자주 : PHP를 아파치 모듈로 사용할 경우 httpd.conf에 적어준 옵션만 작동한다고 한다. )
( 역자주 : httpd.conf에 옵션을 적는 방법은 조금 다르다. "="을 사용하지말고 그냥 한칸을 띄고 적어주면 된다.
include_path 옵션을 설정하는 예는 다음과 같다. php3_include_path .:/home/httpd/php-lib )

현재 설정된 설정값은 phpinfo()함수를 사용하여 확인해 볼 수 있다. 또한 개개의 설정 내용을 확인하기 위해서는 get_cfg_var()함수를 사용하면 된다.


General Configuration Directives

asp_tags boolean
일반적인 <?php ?> 택 대신에 ASP 스타일의 <% %> 택을 추가적으로 사용할 수 있도록 한다. 또한 변수값 출력문인 <%= $value %> 형태의 지원도 포함한다. 자세한 정보는 Escaping from HTML 부분을 참조하자.

Note: ASP-style tags 지원은 3.0.4 버전에서 추가되었다.

auto_append_file string
main 파일 후에 자동으로 해석될 파일의 이름을 명시한다. 그 파일은 include()함수를 통해서 포함되므로 include_path 지시자가 사용된다.

none 값을 주게 되면 auto-appending이 disable된다.

NOTE: 만약 스크립트가 exit()로 종료되게 되면 auto-append는 일어나지 않는다.

auto_prepend_file string
main 파일 전에 자동으로 해석될 파일의 이름을 명시한다. 그 파일은 include() 함수를 통해서 포함되므로 include_path 지시자가 사용된다.

none 값을 주게 되면 auto-prepending이 disable된다.

 
cgi_ext string
 
 
display_errors boolean
이 결정자(determine)는 에러가 생겼을 때 HTML 조각의 출력을 스크린으로 보일 것인가 아닌가를 결정한다.
 
doc_root string
PHP의 "root directory"를 지정한다. 반드시 값을 가져야 한다. PHP가 안전모드(safe mode)로 설정되어 있을 경우, 이 디렉토리 밖에 있는 파일은 사용할 수 없다.
 
engine boolean
이 지시자는 아파치 모듈 버전의 PHP에서만 유효하다. 이것은 사이트에서 디렉토리 단위나, Virtual 서버 단위를 기반으로 PHP 파싱 기능을 켜거나 끄도록 한다. httpd.conf 파일의 적당한 위치에 php3_engine off라고 명시함으로써, PHP를 가능하거나 불가능하게 할 수 있다.
 
error_log string
스크립트 에러가 로그될 파일 이름을 정한다. 로그 파일로 시스템 로그를 사용하기 위해서 syslog라는 특별한 값이 이용된다. 유닉스에서는 syslog(3)이고, Windows NT에서는 Event log가 된다. Windows 95에서는 시스템 로그를 지원하지 않는다.
 
error_reporting integer
에러 레포팅의 레벨을 설정한다. 이 파라메타 값은 비트 단위로 설정한다. 다음 중에 원하는 에러 레포팅 레벨의 값을 더해주면 된다.

Table 3-1. Error Reporting Levels

bit value

enabled reporting

1

normal errors

2

normal warnings

4

parser errors

8

non-critical style-related warnings

기본값은 7 이다(normal errors와 normal warnings, parser errors가 레포트 된다).

 
open_basedir string
PHP가 열어볼 수 있는 파일을 특정 디렉토리 이하로 제한한다.

예를 들어 어떤 스크립트가 fopen이나 gzopen으로 파일을 열려고 할 때 그 파일이 지정된 위치에 있는가 검사한다. 만약 파일이 지정된 디렉티리밖에 있다면, PHP는 이 열기 동작을 거부한다. 모든 symbolic link들은 원래의 이름으로 바뀌어 해석된다. 따라서 이 제한을 피하기 위해 symbolic link를 사용하는 것을 방지할 수 있다.

.이라는 지정된 값을 주면 스크립트 파일이 있는 디렉토리가 base-directory로 지정된다.

Windows에서는 세미콜론(;)을 사용하고, 다른 OS에서는 콜론(:)으로 구분한다. As an Apache module, open_basedir paths from parent directories are now automatically inherited

NOTE: PHP 3.0.7 부터, 한 개 이상의 디렉토리를 지정할 수 있도록 되었다.

기본값은 모든 파일을 열 수 있는 것이다.

 
gpc_order string
GET / POST / COOKIE 변수들의 해석 순서를 정한다. 기본값은 "GPC"이다. 예를들어 "GP"라고 설정한다면, PHP는 cookie들은 완전히 무시하고, 같은 이름을 가지 POST 변수가 있는 GET 변수는 POST 변수의 값으로 덮어 쓰여지게 된다.
 
ignore_user_abort string
기본값은 Off이다. 만약 이 값이 On이면, 원격 클라이언트가 중간에 연결을 끊어도 스크립트가 끝까지 수행된다.

See also ignore_user_abort().

 
include_path string
require()include(), fopen_with_path() 함수들이 사용하는 파일을 찾을 위치(path)를 명시한다. string의 형식은 시스템 환경변수인 PATH 의 설정과 비슷하다. UNIX에서는 콜론으로 나뉘어진 디렉토리들의 리스트이고, Windows에서는 세미콜론을 사용한다.

Example 3-1. UNIX include_path

  1 
  2 include_path=.:/home/httpd/php-lib
  3 

Example 3-2. Windows include_path

  1 
  2 include_path=".;c:\www\phplib"
  3 

기본값은 .이다. (현재 디렉토리만)

 
isapi_ext string
 
 
log_errors boolean
스크립트 에러 메시지가 서버의 에러 로그에 로그되는 가를 정한다. 이 옵션은 서버에 따라 다르게 동작한다.
 
magic_quotes_gpc boolean
GPC (Get/Post/Cookie) 동작 중에 일어나는 magic_quotes 기능을 설정한다. magic_quotes가 설정되어 있으면 GPC에서 입력된 모든 ' (single-quote)와 " (double quote), \ (backslash), NUL 들의 앞에 백슬래시(\)가 자동으로 붙게 된다. 또한, magic_quotes_sybase도 같이 설정되어 있으면 '(single-quote)는 백슬래시(\)가 아닌 single-quote(')가 앞에 붙게 된다.
 
magic_quotes_runtime boolean
만약 magic_quotes_runtime이 설정되어 있다면, database와 text 파일에서 읽어 들이는 모든 데이터에 있는 ' (single-quote)와 " (double quote), \ (backslash), NUL 들의 앞에 백슬래시(\)를 붙이도록 한다. 또한, magic_quotes_sybase도 같이 설정되어 있으면 '(single-quote)는 백슬래시(\)가 아닌 single-quote(')가 앞에 붙게 된다.
 
magic_quotes_sybase boolean
만약 magic_quotes_gpcmagic_quotes_runtime 이 설정되어 있고, magic_quotes_sybase도 같이 설정되어 있으면 '(single-quote)는 백슬래시(\)가 아닌 single-quote(')가 앞에 붙게 된다.
 
max_execution_time integer
구문해석기(parser)가 한 스크립트를 처리하는데 걸리는 최대 시간을 설정한다. 이것은 불완전한 스크립트로부터 서버가 모두 점유당하는 것을 방지하는데 도움이 된다.
 
memory_limit integer
한 스크립트가 할당받을 수 있는 메모리의 최대 크기를 지정한다. 이것은 불완전한 스크립트로부터 서버 전체의 메모리가 잡혀 먹히는 것을 방지한다.
 
nsapi_ext string
 
 
short_open_tag boolean
PHP의 Open 태그로 short form (<? ?>)의 사용을 허가하거나 불허한다. 만약 여러분이 PHP와 XML을 함께 사용한다면 short form의 사용을 불가능하게 하여야 한다. 짧은 태그의 사용이 불가능하다면, PHP의 Open 태그로는 long form(<?php ?>)만을 사용하여야 한다.
 
sql.safe_mode boolean
 
 
track_errors boolean
이 지시자가 설정되어 있으면 $php_errormsg이라는 전역 변수에 마지막으로 발생한 에러 메시지가 들어있게 된다.
 
track_vars boolean
이 지시자가 설정되면, 각각 HTTP_GET_VARS, HTTP_POST_VARS, HTTP_COOKIE_VARS의 전역 배열에 GET / POST / cookie 변수들의 입력을 저장하게 된다.
 
upload_tmp_dir string
파일 업로드시 파일을 저장할 임시 디렉토리를 지정한다. PHP가 동작하게되는 User ID에 대해 쓰기 권한이 있어야 한다.
 
user_dir string
PHP 파일들을 위한 사용자의 홈 디렉토리의 base 이름을 지정한다. (Ex. public_html)
 
warn_plus_overloading boolean
이것이 설정되면, 문자열에 더하기(+) 연산자가 사용될 때 PHP가 주의 메시지를 출력하게 만든다. 이 옵션은 스크립트의 더하기 연산자를 문자열 concatenator(.)로 다시 작성하는데 도움을 준다.


Mail Configuration Directives

SMTP string
Windows환경에서 PHP가 사용할 SMTP 서버의 DNS 이름이나 IP 번호. mail() 함수로 편지를 보내려면 이 옵션을 반드시 설정해 주어야 한다.
 
sendmail_from string
Windows환경에서 PHP가 편지를 보낼 때 "From:"에 사용될 메일 어드레스.
 
sendmail_path string
sendmail 프로그램을 찾을 Path. 보통은/usr/sbin/sendmail 이나 /usr/lib/sendmail 에 있다. configure 프로그램이 sendmail의 위치를 찾아 이것을 기본값으로 설정해 주지만, 그것이 잘되지 않았거나 오류가 있을 때, 여러분은 여기서 직접 지정해 줄 수 있다.

sendmail을 사용하지 않는 시스템의 경우 현재 제공되고 있는 다른 메일 시스템의 sendmail 호환 명령(wrapper/replacement)으로 설정해 주어야 한다. 예를들어 Qmail 사용자는 보통 /var/qmail/bin/sendmail로 설정해 주면 된다.


Safe Mode Configuration Directives

safe_mode boolean
PHP를 안전 모드(safe mode)로 작동되거 한다. 자세한 내용은 Security chapter를 살펴보기 바란다.
 
safe_mode_exec_dir string
PHP가 안전 모드에서 작동할 때, system() 이나 기타 다른 프로그램을 실행 시키는 함수들은 이 디렉토리에 있는 프로그램이 아니면 작업을 거부한다.


Debugger Configuration Directives

debugger.host string
디버거가 사용할 host의 DNS name 이나 IP address
 
debugger.port string
디버거가 사용할 Port 번호
 
debugger.enabled boolean
디버거를 작동시킨다.


Extension Loading Directives

enable_dl boolean
이 지시자는 PHP를 아파치 모듈로 실행할 때만 효력을 가진다. 여러분은 PHP에서 dl() 을 사용하여 extension을 dynamic loading하는 기능을 virtual server나 디렉토리 별로 가능하게 하거나 불가능하게 할 수 있다.

dynamic loading을 불가능하게 하는 첫 번 째 이유는 보안상의 이유이다. dynamic loading에서는 모든 safe_mode 설정과 open_basedir 설정이 무시될 수 있기 때문이다.

기본값은 모든 dynamic loading을 허용하는 것이다. 단, safe-mode를 사용하는 중에는 항상 dl()의 사용이 불가능해 진다.

 
extension_dir string
동적으로 적재 가능한(dynamically loadable) extension을 찾을 디렉토리를 설정한다.
 
extension string
PHP가 시작될 때 로드할 dynamically loadable extension들을 설정한다.


MySQL Configuration Directives

mysql.allow_persistent boolean
영구으로(persistent) MySQL을 접속할 수 있게 한다.
 
mysql.default_host string
데이터베이스 서버에 연결할 때 별도의 host 지정이 없을 경우 사용되는 기본 서버 호스트를 지정한다.
 
mysql.default_user string
데이터베이스 서버에 연결할 때 별도의 사용자 ID 지정이 없을 경우 사용되는 기본 사용자 ID를 지정한다.
 
mysql.default_password string
데이터베이스 서버에 연결할 때 별도의 암호 지정이 없을 경우 사용되는 기본 암호를 지정한다.
 
mysql.max_persistent integer
프로세스당 영구적인(persistent) MySQL 접속의 최대 개수
 
mysql.max_links integer
영구적인(persistent) 접속을 포함한 프로세스당 MySQL 접속의 최대 개수


mSQL Configuration Directives

msql.allow_persistent boolean
영구적으로(persistent) mSQL을 접속할 수 있게 한다.
 
msql.max_persistent integer
프로세스당 영구적인(persistent) mSQL 접속의 최대 개수
 
msql.max_links integer
영구적인(persistent) 접속을 포함한 프로세스당 mSQL 접속의 최대 개수


Postgres Configuration Directives

pgsql.allow_persistent boolean
영구적으로(persistent) Postgres를 접속할 수 있게 한다.
 
pgsql.max_persistent integer
프로세스당 영구적인(persistent) Postgres 접속의 최대 개수
 
pgsql.max_links integer
영구적인(persistent) 접속을 포함한 프로세스당 Postgres 접속의 최대 개수


Sybase Configuration Directives

sybase.allow_persistent boolean
영구적으로(persistent) Sybase를 접속할 수 있게 한다.
 
sybase.max_persistent integer
프로세스당 영구적인(persistent) Sybase 접속의 최대 개수
 
sybase.max_links integer
영구적인(persistent) 접속을 포함한 프로세스당 Sybase 접속의 최대 개수


Sybase-CT Configuration Directives

sybct.allow_persistent boolean
영구적으로(persistent) Sybase-CT를 접속할 수 있게 한다.
 
sybct.max_persistent integer
프로세스당 영구적인(persistent) Sybase-CT 접속의 최대 개수
 
sybct.max_links integer
영구적인(persistent) 접속을 포함한 프로세스당 Sybase-CT 접속의 최대 개수
 
sybct.min_server_severity integer
severity를 가지는 서버 메시지 개수가 sybct.min_server_severity에 설정한 값보다 크거나 같아지면 warning을 레포트한다. 이 값은 스크립트에서 sybase_min_server_severity()함수를 통해 설정할 수도 있다. 기본 값은 10이다.
 
sybct.min_client_severity integer
severity를 가지는 클라이언트 라이브러리 메시지 개수가 sybct.min_server_severity에 설정한 값보다 크거나 같아지면 warning을 레포트한다. 이 값은 스크립트에서 sybase_min_client_severity()함수를 통해 설정할 수도 있다. 기본 값은 10이다.
 
sybct.login_timeout integer
서버에 연결을 시도하고 기다리는 최대 시간. 단위는 초이고 지정된 시간에 연결이 완료되지 못하면 연결 동작은 실패하는 것이다. 만약 연결시도 중 max_execution_time의 설정을 초과하게 되면 스크립트는 연결 실패를 알리기 전에 종료되어 버린다. 기본값은 1분이다.
 
sybct.timeout integer
select_db나 query등의 명령을 주고 응답을 기다리는 최대 시간. 단위는 초이고 지정된 시간안에 응답이 없으면 이 동작은 실패하는 것이다. 만약 연결시도 중 max_execution_time의 설정을 초과하게 되면 스크립트는 동작 실패를 알리기 전에 종료되어 버린다. 기본값은 없고, 무한정 기다리는 것이다.
 
sybct.hostname string
sp_who에 의해 표시될 연결을 요청하는 host의 이름. 기본값은 없다.


Informix Configuration Directives

ifx.allow_persistent boolean
영구적으로(persistent) Informix를 접속할 수 있게 한다.
 
ifx.max_persistent integer
프로세스당 영구적인(persistent) Informix 접속의 최대 개수
 
ifx.max_links integer
영구적인(persistent) 접속을 포함한 프로세스당 Informix 접속의 최대 개수
 
ifx.default_host string
ifx_connect()이나 ifx_pconnect() 함수에 호스트가 지정되지 않았을 경우 사용할 기본 호스트.
 
ifx.default_user string
ifx_connect()이나 ifx_pconnect() 함수에 user id가 지정되지 않았을 경우 사용할 기본 user id.
 
ifx.default_password string
ifx_connect()이나 ifx_pconnect() 함수에 password가 지정되지 않았을 경우 사용할 기본 password.
 
ifx.blobinfile boolean
Set to true if you want to return blob columns in a file, false if you want them in memory. You can override the setting at runtime with ifx_blobinfile_mode().
 
ifx.textasvarchar boolean
select 문에서 TEXT 컬럼의 내용을 일반적인 문자열로 반환하고 싶다면 True, blob id 파라메터를 사용하고 싶다면 False를 설정한다. 이 설정은 ifx_textasvarchar() 함수를 사용하여 실행 중 변경할 수 있다.
 
ifx.byteasvarchar boolean
select 문에서 BYTE 컬럼의 내용을 일반적인 문자열로 반환하고 싶다면 True, blob id 파라메터를 사용하고 싶다면 False를 설정한다. 이 설정은 ifx_textasvarchar() 함수를 사용하여 실행 중 변경할 수 있다.
 
ifx.charasvarchar boolean
데이터를 가져올 때 CHAR 컬럼의 뒤쪽 공백을 자동으로 잘라내려면 True를 설정한다.
 
ifx.nullformat boolean
NULL 컬럼에 대하여 "NULL"이라는 문자열을 반환하려면 True, 공백 문자열("")을 반환하려면 False를 설정한다. 이 설정은 ifx_nullformat() 함수를 사용하여 실행 중 변경할 수 있다.


BC Math Configuration Directives

bcmath.scale integer
bc 수학 함수들이 사용하는 십진 자리수.


Browser Capability Configuration Directives

browscap string
browser 기능(capabilities) 파일의 이름


Unified ODBC Configuration Directives

uodbc.default_db string
odbc_connect()odbc_pconnect()에서 none으로 설정되어 있을 때 사용할 ODBC Data Source를 지정한다.
 
uodbc.default_user string
odbc_connect()odbc_pconnect()에서 none으로 설정되어 있을 때 사용할 User 이름을 지정한다.
 
uodbc.default_pw string
odbc_connect()odbc_pconnect()에서 none으로 설정되어 있을 때 사용할 Password를 지정한다.
 
uodbc.allow_persistent boolean
영구적으로(persistent) ODBC를 접속할 수 있게 한다.
 
uodbc.max_persistent integer
프로세스당 영구적인(persistent) ODBC 접속의 최대 개수
 
uodbc.max_links integer
영구적인(persistent) 접속을 포함한 프로세스당 ODBC 접속의 최대 개수


Chapter 4. 보안 (Security)

PHP는 강력한 언어이디. 그 인터프리터는 웹서버의 모듈로 되어 있건 CGI binary로 되어 있건 간에, 파일을 사용할 수 있고, 다른 명령이나 프로그램을 실행할 수 있고, 서버로 네트웍 연결을 할 수도 있다. 이런 특성들은 기본적으로 어떤 프로그램이든 실행시켜 웹서버를 불안한 상태로 만들 수 있다. PHP는 분명히 Perl이나 C보다 좀더 안전한 CGI 프로그램을 만들 수 있다. 컴파일시나 실행시 설정 옵션들을 적절히 선택함으로, 여러분은 원하는 정도의 자유로움과 보안상의 제약을 조화시킬 수 있다.

PHP는 수많은 방법으로 이용이 가능하고, 이에 따른 여러 가지 설정 옵션이 있을 수 있다. 많은 옵션 선택 사항들은 PHP를 보다 많은 목적으로 사용할 수 있도록 하지만, 이 옵션들의 조합과 서버의 설정에 따라 보안상의 허점을 노출시킬 수도 있다. 이 장은 다른 옵션의 조합 방법과 이것을 안전하게 사용하는 상황을 설명한다.


CGI binary


가능한 공격 (Possible attacks)

CGI binary 형태의 PHP는 어떤 이유로 서버 소프트웨어(아파치 같은)의 모듈로 사용되기를 원하지 않는 경우에 사용할 수 있고, PHP를 다른 종류의 CGI wrapper와 함께 안전한 chroot와 setuid 환경을 만들어 내는 곳에 때에 사용할 수 있다. 이 설정은 보통 실행할 PHP binary를 웹서버의 cgi-bin디렉토리에 설치해야 한다. CERT 권고사항 CA-96.11에 따르면 모든 인터프리터들은 cgi-bin에 설치하도록 권고된다. 비록 PHP binary가 독립적인 인터프리터로 사용된다 할지라도, PHP는 이 설정이 만들어낼 가능한 공격을 다음과 같이 막아내도록 설계되어 있다. :


Case 1: 공용 파일만 제공하기 (only public files served)

만약 여러분의 서버가 password 나 ip 기준의 접근 통제에 관한 어떠한 사항도 없다면, 이러한 설정 옵션들은 필요 없다. 만약 여러분의 웹서버가 리디렉트를 허용하지 않거나, 서버가 해당 요구가 안전하게 리디렉트된 요구인지 대해 PHP binary와 통신할 수 있는 방법이 없을 경우, 여러분은 스크립트를 설정하기 위해 --disable-force-cgi-redirect 옵션을 명시할 수 있다. 여러분은 여전히 여러분의 PHP 스크립트가, http://my.host/cgi-bin/php/dir/script.php3처럼 직접 접근하는 것도 아니고 http://my.host/dir/script.php3같이 리디렉션에 의해서도 아닌, 다른 믿지 못할 방법에 의해 불려 질 때를 대비하여 대책을 강구해 두어야 합니다.

리디렉션은 예를들어 Apache에서는 AddHandle과 Action 지시자를 사용하여 설정할 수 있습니다. (아래를 보세요.)


Case 2: --enable-force-cgi-redirect 옵션 사용 (using --enable-force-cgi-redirect)

이 컴파일시의 옵션은 사용자가 http://my.host/cgi-bin/php/secretdir/script.php3와 같이 PHP를 직접 호출하는 것을 막아준다. 대신, 이 모드에서 PHP는 그것이 웹서버의 리디렉트 규칙을 통과한 경우에만 parse 작업을 할 것이다.

일반적으로 아파치 설정에서 리디렉트 설정은 다음과 같이 지시자를 사용하여 한다. :

Action php3-script /cgi-bin/php
AddHandler php3-script .php3

이 옵션은 아파치 웹서버에서 시험을 거쳤고, 아파치는 리디렉트된 요구에 대해서는 REDIRECT_STATUS 라는 비 표준 CGI 환경 변수를 설정한다. 만약 당신의 웹서버가 문서 요구가 직접(direct)인지 리디렉트(redirect)인지 구별할 수 있는 방법을 제공하지 않는다면 여러분은 이 옵션을 사용할 수 없다. 따라서, 여러분은 이 문서에 씌여져 있는 CGI 버전의 다른 실행 방법을 사용해야 할 것이다.


Case 3: doc_root나 user_dir의 설정 (setting doc_root or user_dir)

웹서버 문서 디렉토리에 script나 실행파일 같은 Active content를 포함하는 것은 종종 불안하다고 생각되어 진다. 만약 약간의 설정 오류로 스크립트가 실행되지 않고 HTML 문서처럼 그대로 출력 된다면, 각종 지적 재산이나 Password같은 보안상의 정보가 누설되는 결과가 초래될 지도 모른다. 그러므로 많은 시스템 관리자들은 스크립트를 위한 별도의 디렉토리를 만들어 놓고, 이 디렉토리는 PHP CGI를 통해서만 접근이 가능하도록 만들어 놓아 실행은 가능하지만 보여지지는 않도록 한다.

또한, 전장에서 기술한 바와 같이, 요구가 리디렉트된 것이 아니라고 확인해주는 방법이 없다면, 웹 문서의 root와는 다른 스크립트의 doc_root를 설정해 주는 것이 반드시 필요하다.

여러분은 php3.inidoc_root 지시자를 설정하거나, PHP_DOCUMENT_ROOT라는 환경변수 값에 설정해 주어, PHP 스크립트 문서의 root를 설정할 수 있다. 만약 이것이 설정되어 있다면, CGI 버전의 PHP는 언제나 이 doc_root와 request에 있는 경로 정보를 가지고 접근하려는 파일의 이름을 만든다. 따라서 여러분은 이 디렉토리 밖에서는 어떠한 스크립트도 실행될 수 없도록 만들게 된다. (아래에 있는 user_dir 만은 예외이다)

이곳에서 또 하나 사용할 수 있는 옵션은 user_dir이다. user_dir이 설정되어 있지 않으면 접근 가능한 파일을 doc_root에 있는 것 뿐이다. http://my.host/~user/doc.php3같은 url로는 user home directory에 있는 파일을 열 수 없다. 단지 doc_root아래의 ~user/doc.php3 파일을 부를 뿐이다. (물론 틸데[~]로 시작하는 "~user"라는 디렉토리이다.)

만약 user_dir이 예를 들어 public_php로 설정되어 있다면, http://my.host/~user/doc.php3와 같은 요구는 user의 home 디렉토리 밑의 public_php라는 디렉토리 밑의 doc.php3라는 파일을 호출 할 것이다. 만약 사용자의 home이 /home/user라면, 실행되는 파일은 /home/user/public_php/doc.php3이 된다.

user_dir 확장은 doc_root 설정과 관련없이 발생하므로, 여러분은 document root와 user directory 접근 통제를 별도로 할 수 있다.


Case 4: 웹 트리 밖에 PHP parser (PHP parser outside of web tree)

매우 신뢰할수 있는 옵션으로 PHP parser binary를 웹 트리 밖에다 두는 방법이다. 예를 들어 /usr/local/bin 같은 곳에 둔다. 이 옵션의 실질적인 단점은, 모든 PHP 택을 포함하고 있는 파일의 첫번째 라인에 다음과 비슷하게 적어주는 것 뿐이다. :

#!/usr/local/bin/php

또한 파일을 실행 가능으로 만들어 주어야 한다. 즉, 자신의 실행을 위해서 #! shell-escape 메카니즘을 사용하는 Perl이나 sh 혹은 다른 스크립트 언어와 같은 방식으로 다루는 것이다.

이 설정에서 PHP가 PATH_INFOPATH_TRANSLATED정보를 올바르게 다루려면, php parser가 --enable-discard-path 설정 옵션으로 컴파일 되어야 한다.


Apache module

PHP가 아파치의 모듈로 사용될 때는 아파치의 사용자 permission을 계승받는다. (일반적으로 "nobody"로 설정되어 있다.)


II. Language Reference

Table of Contents
5. 기본문법 (Basic syntax)
6. 변수형태 (Types)
7. 변수 (Variables)
8. 상수 (Constants)
9. 표현식 (Expressions)
10. 연산자 (Operators)
11. 제어 구조 (Control Structures)
12. 함수 (Functions)
13. 클래스와 객체 (Classes and Objects)


Chapter 5. 기본 문법(Basic Syntax)


HTML로부터 빠져나오기(Escaping from HTML)

HTML로부터 빠져나와 "PHP code mode"로 들어가는 방법은 다음 4가지가 있다 :

 

Example 5-1. Ways of escaping from HTML

  1 
  2 1.  <? echo ("this is the simplest, an SGML processing instruction\n"); ?>
  3  
  4 2.  <?php echo("if you want to serve XML documents, do like this\n"); ?>
  5 
  6 3.  <script language="php"> 
  7         echo ("some editors (like FrontPage) don't
  8               like processing instructions");
  9     </script>
 10 
 11 4.  <% echo ("You may optionally use ASP-style tags"); %>
 12     <%= $variable; # This is a shortcut for "<%echo .." %>
 13       

첫 번째 방법은 short tags가 enable되어 있어야 사용가능하다. short_tags()를 호출하거나, short_tags run-time 설정에서 가능하고, 컴파일시에 --enable-short-tags 옵션을 주어 컴파일하여 enable할 수도 있다.

네 번째 방법은 ASP-style tags가 enable되어 있어야 사용가능하다. asp_tags run-time 설정에서 가능하고, 컴파일시에 --enable-asp_tags 옵션을 주어 컴파일하여 enable할 수도 있다.

Note: ASP-style tags는 3.0.4부터 지원된다.

닫는 괄호는 newline을 포함한다.


명령 구분 (Instruction separation)

각각의 명령은 C나 Perl과 마찬가지로 구분된다. 각 문장은 ;(세미콜론)으로 종료된다.

PHP의 종료택인 ?>는 문장의 끝이라는 의미도 함께 가지고 있다. 따라서 다음 두 개의 문장은 동일하다.

  1 
  2 <?php
  3     echo "This is a test";
  4 ?>
  5 
  6 <?php echo "This is a test" ?>
  7       

 


주석문 (Comments)

PHP는 'C'와 'C++', Unix shell 형태의 주석문을 제공한다. 예를 들어 :

  1 
  2 <?php
  3     echo "This is a test"; // This is a one-line c++ style comment
  4     /* This is a multi line comment
  5        yet another line of comment */
  6     echo "This is yet another test";
  7     echo "One Final Test"; # This is shell-style style comment
  8 ?>
  9      

"one-line" 주석문은 라인의 끝이나, 현 php 코드 블록의 끝에서 끝난다.

  1 
  2 <h1>This is an <?# echo "simple";?> example.</h1>
  3 <p>The header above will say 'This is an example'.
  4 

'C' 형태의 주석문은 중복해서 사용하지 말아야 한다.

  1 
  2 <?php
  3  /* 
  4     echo "This is a test"; /* 이 주석문은 문제가 된다. */
  5  */
  6 ?>
  7     
    


Chapter 6. 변수 형태 (Types)

PHP는 다음 형태의 type을 지원한다. :

( 역자주 : 내부적으로는 함수와 클래스도 변수로 정의되기는 하지만 이것들은 일반적인 변수로 체크되지 않는다. )

변수타입은 보통 프로그래머가 선택할 필요가 없다. 대신, PHP가 실행중에 변수의 값의 내용에 따라 자동적으로 바꾸어 준다.

만약 여러분이 특정한 변수 타입으로 지정하고 싶다면 변수를 cast 하거나, settype() 함수를 사용한다.

종종 변수들은 실행시 어떤 타입으로 되어 있느냐에 따라 특정한 상황에서 원하는 대로 동작하지 않을 때가 있다. Type Juggling 편을 보면 자세히 알 수 있다.


정수형 (Integers)

정수형은 다음과 같은 형태의 문장으로 지정할 수 있다.

  1 
  2 $a = 1234; # decimal number
  3 $a = -123; # a negative number
  4 $a = 0123; # octal number (equivalent to 83 decimal)
  5 $a = 0x12; # hexadecimal number (equivalent to 18 decimal)
  6      

 


실수형 (Floating point numbers)

실수형("doubles")은 다음과 같은 형태의 문장으로 지정할 수 있다.

  1  
  2 $a = 1.234; $a = 1.2e3;
  3      

 


문자열 (Strings)

문자열은 두 개의 delimiters를 사용해 나타낸다.

문자열이 큰 따옴표(")로 둘러싸이게 표시되면, 다음과 같이 특수 문자들을 포함할 수 있다. C나 Perl에서처럼 백슬래시(\)를 사용하여 특수 기호를 표시하게 된다.

Table 6-1. Escaped characters

sequence

meaning

\n

newline

\r

carriage

\t

horizontal tab

\\

backslash

\$

dollar sign

\"

double-quote

때로는 다른 escape를 사용할 수 있지만, worning이 발생하게 된다.

문자열을 표현하는 또 다른 방법은 큰 따옴표(") 대신 작은 따옴표(')를 사용하는 것이다. 이것은 \\과 \'의 두 개만을 백슬래시 처리하고 나머지는 그냥 둔다. 작은 따옴표를 사용하는 문자열 내에서는 변수를 사용하여 그 값을 출력하는 기능을 사용할 수 없다.

문자열을 선언하는 다른 방법은  here doc 구문("<<<")을 사용하는 것이다. <<< 뒤에 적당한 identifier를 적어주고, 원하는 문자열의 내용을 적은 후에, 앞에 적은 identifier로 문자열을 끝맷으면 된다. 끝맷는 identifier는 해당 라인의 첫번째 칸에서 시작해야 한다.

Example 6-1. Here doc string quoting example

  1 
  2 $str = <<<EOD
  3 Example of string
  4 spanning multiple lines
  5 using heredoc syntax.
  6 EOD;
  7      

Note: Here doc은 PHP 4에서부터 지원된다.

문자열은 '.' (점) 연산자로 연결할 수 있다. '+' (더하기) 연산자는 사용할 수 없다. 자세한 정보는 String operators 부분을 참조하기 바란다.

문자열내의 개개의 문자는, C 언어에서의 문자의 배열로된 문자열처럼 배열에 숫자 인덱스를 통해 접근이 가능하다. 아래 그 예가 있다.

Example 6-2. Some string examples

  1 
  2 <?php
  3 /* Assigning a string. */
  4 $str = "This is a string";
  5 
  6 /* Appending to it. */
  7 $str = $str . " with some more text";
  8 
  9 /* Another way to append, includes an escaped newline. */
 10 $str .= " and a newline at the end.\n";
 11 
 12 /* This string will end up being '<p>Number: 9</p>' */
 13 $num = 9;
 14 $str = "<p>Number: $num</p>";
 15 
 16 /* This one will be '<p>Number: $num</p>' */
 17 $num = 9;
 18 $str = '<p>Number: $num</p>';
 19 
 20 /* Get the first character of a string  */
 21 $str = 'This is a test.';
 22 $first = $str[0];
 23 
 24 /* Get the last character of a string. */
 25 $str = 'This is still a test.';
 26 $last = $str[strlen($str)-1];
 27 ?>	  
 28      

 


문자열 변환 (String conversion)

문자열이 숫자로 다루어질 때, 결과 값과 type은 다음과 같이 결정된다.

만약 문자열 안에 '.' 이나 'e', 'E'의 문자가 있을 경우 그 type은 double이 된다. 그렇지 않다면 정수 값이다

그 값은 문자열의 가능한 부분까지만 사용된다. 문자열이 올바른 숫자 데이터로 시작하지 않으면 그 값은 0이다. 올바른 숫자 데이터는 '+'/'-', '0'-'9','.'과 숫자 뒤의 'e'나 'E' 표시이다.

첫 번째 표현식이 string인 경우, 변수의 type은 첫 번째가 아닌 두 번째 표현식에 의해 결정된다.

  1 
  2 $foo = 1 + "10.5";              // $foo is double (11.5)
  3 $foo = 1 + "-1.3e3";            // $foo is double (-1299)
  4 $foo = 1 + "bob-1.3e3";         // $foo is integer (1)
  5 $foo = 1 + "bob3";              // $foo is integer (1)
  6 $foo = 1 + "10 Small Pigs";     // $foo is integer (11)
  7 $foo = 1 + "10 Little Piggies"; // $foo is integer (11)
  8 $foo = "10.0 pigs " + 1;        // $foo is integer (11)
  9 $foo = "10.0 pigs " + 1.0;      // $foo is double (11)     
 10      

이 변환에 대한 자세한 설명은Unix manual page의 strtod(3)을 보아라.

만약 여러분이 위의 예제를 실제 실험하고자 한다면, 위의 예제를 잘라 붙인 후에, 어떤 일이 일어났는 가를 알기 위해 아래의 줄을 삽입한다.

  1 
  2 echo "\$foo==$foo; type is " . gettype( $foo ) . "<br>\n";
  3       

 


배열 (Arrays)

배열을 실제로 hash tables (associative arrays) 과 indexed arrays (vectors)의 두가지로 동시에 사용된다.


일차원 배열 (Single Dimension Arrays)

PHP는 scalar 배열과 associative 배열의 두 가지를 지원한다. 사실 두 가지의 차이는 없다. 여러분은 list()array() 함수를 사용하여 배열을 만들거나, 각 원소의 값을 정해 주어 배열을 만들 수 있다.

  1  
  2 $a[0] = "abc"; 
  3 $a[1] = "def"; 
  4 $b["foo"] = 13;
  5       

또한 다음과 같이 변수에 값을 더해주는 것만으로 배열을 만들 수도 있다.

  1  
  2 $a[] = "hello"; // $a[2] == "hello"
  3 $a[] = "world"; // $a[3] == "world" 
  4       

배열은 정렬을 원하는 형식에 따라 asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), uksort() 함수들을 이용해 순서대로 정렬할 수 있다.

count() 함수를 사용하면 배열의 원소 개수를 셀 수 있다.

next()prev() 함수를 이용하여 배열의 내용을 탐색할 수 있다. 배열의 내용을 탐색하는 방법으로 each() 함수를 사용할 수도 있다.


다차원 배열 (Multi-Dimensional Arrays)

다차원 배열이라 하더라도 실제로 매우 간단한다. 배열의 각 차원에 대하여 단지 [key]값을 뒤어 붙여주면 된다.

  1  
  2 $a[1]      = $f;               # one dimensional examples
  3 $a["foo"]  = $f;   
  4 
  5 $a[1][0]     = $f;             # two dimensional
  6 $a["foo"][2] = $f;             # (you can mix numeric and associative indices)
  7 $a[3]["bar"] = $f;             # (you can mix numeric and associative indices)
  8 
  9 $a["foo"][4]["bar"][0] = $f;   # four dimensional!
 10       

PHP3에서, 문자열 내에서 다차원 배열의 값을 직접 접근하는 것은 불가능하다. 예를들어 다음과 같은 문장은 원하는 결과를 얻지 못할 것이다.

  1  
  2 $a[3]['bar'] = 'Bob';
  3 echo "This won't work: $a[3][bar]";
  4       

PHP3에서 위의 출력은 won't work: Array[bar] 일 것이다. 원하는 결과를 얻으려면 문자열 연결 연산자(.)를 사용하여야 할 것이다.

  1 
  2 $a[3]['bar'] = 'Bob';
  3 echo "This will work: " . $a[3][bar];
  4       

PHP4에서는 접근하려는 배열식을 중괄호({})로 둘러쌈으로써 이것을 가능하게 할 수도 있다.

  1 
  2 $a[3]['bar'] = 'Bob';
  3 echo "This will work: {$a[3][bar]}";
  4       

여러 가지 방법으로 이 다차원 배열에 값을 넣을 수 있으나, associative 배열에 값을 저장하는 간단한 방법으로 array() 명령을 사용하는 방법이 있다. 우선 다음의 두가지 코드는 일차원 배열에 값을 저장하는 방법으로 결과는 동일하다.

  1  
  2 # Example 1:
  3 
  4 $a["color"]	= "red";
  5 $a["taste"]	= "sweet";
  6 $a["shape"]	= "round";
  7 $a["name"]	= "apple";
  8 $a[3]		= 4;
  9 
 10 # Example 2:
 11 $a = array(
 12      "color" => "red",
 13      "taste" => "sweet",
 14      "shape" => "round",
 15      "name"  => "apple",
 16      3       => 4
 17 );
 18       

array() 함수는 다차원 배열에 대해서도 다음과 같이 사용할 수 있다. :

  1  
  2 <?
  3 $a = array(
  4      "apple"  => array(
  5           "color"  => "red",
  6           "taste"  => "sweet",
  7           "shape"  => "round"
  8      ),
  9      "orange"  => array(
 10           "color"  => "orange",
 11           "taste"  => "tart",
 12           "shape"  => "round"
 13      ),
 14      "banana"  => array(
 15           "color"  => "yellow",
 16           "taste"  => "paste-y",
 17           "shape"  => "banana-shaped"
 18      )
 19 );
 20 
 21 echo $a["apple"]["taste"];    # will output "sweet"
 22 ?>
 23       
 


객체 (Objects)


객체 초기화 (Object Initialization)

객체(Object)를 초기화하는 방법은 new 명령을 사용하여 object를 변수에 인스턴스 시키는 것이다.

  1 
  2 class foo {
  3     function do_foo () { 
  4         echo "Doing foo."; 
  5     }
  6 }
  7 
  8 $bar = new foo;
  9 $bar->do_foo();
 10       
 


Type 전환 (Type juggling)

PHP는 변수 선언에 있어서 명확한 정의를 할 필요도 없고 지원하지도 않는다. 변수의 형식은 변수가 사용되는 문장 속에서 결정된다. 다른 말로 하면, 만약 여러분이 var이라는 변수에 문자열 값을 할당하면 var는 문자열 변수가 되는 것이고, 정수 값을 할당하면 정수 변수가 되는 것이다.

PHP의 자동 형 변환 예는 '+' 연산에서 찾을 수 있다. 어떤 한 피 연산자가 double이면 나머지 모든 피연산자의 형도 double로 바뀌어 결과도 double형이 된다. 만약 피연산자들이 정수형이면 결과도 정수형이다. 여기서 중요한 것은 피연산자 자신의 형은 바뀌지 않는다는 것이다.

  1 
  2 $foo = "0";  // $foo is string (ASCII 48)
  3 $foo++;      // $foo is the string "1" (ASCII 49)
  4 $foo += 1;   // $foo is now an integer (2)
  5 $foo = $foo + 1.3;  // $foo is now a double (3.3)
  6 $foo = 5 + "10 Little Piggies"; // $foo is integer (15)
  7 $foo = 5 + "10 Small Pigs";     // $foo is integer (15)
  8      

마지막 두 개의 예가 의아한 사람은 String conversion을 보기 바란다.

만약 변수를 어떤 특정한 type으로 지정하여 계산되게 하고 싶다면, Type casting 편을 보기 바란다. 만약 여러분이 변수의 type을 바꾸고 싶다면 settype().을 보기 바란다.

만약 여러분이 위의 예제를 실제 실험하고자 한다면, 위의 예제를 잘라 붙인 후에, 어떤 일이 일어났는 가를 알기 위해 아래의 줄을 삽입한다.

  1 
  2 echo "\$foo==$foo; type is " . gettype( $foo ) . "<br>\n";
  3      

Note: 배열로의 자동 변환은 현재 정의되어 있지 않다.

  1 
  2 $a = 1;       // $a is an integer
  3 $a[0] = "f";  // $a becomes an array, with $a[0] holding "f"
  4       

위의 예에서는 $a의 결과가 첫 번째 요소로 'f'를 가지는 배열이 될 것이라고 알 수 있다. 하지만 다음을 보자. :

  1 
  2 $a = "1";     // $a is a string
  3 $a[0] = "f";  // What about string offsets? What happens?
  4       

PHP가 문자열내의 문자를 indexing해서 접근하는 것이 가능하므로 위의 예제는 $a의 문자열의 첫 번째 문자를 "f"로 하라는 것인지, $a를 "f"라는 문자열을 첫 번째 원소로 가진 배열로 만들라는 것인지 알 수 없다.

이런 이유에서 PHP 3.0.12 와 PHP 4.0b3-RC4에서는 이 부분에서의 자동 변환은 정의되어 있지 않다. 이 문제의 해결은 현재 논의중이다.


Type casting

PHP의 Type casting은 C에서와 같은 방법으로 한다 : 변환하려는 변수 앞에 원하는 type 이름을 괄호 안에 써주면 된다.

  1 
  2 $foo = 10;   // $foo is an integer
  3 $bar = (double) $foo;   // $bar is a double
  4       

다음과 같은 변환이 가능하다. :

탭과 공백은 괄호안에서는 무시된다. 즉 다음 두 개의 문장은 동일하다. :

  1 
  2 $foo = (int) $bar;
  3 $foo = ( int ) $bar;
  4       

특정 타입간의 형변환은 그 결과를 명확하게 알 수 없는 경우가 있다. 다음과 같은 내용들을 알아두도록 하자.

스칼라값이나 문자열을 배열로 형 변환하면, 그 값은 해당 배열의 첫 번째 원소의 값이 된다.

  1 
  2 $var = 'ciao';
  3 $arr = (array) $var;
  4 echo $arr[0];  // outputs 'ciao'  
  5       

스칼라값이나 문자열을 객체로 형 변환하면, 그 값은 해당 객체의 'scalar'라는 속성의 값이 된다.

  1 
  2 $var = 'ciao';
  3 $obj = (object) $var;
  4 echo $obj->scalar;  // outputs 'ciao'
  5       

 


Chapter 7. 변수 (Variables)


미리 정의된 변수 (Predefined variables)

PHP는 모든 스크립트에 그것이 실행 될 때 다수의 미리 정의된 변수들을 제공한다. 이 변수들중 서버의 종류나 버전, 기타 다른 요인으로인해 달라지는 많은 변수들이 이곳에 문서화 되지 않았다. 또한 이 변수들중 많은 것이 PHP가 command-line으로 동작할 때는 사용할 수 없다.

이런 여러 요인들이 있지만 이곳에서는 가장 일반적인 환경인 Apache (1.3.6)에서 모듈로 PHP3를 설치한 환경에서의 미리 정의된 변수들을 살펴보도록 하자.

여러분이 사용하는 시스템의 모든 미리 정의된 변수들을 보려면 phpinfo() 함수를 사용하도록하자. (이 함수는 다른 여러 유용한 정보도 알려준다.)

Note: 이 목록은 완전하지 않다. (완벽할 생각도 없다.) 이 목록은 단순히 여러분의 스크립트에서 어떤 종류의 미리 정의된 변수들이 사용될 수 있는가의 예시일 뿐이다.

Apache variables

이 변수들은 Apache 웹서버로부터 생성된 것이다. 만약 여러분이 다른 웹서버를 사용하고 있다면 이와 동일한 변수들이 생성된다고 보장할 수 없다. 아마도 일부는 없어지고, 여기에 있는 변수들이 새로 생길 것이다. 여기에 있는 변수중 다수는 CGI 1.1 specification에서 나온 것이고, 그 내용대로 사용된다.

이곳의 변수중 PHP가 command line으로 동작할 경우 사용될 수 있는 변수는 거의 없다.

GATEWAY_INTERFACE
서버가 사용하고 있는 CGI specification의 revision. 예: 'CGI/1.1'.
 
SERVER_NAME
현재 스크립트가 실행되고 있는 호스트의 이름. 만약 스크립트가 가상 호스트에서 실행되고 있다면, 이 값은 가상 호스트로 정의된 값이 될 것이다.
 
SERVER_SOFTWARE
요구에대한 대답의 헤더에 사용할 서버 identification 문자열
 
SERVER_PROTOCOL
페이지가 요구되어질 때 사용한 프로토콜의 이름과 리비젼. 예: 'HTTP/1.0';
 
REQUEST_METHOD
해당 페이지를 요구할 때 사용한 방법(method). 예: 'GET', 'HEAD', 'POST', 'PUT'.
 
QUERY_STRING
해당 페이지를 접근할 때 사용된 query string.
 
DOCUMENT_ROOT
현재 스크립트가 샐행중인 document root 디렉토리. 서버의 설정 파일에 정의되어 있다.
 
HTTP_ACCEPT

Contents of the Accept: header from the current request, if there is one.

HTTP_ACCEPT_CHARSET

Contents of the Accept-Charset: header from the current request, if there is one. Example: 'iso-8859-1,*,utf-8'.

HTTP_ENCODING

Contents of the Accept-Encoding: header from the current request, if there is one. Example: 'gzip'.

HTTP_ACCEPT_LANGUAGE

Contents of the Accept-Language: header from the current request, if there is one. Example: 'en'.

HTTP_CONNECTION

Contents of the Connection: header from the current request, if there is one. Example: 'Keep-Alive'.

HTTP_HOST

Contents of the Host: header from the current request, if there is one.

HTTP_REFERER

The address of the page (if any) which referred the browser to the current page. This is set by the user's browser; not all browsers will set this.

HTTP_USER_AGENT

Contents of the User_Agent: header from the current request, if there is one. This is a string denoting the browser software being used to view the current page; i.e. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Among other things, you can use this value with get_browser() to tailor your page's functionality to the capabilities of the user's browser.

REMOTE_ADDR

The IP address from which the user is viewing the current page.

REMOTE_PORT

The port being used on the user's machine to communicate with the web server.

SCRIPT_FILENAME

The absolute pathname of the currently executing script.

SERVER_ADMIN

The value given to the SERVER_ADMIN (for Apache) directive in the web server configuration file. If the script is running on a virtual host, this will be the value defined for that virtual host.

SERVER_PORT

The port on the server machine being used by the web server for communication. For default setups, this will be '80'; using SSL, for instance, will change this to whatever your defined secure HTTP port is.

SERVER_SIGNATURE

String containing the server version and virtual host name which are added to server-generated pages, if enabled.

PATH_TRANSLATED

Filesystem- (not document root-) based path to the current script, after the server has done any virtual-to-real mapping.

SCRIPT_NAME

Contains the current script's path. This is useful for pages which need to point to themselves.

REQUEST_URI

The URI which was given in order to access this page; for instance, '/index.html'.

Environment variables

These variables are imported into PHP's global namespace from the environment under which the PHP parser is running. Many are provided by the shell under which PHP is running and different systems are likely running different kinds of shells, a definitive list is impossible. Please see your shell's documentation for a list of defined environment variables.

Other environment variables include the CGI variables, placed there regardless of whether PHP is running as a server module or CGI processor.

PHP variables

These variables are created by PHP itself.

argv

Array of arguments passed to the script. When the script is run on the command line, this gives C-style access to the command line parameters. When called via the GET method, this will contain the query string.

argc

Contains the number of command line parameters passed to the script (if run on the command line).

PHP_SELF

The filename of the currently executing script, relative to the document root. If PHP is running as a command-line processor, this variable is not available.

HTTP_COOKIE_VARS

An associative array of variables passed to the current script via HTTP cookies. Only available if variable tracking has been turned on via either the track_vars configuration directive or the <?php_track_vars?> directive.

HTTP_GET_VARS

An associative array of variables passed to the current script via the HTTP GET method. Only available if variable tracking has been turned on via either the track_vars configuration directive or the <?php_track_vars?> directive.

HTTP_POST_VARS

An associative array of variables passed to the current script via the HTTP POST method. Only available if variable tracking has been turned on via either the track_vars configuration directive or the <?php_track_vars?> directive.


변수 사용 범위 (Variable Scope)

변수가 사용가능한 곳은 그 변수가 선언된 곳 안에서 만이다. PHP 변수의 대부분은 한 개의 범위(single scope)만을 가지고 있다. 이 범위는 include나 require 파일에도 동일하게 적용된다. 예를들어 :

  1 
  2 $a = 1;
  3 include "b.inc";
  4     

위에서 $a변수는 b,inc 스크립트에서도 사용할 수 있다.

기본적으로 함수 안에서 선언된 것은 함수 안에서만 사용되는 지역 변수이다. 또한 함수 안에서 사용되는 함수들은 기본적으로 지역 변수라고 가정하고 찾게 된다. 예를 들어:

  1  
  2 $a = 1; /* global scope */ 
  3 
  4 Function Test () { 
  5     echo $a; /* reference to local scope variable */ 
  6 } 
  7 
  8 Test ();
  9     

이 스크립트는 함수 안의 $a 변수를 지역변수로 가정하였고, 지역변수 $a에는 아무 값도 대입되지 않았기 때문에 아무런 출력도 나타나지 않는다. 이것은 C와는 약간 차이가 나는 부분이다. PHP에서 전역변수를 사용하려면 사용하고 싶은 전역 변수를 함수 안에 global 선언을 해 주어야 한다. 예를 들어 :

  1 
  2 $a = 1;
  3 $b = 2;
  4 
  5 Function Sum () {
  6     global $a, $b;
  7 
  8     $b = $a + $b;
  9 } 
 10 
 11 Sum ();
 12 echo $b;
 13     

위의 스크립트는 "3"을 출력할 것이다. 함수 내에서 $a and $b를 global로 선언했으므로, 이 함수내의 $a, $b는 전역 변수를 참조하게 된다. 함수 내에서 다룰 수 있는 전역변수의 개수에는 제한이 없다.

전역 변수를 참조하는 두 번째 방법은 PHP에서 특별히 정의하고 있는 $GLOBALS라는 배열을 사용하는 것이다. 위의 예를 다음과 같이 바꿔 쓸 수 있다. :

  1 
  2 $a = 1;
  3 $b = 2;
  4 
  5 Function Sum () {
  6     global $a, $b;
  7 
  8     $b = $a + $b;
  9 } 
 10 
 11 Sum ();
 12 echo $b;
 13     

$GLOBALS 배열은 변수이름이 Key가 되고, 그 변수의 내용이 값이 되는 원소를 가진 associative 배열이다.

변수 범위에서 또 다른 중요한 것은 정적 변수(static variable)이다. 정적 변수는 지역 함수 내에서만 존재하지만 지역 함수가 종료되어도 그 값을 읽어버리지 않고 가지고 있다. 다음 예를 보자 :

  1 
  2 Function Test () {
  3     $a = 0;
  4     echo $a;
  5     $a++;
  6 }
  7     

위의 함수는 Test()를 부를 때 마다 $a가 0으로 대입되므로 0을 출력한다.

  1 
  2 Function Test () {
  3     static $a = 0;
  4     echo $a;
  5     $a++;
  6 }
  7     

위의 함수는 Test()를 부를 때마다 처음에는 0, 다음에는 1, 그 다음에는 2하는 식으로 하나씩 증가된 수를 출력해 준다. 즉, $a의 값이 보존되는 것이다.

또한 정적 변수는 다음과 같이 recursion에서 반드시 필요하다. 재귀적인 함수는 자기 자신의 함수를 호출하는 것을 말한다. 재귀적인 함수를 사용할 때는 무한 루프에 빠질 수 있기 때문에 매우 주의를 요한다. 따라서 여러분은 재귀 호출을 끝내는 적절한 방법을 마련해 두어야 한다. 다음의 간단한 예제는 10번의 재귀적 호출을 한다. :

  1 
  2 Function Test () {
  3     static $a = 0;
  4     echo $a;
  5     $a++;
  6 }
  7     

 


가변 변수 (Variable variables)

가끔 변수의 이름을 변경할 수 있다면 편리하다고 느낄 때가 있다. 이곳에서는 변수의 이름을 바꾸어 사용하는 방법을 알아보자. 보통의 변수 선언은 다음과 같다. :

  1 
  2 $a = "hello";
  3     

여기서 이 가변 변수은 변수의 값을 가질 수도 있고, 또한 이 값을 변수의 이름으로 다룰 수도 있다. 위의 예에서 hello는 $$를 앞에 붙이면 변수 이름으로 사용할 수 있는 것이다. 예 :

  1 
  2 $$a = "world";
  3     

이렇게 하면 PHP의 symbol tree에는 "hello"라는 값을 가지는 $a와 "world"라는 값을 가지는 $hello의 두 개의 변수가 생기게 된다. 그러므로 다음과 같은 문장은 :

  1 
  2 echo "$a ${$a}";
  3     

다음 문장과 똑 같은 출력을 나타내게 된다.:

  1 
  2 echo "$a $hello";
  3     

ie. 둘의 출력: hello world.

가변 변수를 배열과 함께 사용하려면, 한가지 모호성 문제를 해결해야 한다. 그것은, 만약 여러분이 $$a[1]이라고 썼으면, $a[1]을 하나의 변수로 볼 것인지, 아니면 $$a를 변수로 보고 그 변수에 [1]의 인덱스를 해 줄 것인가 하는 문제이다. 다음과 같이 하여 모호성을 해결하자. 전자의 경우 ${$a[1]}라고 쓰고, 후자의 경우는 ${$a}[1]라고 쓰면 된다. ( 역자주: 가변 변수를 나타낼 때는 항상 { }로 둘러 싸는 것이 보기 좋고 오류도 없앨 수 있다.)


PHP 밖에서 온 변수들 (Variables from outside PHP)

HTML Forms (GET and POST)

폼이 PHP 스크립트로 submit되면 폼에 있는 모든 내용들이 자동적으로 만들어진 PHP 변수로 들어온다. 다음의 폼을 보자 :

Example 7-1. Simple form variable

  1 
  2 <form action="foo.php3" method="post">
  3     Name: <input type="text" name="name"><br>
  4     <input type="submit">
  5 </form>
  6       

위의 폼이 submit되면 PHP는 $name변수를 만들고, 이 변수에 폼의 Name: 필드에 입력된 모든 내용을 저장한다.

PHP는 폼에 1차원 배열 변수도 사용할 수 있다. 예를들어, 여러분은 여러 변수를 함께 사용하는 그룹 관련 변수(group related variables)나 multi select 변수의 내용들을 검색할 수 있다. :

Example 7-2. More complex form variables

  1 
  2 <form action="array.php" method="post">
  3     Name: <input type="text" name="personal[name]"><br>
  4     Email: <input type="text" name="personal[email]"><br>
  5     Beer: <br>
  6     <select multiple name="beer[]">
  7         <option value="warthog">Warthog
  8         <option value="guinness">Guinness
  9         <option value="stuttgarter">Stuttgarter Schwabenbräu
 10         </select>
 11     <input type="submit">
 12 </form>
 13       

만약 track_vars 설정이 on 되어 있거나, <?php_track_vars?> 지시자가 설정되어 있다면, POST나 GET으로 전송되는 모든 변수들과 그 내용은 전역 배열 변수인 $HTTP_POST_VARS과 $HTTP_GET_VARS에서 찾을 수 있다.


IMAGE SUBMIT의 변수 이름

폼은 submit할 때 일반적으로 사용하는 submit 버튼대신 다음과 같이 그림을 사용할 수도 있다. :

  1 
  2 <input type=image src="image.gif" name="sub">

사용자가 image를 클릭하면, 폼은 sub_x와 sub_y의 두 개의 변수가 추가되어 서버에 전송된다. 이 두 변수는 이미지에서 사용자가 click한 위치 정보를 담고 있다. 일부 브라우저에서는 밑줄(_)대신 마침표(.)를 사용하는 경우도 있는데, PHP는 이런 경우 자동적을 마침표(.)를 밑줄(_)로 바꿔준다.


HTTP Cookies

PHP는 HTTP 쿠키를 Netscape's Spec의 정의에 따라 제공한다. Cookie 메카니즘은 트래킹이나 사용자 식별 등을 위해 원격 browser에 저장된 데이터를 돌려 받는 과정을 말한다. 여러분은 cookie를 설정하기 위해 SetCookie() 함수를 사용할 수 있다. Cookie는 HTTP 헤더의 한 부분이므로, SetCookie() 함수는 브라우저로 보내는 어떤 데이터보다도 앞에 사용해야 한다. 이 제약은 Header() 함수와 같은 제약으로 보면 된다. 당신이 보내준 모든 cookie는 자동적으로 GET이나 POST 방식 데이터와 같은 PHP 변수로 변환된다.

만약 여러분이 동일한 cookie에 여러 값을 저장하고 싶다면 Cookie이름에 []를 더하면 된다. 예를 들어 :

  1 
  2 SetCookie ("MyCookie[]", "Testing", time()+3600);
  3      

쿠키는 새로 설정하면 path나 도메인이 다르지 않는 한 이전의 쿠키를 덮어쓰게 된다. 그러므로 쇼핑 카트 같은 응용 프로그램에서는 카운터를 유지하고, 이것을 기준으로 Cookie를 사용하는 것이 좋다. 예 :

Example 7-3. SetCookie Example

  1 
  2 $Count++;
  3 SetCookie ("Count", $Count, time()+3600);
  4 SetCookie ("Cart[$Count]", $item, time()+3600);
  5      

 


환경 변수 (Environment variables)

PHP는 자동적으로 환경 변수들을 일반적인 PHP 변수로 만든다.

  1 
  2 echo $HOME;  /* Shows the HOME environment variable, if set. */
  3       

GET, POST and Cookie 메카니즘을 통해서 정보가 들어 온 정보로부터 자동적으로 PHP 변수가 생기므로, 이 방법은 때때로 올바른 버전을 확인하기 위해 환경으로부터 변수를 읽어 들이기에 가장 좋다. 이를 위해 getenv() 함수를 사용할 수도 있다. 여러분은 환경 변수를 설정하기 위해 putenv() 함수를 사용할 수도 있다.


외부 변수명에 있는 '.' (Dots in incoming variable names)

일반적으로 PHP는 변수를 스크립트로 가져올 때 변수명을 바꾸지 않는다. 그러나, PHP의 변수명에는 '.' (점)을 사용할 수 없다. 다음과 같은 경우를 보자. :
  1 
  2 $varname.ext;  /* invalid variable name */
  3      

위의 경우 파서는 $varname이라는 변수와, 연결 연산자, 'ext'(따옴표가 없는 경우 그것이 어떤 알려진 키나 예약어가 아니면 문자열로 취급된다.)로 해석한다. 따라서 이것은 우리가 원하는 결과가 아니다.

위와 같은 이유로 PHP는 외부에서 불러들인 변수의 이름에 '.'이 있으면 '_'(밑줄)로 바꾸어 읽어들인다.


변수의 Type 판단 (Determining variable types)

PHP가 변수의 type을 정하고 (일반적으로) 필요한 경우에는 그 type을 바꾸므로, 특정 시점에 그 변수 어떤 type인지는 쉽게 알 수 없다. PHP는 변수의 type을 알아보기 위해 여러개의 함수를 가지고 있다. gettype(), is_long(), is_double(), is_string(), is_array(), and is_object()가 그것들이다.


Chapter 8. 상수(Constants)

PHP는 약간의 기본적인 상수들을 제공하고, 실행시 상수를 설정할 수 있는 메카니즘을 지원한다. 상수는 변수와 비슷하다. 그러나 define()함수를 사용하여 선언한다는 것과 나중에 다른 값으로 바꿀 수 없다는 점이 차이가 있다.

미리 지정된 상수는 다음과 같다.

__FILE__
현재 처리중인 스크립트의 파일명. 현재 파일이 include나 require로 포함된 파일이라면, include함수등을 호출한 부모 파일이 아닌, 포함된 파일의 이름을 가진다.
 
__LINE__
현재 처리중인 명령의 스크립트내에서의 라인 번호. 현재 파일이 include나 require로 포함된 파일이라면, include함수등을 호출한 부모 파일이 아닌, 포함된 파일내에서의 라인 번호를 가진다.
 
PHP_VERSION
현재 사용중인 PHP 파서의 버전. (예 : '3.0.8-dev')
 
PHP_OS
PHP 파서가 실행되고 있응 OS의 이름. (예 : 'Linux')
 
TRUE
참(TRUE) 값
 
FALSE
거짓(FALSE) 값
 
E_ERROR
문법 오류가 아닌 복구가 불가능한 에러를 표시한다.
 
E_WARNING
PHP가 어떤 계속 수행 가능한 오류를 감지 했음을 표시한다. 예를들어 ereg()에 regexp가 잘못된 경우 등이다.
 
E_PARSE
파서가 스크립트 파일에서 문법적으로 잘못된 명령을 만난 경우이다. 복구는 불가능하다.
 
E_NOTICE
에러는 아니지만 어떤 알려질 사항이 있음을 나타낸다. 실행은 계속된다. 예를들어 hash 인덱스에 따옴표가 없는 문자열이 사용되었다던지, 이전에 선언되지 않은 변수의 값을 읽는다던지 하는 경우이다.

E_* 상수는 대개 error_reporting() 함수를 사용하여 reporting 레벨을 정할 때 흔히 사용된다.

또한 여러분은 define()함수를 사용하여 추가적인 상수를 정의할 수 있다.

주의할 점은 상수는 C에서의 macro 값은 것이 아니다. 단지 scalar 값을 가질 수 있을 뿐이다.

Example 8-1. Defining Constants

  1 
  2 <?php
  3 define("CONSTANT", "Hello world.");
  4 echo CONSTANT; // outputs "Hello world."
  5 ?>
  6      

Example 8-2. Using __FILE__ and __LINE__

  1 
  2 <?php
  3 function report_error($file, $line, $message) {
  4     echo "An error occured in $file on line $line: $message.";
  5 }
  6 
  7 report_error(__FILE__,__LINE__, "Something went wrong!");
  8 ?>
  9      

 


Chapter 9. 표현식 (Expressions)

표현식은 PHP에서 매우 중요한 내용이다. PHP에서 여러분이 작성하는 거의 모든 것은 표현식이다. 간단히 표현식의 정의를 엄밀하게 말한다면 "값을 가지고 있는 모든 것"("anything that has a value")이다.

간단한 예제로 "$a = 5"와 같은 것이 있다. 이것은 5라는 값을 $a라는 변수에 대입하는 문장이다. 여기서 5라는 표현식은 5의 값이라는 의미가 된다. 위의 문장 다음에 "$b = $a"라는 문장이 있다면 여기서 $a라는 표현식은 그 변수가 가진 5라는 값을 표현한다.

조금 복잡한 경우는 함수이다. 다음 함수를 보자. :

  1 
  2 function foo () {
  3     return 5;
  4 }
  5      

$c = 5라는 문장에서 foo()는 5를 돌려줄 것이기 때문에 'foo()'라는 표현식은 5를 표현한다고 말할 수 있다.

PHP는 정수값(integer values), 실수값(floating point values), 문자열(string values)의 3가지 스칼라 type을 가지고 있다. (스칼라 값이란 더 이상 작은 값으로 쪼개질 수 없는 값을 말한다.) 또한 PHP는 배열(array)과 객체(object)의 2가지 혼합(composite, non-scalar) type을 지원한다. 이 type들은 변수에 값을 할당할 수 있고, 함수에 의해 값을 돌려줄 수 있다.

여기까지는 PHP/FI 2 사용자들은 아무것도 바뀌지 않았다고 느낄 것이다. PHP는 거의 모든 것이 표현식으로 표현된다는 점에서, 표현 중심 언어 (expression-oriented language)라고 불릴 수 있다. 표현 중심의 좋은 예는 대입문이다. PHP에서는 C와 같이 대입문도 하나의 표현식으로 본다. 따라서 '$a=5; $b=5;'는 '$a = ($b=5);' 혹은 '$a = $b = 5;'로 표현 가능하다.

표현 중심의 다른 좋은 예로는 ++와 --이다. In PHP/FI 2에서는 '$a++'와 같은 문장은 아무 값도 가지지 않았다. 즉, 표현식이 아니었다. 따라서 이 값을 다른 곳에 대입하는 것은 불가능했다. 그러나 PHP 3에서는 이것이 가능해졌다. C에서와 같이 ++/--를 사용하는 방법에는 앞에 붙이는 것과 뒤에 붙이는 것 두가지가 있다. 둘 모두 변수의 값이 증가된다는 점은 같으나, '++$variable'은 그 변수의 증가된 값이 표현식의 값이 되고, '$variable++'는 변수의 증가되기 전의 값이 표현식의 값이 된다.

비교 표현식은 0이나 1의 값을 가진다. 0은 부정(FALSE)을 1은 긍정(TRUE)를 나타낸다. PHP는 > (bigger than), >= (bigger than or equal to), == (equal),< (smaller than), <= (smaller than or equal to)를 지원한다.

마지막 예는 결합된 연산-대입 표현식(combined operator-assignment expression)이다. 뭐 복잡한 얘기는 아니고 '$a = $a + 3'은 표현식을 '$a += 3'으로 표현할 수 있는 것이다. -=, *=, /=, .= 등도 사용할 수 있다.

다음예를 보면 도움이 될 것이다. :

 

  1 
  2 function double($i) {
  3     return $i*2;
  4 }
  5 $b = $a = 5;          /* $a와 $b 에 5 대입 */
  6 $c = $a++;            /* post-increment, $c 에는 $a의 원래 값인 5가 대입되고 $a는 6이 된다 */
  7 $e = $d = ++$b;       /* pre-increment, $d와 $e는 증가된 $b의 값 6이 대입된다. */
  8  
  9 /* 여기부터 $d와 $e의 값은 6이다. */
 10 $f = double($d++);    /* $f는 $d가 증가되기 전의 값인 6을 두 배한 값을 가진다. 2*6 = 12 */
 11 $g = double($++e);    /* $g는 $e가 증가된 후의 값인 7을 두배한값을 가진다. 2*7 = 14 */
 12 $h = $g += 10;        /* $g는 14에 10을 더해 24의 값을 가진 후 그 값을 $h에 대입한다. 둘다 24 */
 13 

그러나, 하나의 표현식이 하나의 문장은 아니다. 표현식이 세미콜론 ';'으로 끝나야 하나의 문장이 되는 것이다. 즉 '$b=$a=5;'에서 $a=5는 표현식이지만 문장은 아니다.

PHP에서 참/거짓의 판단은 Perl과 비슷하다. 0이 아닌 숫자는 모두 TRUE이고, 0은 FALSE이다. 빈 문자열이나 문자열 "0"은 FALSE이다. 다른 모든 문자열은 TRUE이다. 배열이나 객체는 원소가 하나도 없다면 FALSE를 의미하고, 나머지의 경우는 TRUE이다.

앞으로 이 매뉴얼에서 'expr'이라고 쓰여진 부분은 PHP의 올바른 표현식이라는 의미이다.


Chapter 10. 연산자 (Operators)


산술 연산자 (Arithmetic Operators)

학교에서 배운 산술 연산(가감승제)을 기억하는가? 이 산술 연산자는 그것들처럼 동작한다.

Table 10-1. Arithmetic Operators

이름

결과

$a + $b

덧셈(Addition)

$a와 $b의 합.

$a - $b

뺄셈(Subtraction)

$a에서 $b를 뺀 값.

$a * $b

곱셈(Multiplication)

$a와 $b의 곱.

$a / $b

나눗셈(Division)

$a에서 $b를 나눈 값(혹 은 몫).

$a % $b

나머지(Modulus)

$a에서 $b를 나눈 나머지.


대입 연산자 (Assignment Operators)

기본 대입 연산자는 "="이다. 이 연산자를 처음 보았을 때는 "같다"라는 연산자로 생각하기 쉽지만 전혀 아니다. 이것의 의미는 오른쪽의 표현식을 계산하여 그 값을 왼쪽에 있는 피연산자의 값으로 설정한다는 의미이다. (이것을 "gets set to"라고 한다.)

대입 연산자의 값은 왼쪽으로 대입된 값이다. 즉, "$a = 3"의 값은 3이 된다. 이것은 여러분에게 약간의 트릭이 가능하도록한다.

  1 
  2 $a = ($b = 4) + 5; // $a는 9, $b는 4의 값을 가진다.
  3 

기본적인 대입 연산자 외에 모든 Bit 단위 연산자, 산술 연산자와 결합한 복합 대입 연산자도 있다. 결합된 연산자는 표현식에서 해당 연산으로 사용되고, 그 연산 값을 왼쪽에 있는 피연산자에 대입한다. 예를 들어 :

  1 
  2 $a = 3;
  3 $a += 5; // $a는 8이다. $a = $a + 5; 와 동일하다.
  4 $b = "Hello ";
  5 $b .= "There!"; // $b는 "Hello There!"가 된다. $b = $b . "There!";와 같다.
  6 

 


Bit 단위 연산자 (Bitwise Operators)

비트 단위 연산자는 정수의 개별 비트의 값을 on, off 할 수 있다.

Table 10-2. Bitwise Operators

example

name

result

$a & $b

And

$a와 $b가 모두 1인 비트만 1이 된다.

$a | $b

Or

$a와 $b중 하나라도 1인 비트는 1이 된다.

$a ^ $b

Xor

$a와 $b중 하나는 1이고, 다른 하나는 0인 비트만 1이되고, 나머지는 0이 된다.

~ $a

Not

$a에서 1인 비트는 0으로, 0인 비트는 1로 된다.

$a << $b

Shift left

$a의 비트들을 $b step 만큼 왼쪽으로 shift 한다. (한 step은 2를 한 번 곱하는 만큼의 효과가 있다.)

$a >> $b

Shift right

$a의 비트들을 $b step 만큼 오른으로 shift 한다. (한 step은 2를 한 번 나누는 만큼의 효과가 있다.)


비교 연산자 (Comparison Operators)

비교 연산자는 이름에서 알 수 있듯이 두 개의 값을 비교하는 연산자이다.

Table 10-4. Comparson Operators

example

name

result

$a == $b

Equal

$a와 $b가 같으면 true.

$a === $b

Identical

$a와 $b가 같으면 true. $a와 $b의 type까지 동일해야 한다. (PHP4 only)

$a != $b

Not equal

$a와 $b가 다르면 true.

$a < $b

Less than

$a가 $b보다 작으면 true.

$a > $b

Greater than

$a가 $b보다 크면 true.

$a <= $b

Less than or equal to

$a가 $b보다 작거나 같으면 true.

$a >= $b

Greater than or equal to

$a가 $b보다 크거나 같으면 true.

또다른 조건 연산자로 C나 다른 언어에 있는 "?:" 연산자가 있다.

  1 
  2 (expr1) ? (expr2) : (expr3);
  3 

이 표현식은 expr1의 결과가  참여면 expr2를 반환하고, 거짓이면 expr3를 반환한다.


오류 제어 연산자 (Error control Operators)

PHP는 @(at 표시)이라는 한 개의 오류 제어 연산자를 제공한다. PHP의 표현식 앞에 이 표시가 붙으면, 해당 표현식에서 발생한 모든 에러 메시지가 무시된다.

만약 track_errors 기능이 활성화 되어 있다면, 해당 표현식에서 발생한 모든 에러 메시지는 $php_errormsg 라는 전역 변수에 저장될 것이다. 이 변수의 값은 매번 에러가 발생할 때마다 새로 설정된다. 따라서 만약 여러분이 이 변수를 사용하려면 에러가 발생한 직후에 최대한 빨리 사용하여야 한다.

  1 
  2 <?php
  3 /* Intentional SQL error (extra quote): */
  4 $res = @mysql_query( "select name, code from 'namelist" ) or
  5    die( "Query failed: error was '$php_errormsg'" );
  6 ?>
  7      

See also error_reporting().


실행 연산자 (Execution Operators)

PHP는 한 개의 실행 연산자를 제공한다. (``) 일반 작은 따옴표가 아님을 주의하자! PHP는 이 사이에 있는 명령을 shell 명령어로 실행하고 그 결과를 반환한다. (실행 결과를 단순히 출력하는 것이 아니고, 변환하여 변수에 저장할 수도 있다.)

  1 
  2 $output = `ls -al`;
  3 echo "<pre>$output</pre>";
  4 	 

See also system(), passthru(), exec(), popen(), and escapeshellcmd().


증가/감소 연산자 (Incrementing/Decrementing Operators)

PHP는 C 형태의 앞, 뒤에 붙는 증가나 감소 연산자를 제공한다.

Table 10-4. Increment/decrement Operators

example name effect
++$a Pre-increment $a 를 1 증가시킨 후, $a를 반환한다.
$a++ Post-increment $a를 반환한 후,$a 를 1 증가시킨다.
--$a Pre-decrement $a 를 1 감가시킨 후, $a를 반환한다.
$a-- Post-decrement $a를 반환한 후,$a 를 1 감소시킨다.

여기 간단한 예제가 있다. :

  1 
  2 <?php
  3 echo "<h3>Postincrement</h3>";
  4 $a = 5;
  5 echo "Should be 5: " . $a++ . "<br>\n";
  6 echo "Should be 6: " . $a . "<br>\n";
  7 
  8 echo "<h3>Preincrement</h3>";
  9 $a = 5;
 10 echo "Should be 6: " . ++$a . "<br>\n";
 11 echo "Should be 6: " . $a . "<br>\n";
 12 
 13 echo "<h3>Postdecrement</h3>";
 14 $a = 5;
 15 echo "Should be 5: " . $a-- . "<br>\n";
 16 echo "Should be 4: " . $a . "<br>\n";
 17 
 18 echo "<h3>Predecrement</h3>";
 19 $a = 5;
 20 echo "Should be 4: " . --$a . "<br>\n";
 21 echo "Should be 4: " . $a . "<br>\n";
 22 ?>	  
 23 	 

 


Logical Operators

Table 10-3. Logical Operators

example

name

result

$a and $b

And

$a와 $b가 모두 true 이면 true

$a or $b

Or

$a와 $b중 하나라도 true이면 true

$a xor $b

Xor

$a와 $b중 하나만 true이어야 true

! $a

Not

$a가 true가 아니면 true

$a && $b

And

$a와 $b가 모두 true 이면 true

$a || $b

Or

$a와 $b중 하나라도 true이면 true

"and"와 "or" 연산자가 두가지의 다른 형태를 가지고 있는 이유는 이 연산자들이 서로 다른 우선순위를 가지고 있기 때문이다. (아래를 보라.)


연산자 우선 순위 (Precedence)

연산자들의 우선순위는 두 개의 표현식중 어느것이 더 단단히 묶여 있는가를 명기한다. 예를들어 1 + 5 * 3은 16을 반환하지 18을 반환하지 않는다. 왜냐하면 곱하기("*")연산자가 더하기("+")연산자보다 우선순위가 높기 때문이다.

다음 표는 연산자의 우선순위를 나타낸다 가장 위에 있는 연산자의 우선순위가 가장 낮다.

Table 10-6. Operator Precedence

Associativity Operators
left ,
left or
left xor
left and
right print
left = += -= *= /= .= %= &= |= ^= ~= <<= >>=
left ? :
left ||
left &&
left |
left ^
left &
non-associative == != ===
non-associative < <= > >=
left << >>
left + - .
left * / %
right ! ~ ++ -- (int) (double) (string) (array) (object) @
right [
non-associative new

 

문자열 연산자 (String Operators)

문자열 연산자에는 두개가 있다. 첫 번째는 오니쪽과 오른쪽의 두 문자열을 연결하는 연결(concatenation) 연산자 (".") 가 있다. 두 번쨰로는 연결 대입 연산자 (".=") 가 있다. 이에 대해서는 대입연산자(Assugnment Operator) 부분을 읽어보자.

  1 
  2 $a = "Hello ";
  3 $b = $a . "World!"; // now $b contains "Hello World!"
  4 
  5 $a = "Hello ";
  6 $a .= "World!"; // now $a contains "Hello World!"
  7      
$a = "Hello ";
$b = $a . "World!"; // now $b = "Hello World!"


Chapter 11. 제어 구조 (Control Structures)

모든 PHP 스크립트는 일련의 구문으로 이루어 진다. 하나의 구문은 대입문이 될 수도 있고, 함수 호출, 반복문, 조건문이 될 수도 있으며 심지어는 아무 내용이 없는 빈 문장일 수도 있다. 한 구문은 일반적으로 세미콜론(;)으로 끝난다. 또한 여러개의 구문을 중괄호({,})를 사용하여 하나의 그룹으로 만들어 사용할 수도 있다. 이 구문-그룹은 그 그룹의 모든 구문들이 하나의 구문인 것처럼 인식된다. 여기서는 여러 가지 구문형태에 대해 알아본다.


if

PHP의 IF문은 C와 비슷하다.

  1 
  2 if (expr)
  3     statement
  4      

expr을 평가하여 TRUE이면 statement를 실행한다. FALSE이면 무시한다.

다음 예제는 $a가 $b보다 크면 "a is bigger than b"를 출력한다.

  1 
  2 if ($a > $b)
  3     print "a is bigger than b";
  4      

여러 문장을 실행시키려면 중괄호( { } )를 사용하여 복문으로 만들면된다. :

  1 
  2 if ($a > $b) {
  3     print "a is bigger than b";
  4     $b = $a;
  5 }
  6      

 


else

ELSE는 IF문의 평가식이 FALSE일 경우 실행하는 문장을 지정한다. :

  1 
  2 if ($a > $b) {
  3     print "a is bigger than b";
  4 } else {
  5     print "a is NOT bigger than b";
  6 }
  7      

 


elseif

ELSEIF는 ELSE와 IF를 합쳐놓은 것과 같다. :

  1 
  2 if ($a > $b) {
  3     print "a is bigger than b";
  4 } elseif ($a == $b) {
  5     print "a is equal to b";
  6 } else {
  7     print "a is smaller than b";
  8 }
  9      

한 IF문에는 여러개의 ELSEIF문이 있을 수 있다. ELSEIF문은 순서대로 평가하여 TRUE인 곳을 실행한다. 즉, 어떤 ELSEIF문이 실행 되려면 IF문의 평가식과 그 앞의 모든 ELSEIF문의 평가식이 FALSE이어야 한다. 이것은 'else if'라고 두 개의 문장으로 써도 된다(문법적인 의미는 약간 다르지만).


제어구조의 다른 표현 (Alternative syntax for control structures)

PHP 3는 중괄호({ })를 쓰는 대신 IF(expr)뒤에 콜론( : )을 찍고, 하나 이상의 문장을 나열한 후에 ENDIF;로 끝내는 방법을 제공한다. 이 방법은 특히 IF문 안에 HTML 블럭을 삽입하는데 유용하게 사용될 수 있다. 다음 예를 보자. :

  1 
  2  <?php if ($a == 5): ?>
  3  A is equal to 5
  4  <?php endif; ?>
  5      

위의 예에서 "A = 5"라는 HTML 블록이 IF문 안에 사용되고 있다. 위의 HTML 블록은 $a가 5일 경우에만 표시된다.

다음과 같이 ELSE와 ELSEIF (expr)도 사용할 수 있다. :

  1 
  2 if ($a == 5):
  3     print "a equals 5";
  4     print "...";
  5 elseif ($a == 6):
  6     print "a equals 6";
  7     print "!!!";
  8 else:
  9     print "a is neither 5 nor 6";
 10 endif;
 11      

 


while

WHILE 루프는 PHP 3의 가장 간단한 형태이다. 이것은 C와 동일하게 작동한다. 기본 형태는 다음과 같다. :

  1 
  2 while (expr) statement
  3      

IF문과 마찬가지로 다음과 같은 문장 형태로 중괄호( { } )를 사용하지 않는 방법도 있다. :.

  1 
  2 while (expr): statement ... endwhile;
  3      

다음두개의 예제는 동일한 예제이다. 1부터 10까지 출력한다.:

  1 
  2 /* example 1 */
  3 
  4 $i = 1;
  5 while ($i <= 10) {
  6     print $i++;  /* the printed value would be
  7                     $i before the increment
  8                     (post-increment) */
  9 }
 10  
 11 /* example 2 */
 12  
 13 $i = 1;
 14 while ($i <= 10):
 15     print $i;
 16     $i++;
 17 endwhile;
 18      

 


do..while

DO..WHILE 루프는 비교식이 앞이 아닌 맨 뒤에 있다는 점을 제외하면 WHILE 루프와 비슷하다. 따라서 WHILE 조건절은 DO 문장이 실행된 후에 평가되므로, DO 이후의 문장은 무조건 한번은 실행된다.

다음과 같은 DO..WHILE 루프에서도 한번은 출력이 된다. :

  1 
  2 $i = 0;
  3 do {
  4    print $i;
  5 } while ($i>0);
  6      

 


for

FOR는 PHP의 가장 복잡한 루프이다. 이것은 C와 유사하다. FOR 루프의 형태는 다음과 같다. :

  1 
  2 for (expr1; expr2; expr3) statement
  3      

첫 번째 표현식(expr1)은 루프를 시작할 때 무조건 한번 평가(실행)된다.

매 반복의 시작 때마다 expr2가 평가된다. 만약 이것이 TRUE면 루프는 계속되고 statement가 실행된다. expr2가 FALSE이면 루프는 종료된다.

매 반복이 끝날 때 expr3가 평가(실행)된다.

각 평가식은 비워둘 수 있다.expr2가 비어있으면 무한 루프를 뜻한다. (PHP는 C와 같이 비어있으면 TRUE로 인식한다.) 이건 별로 좋은 방법이 아니지만, 종종 BREAK를 사용하여 종료하는 방법도 있다.

다음 예는 1에서 10까지 출력하는 예이다. :

  1 
  2 /* example 1 */
  3  
  4 for ($i = 1; $i <= 10; $i++) {
  5     print $i;
  6 }
  7  
  8 /* example 2 */
  9  
 10 for ($i = 1;;$i++) {
 11     if ($i > 10) {
 12         break;
 13     }
 14     print $i;
 15 }
 16  
 17 /* example 3 */
 18  
 19 $i = 1;
 20 for (;;) {
 21     if ($i > 10) {
 22         break;
 23     }
 24     print $i;
 25     $i++;
 26 }
 27  
 28 /* example 4 */
 29  
 30 for ($i = 1; $i <= 10; print $i, $i++) ;
 31      

물론 처음것이 가장 좋아보인다. 그러나 나머지도 가능하다는 것을 알아야 한다.

PHP는 FOR 루프에 대해서도 다음과 같은 "colon syntax"를 지원한다.

  1 
  2 for (expr1; expr2; expr3): statement; ...; endfor;
  3      

일부 다른 언어들은 배열을 탐색하기 위하여 foreach 문장을 제공하기도 한다. 그러나 PHP는 이를 위해 list()each() 함수를 사용하여 while 루프로 해결한다. 이 함수들에 대해서는 예제를 참조하자.


foreach

PHP4(PHP3는 아니다)는 perl 등의 다른 언어가 제공하는 foreach 구조를 제공한다. 이 구조는 배열에 있어서 반복적인 작업을 하는데 유용하다. 이것에는 두가지 문법이 있는데, 두 번째 것은 첫 번째 것의 부분 확장이나 매우 유용하게 사용된다.

  1 
  2 foreach(array_expression as $value) statement
  3 foreach(array_expression as $key => $value) statement
  4      

첫 번째 모양은 array_expression 으로  주어진 배열에 대해 순환작업(loop)을 수행한다. 개개의 순환작업에서, 배열의 원소는 $value에 저장되고 내부 배열 포인터(internal array pointer)는 하나 전진하여 다음 작업시에 새로운 원소를ㄹ 가져오도록 한다.

두 번째 모양은 첫 번째와 동일한 작업을 하지만, $key에 해당 원소의 키값을 저장하게 된다.

foreach 문이 처음 수행될 때, 내부 배열 포인터(internal array pointer)는 자동적으로 배열의 첫번째 원소로 설정된다. 이말의 의미는 여러분이 foreach 문을 사용할 때 reset()을 미리 호출할 필요는 없다는 것이다.

따라서 아래의 두 개의 문장은 동일한 결과를 만든다는 것을 알 수 있을 것이다. :

  1 
  2 reset ($arr);
  3 while (list(, $value) = each ($arr)) {
  4     echo "Value: $value<br>\n";
  5 }
  6 
  7 foreach ($arr as $value) {
  8     echo "Value: $value<br>\n";
  9 }
 10      

 

다음 두 개의 문장은 기능적으로 동일한 문장이다. :

  1 
  2 reset ($arr);
  3 while (list($key, $value) = each ($arr)) {
  4     echo "Key: $key; Value: $value<br>\n";
  5 }
  6 
  7 foreach ($arr as $key => $value) {
  8     echo "Key: $key; Value: $value<br>\n";
  9 }
 10      

추가적으로 몇 개의 예제를 보자. :

  1 
  2 /* foreach example 1: value only */
  3 
  4 $a = array (1, 2, 3, 17);
  5 
  6 foreach ($a as $v) {
  7    print "Current value of \$a: $v.\n";
  8 }
  9 
 10 /* foreach example 2: value (with key printed for illustration) */
 11 
 12 $a = array (1, 2, 3, 17);
 13 
 14 $i = 0; /* for illustrative purposes only */
 15 
 16 foreach($a as $v) {
 17     print "\$a[$i] => $k.\n";
 18 }
 19 
 20 /* foreach example 3: key and value */
 21 
 22 $a = array (
 23     "one" => 1,
 24     "two" => 2,
 25     "three" => 3,
 26     "seventeen" => 17
 27 );
 28 
 29 foreach($a as $k => $v) {
 30     print "\$a[$k] => $v.\n";
 31 }
 32      

 


break

break는 현재 루프에서 빠져 나가는 명령이다.

break에는 숫자 옵션을 줄 수 있는데, 이것은 한번에 빠져 나갈 제어 구조의 수를 의미한다.

  1 
  2 $i = 0;
  3 while ($i < 10) {
  4     if ($arr[$i] == "stop") {
  5         break;  /* You could also write 'break 1;' here. */
  6     }
  7     $i++;
  8 }
  9 
 10 /* Using the optional argument. */
 11 
 12 $i = 0;
 13 while ( ++$i ) {
 14     switch ( $i ) {
 15     case 5:
 16         echo "At 5<br>\n";
 17         break 1;  /* Exit only the switch. */
 18     case 10:
 19         echo "At 10; quitting<br>\n";
 20         break 2;  /* Exit the switch and the while. */
 21     default:
 22         break;
 23     }
 24 }
 25      

continue

CONTINUE 는 현재 루프의 처음으로 가도록 하는 명령이다.

continue도 숫자 옵션을 줄 수 있는데, 이것은 한번에 처음으로 갈 제어 구조의 수를 의미한다.

  1 
  2 while (list ($key, $value) = each ($arr)) {
  3    if (!($key % 2)) { // skip odd members
  4        continue;
  5    }
  6    do_something_odd ($value);
  7 }
  8 
  9 $i = 0;
 10 while ($i++ < 5) {
 11     echo "Outer<br>\n";
 12     while (1) {
 13         echo "  Middle<br>\n";
 14         while (1) {
 15              echo "  Inner<br>\n";
 16              continue 3;
 17         }
 18         echo "This never gets output.<br>\n";
 19     }
 20     echo "Neither does this.<br>\n";
 21 }
 22      

 


switch

SWITCH문은 동일한 표현식의 IF문의 나열과 비슷하다. 다음 예는 동일한 것은 IF문과 SWITCH문으로 표현한 것이다. :

  1 
  2 if ($i == 0) {
  3     print "i equals 0";
  4 }
  5 if ($i == 1) {
  6     print "i equals 1";
  7 }
  8 if ($i == 2) {
  9     print "i equals 2";
 10 }
 11  
 12 switch ($i) {
 13     case 0:
 14         print "i equals 0";
 15         break;
 16     case 1:
 17         print "i equals 1";
 18         break;
 19     case 2:
 20         print "i equals 2";
 21         break;
 22 }
 23      

SWITCH문은 문장 단위로 실행된다. SWITCH에 있는 평가식과 일치하는 CASE문을 찾아 그 이후 SWITCH블럭이 끝날 때 까지 실행한다. 따라서 원하는 경우 BREAK로 실행을 중지시킬 필요가 있다. 다음 예를 보자. :

  1 
  2 switch ($i) {
  3     case 0:
  4         print "i equals 0";
  5     case 1:
  6         print "i equals 1";
  7     case 2:
  8         print "i equals 2";
  9 }
 10      

여기서 $i가 0이면 모든 print문을 실행할 것이다. 만약 $i가 1이면 마지막 두개의 print문을 실행한다. 따라서 여러분이 원하는 결과를 얻으려면 BREAK문을 잊지 않는 것이 중요한다.

특별한 case로 default case가 있다. 이 것은 다른 어떤 case에도 맞지 않는 경우를 의미한다. 예를 들어 :

  1 
  2 switch ($i) {
  3     case 0:
  4         print "i equals 0";
  5         break;
  6     case 1:
  7         print "i equals 1";
  8         break;
  9     case 2:
 10         print "i equals 2";
 11         break;
 12     default:
 13         print "i is not equal to 0, 1 or 2";
 14 }
 15      

다른 중요한 점은 CASE 표현식에는 정수, 실수, 문자열의 스칼리 타입으로 평가되는 어떤 표현식이와도 된다는 것이다. 배열이나 객체도 문제를 일으키지는 않는다. 그러나 그것은 문장에서 의미가 없다.

switch 문에 대해서도 Alternative syntax가 지원된다. 자세한 내용은 Alternative syntax for control structures 를 살펴보자

  1 
  2 switch ($i):
  3     case 0:
  4         print "i equals 0";
  5         break;
  6     case 1:
  7         print "i equals 1";
  8         break;
  9     case 2:
 10         print "i equals 2";
 11         break;
 12     default:
 13         print "i is not equal to 0, 1 or 2";
 14 endswitch;
 15      


require

require() 문은 C preprocessor의 #include와 비슷하게, 자신을 지정된 파일로 대체한다.

include() 되거나 require() 되어 읽혀지는 파일은 포함된 파일의 처음에 PHP모드에서 빠져나와 HTML모드로 들어가고, 마지막에 PHP모드로 복귀한다. 따라서 포함될 파일의 PHP 코드는 적절한 PHP 시작, 종료 택에 둘러싸여 있어야 한다.

이것은 require()문을 루프 구조 안에 두어, 매번 다른 파일을 읽어들일 수 없다는 것을 의미한다. 이런 동작을 위해서는 INCLUDE 문을 사용하라.

require('header.inc');

require()는 사실 함수가 아니라 제어구조이다. 따라서 이것은 함수와는 다른 규칙을 따른다. 이를테면 require()는 다른 어떤 제어구조와도 사용할 수 없다. 또한, 이것은 반환값이 없다. (반환값을 돌려받으려하면 파싱 에러가 난다.)

include()와 다르게, require()는 언제나 해당 파일을 읽어온다. 심지어 해당 라인이 전혀 실행되지 않아도 읽어온다. 만약 여러분이 조건에 따라 파일을 포함시키고 싶다면 include()문을 사용하여야 한다. 조건절은 require()에 아무 영향을 미치지 못한다. 그러나, require()문이 있는 줄이 실행되지 않는다면 해당 파일의 어떤 코드도 실행되지 않는다.

비슷하게, 순환문 또한 require()에 영향을 주지 못한다. 해당 파일에 있는 내용이 루프의 내용이라 하더러도 require()문은 단지 한번만 나타나는 것으로 된다.

이것은 require() 문을 순환문 안에 사용할 수 없다는 것을 의미하고, 매 순환시마다 다른 파일을 읽어오려면 include()문을 사용하여야 한다는 것이다.

  1 
  2 require ('header.inc');
  3      

include()require() 모두 호출한 스크립트안으로 원하는 파일의 내용 자체를 끌어들이는(pull) 것이지, HTTP나 그와 비슷한 방식으로 해당 타겟을 call하는 것은 아니다. 따라서 현재 범위안에 선언된 모든 변수들은 포함할 파일 안에서도 그대로 사용된다.

  1 
  2 require ("file.inc?varone=1&vartwo=2"); /* Won't work. */
  3 
  4 $varone = 1;
  5 $vartwo = 2;
  6 require ("file.inc");  /* $varone and $vartwo will be available in file.inc */
  7      

여러분은 remote files 기능을 사용하여 HTTP를 통한 원격 파일을 include하거나 require할 때 위의 내용을 명확히 알아둘 필요가 있다.

PHP3에서는 require()로 포함된 파일안에서 return 문을 사용할 수 있었다. 단, return 문이 포함된 파일의 global scope에서 나타나는 경우만 가능하고, 어떠한 블록내({} 내부)에서도 사용할 수 없다. 그러나, PHP4에서는 이런 기능 자체가 없어져 버렸다. 만약 여러분이 이런 기능을 사용하고 싶다면 include() 문을 사용하기 바란다.


include

INCLUDE문은 지정한 파일을 읽고 실행한다.

include() 되거나 require() 되어 읽혀지는 파일은 포함된 파일의 처음에 PHP모드에서 빠져나와 HTML모드로 들어가고, 마지막에 PHP모드로 복귀한다. 따라서 포함될 파일의 PHP 코드는 적절한 PHP 시작, 종료 택에 둘러싸여 있어야 한다.

이 동작은 실행중 include() 문을 만날 때 만다 일어난다. 따라서 여러분은 include() 문을 루프 구조 안에 두어 매번 다른 파일을 읽어 들이도록 할 수 있다.

  1 
  2 $files = array ('first.inc', 'second.inc', 'third.inc');
  3 for ($i = 0; $i < count($files); $i++) {
  4     include $files[$i];
  5 }
  6      

include()는 이 문장을 만날 때 마다 매번 재평가되어 재실행된다는 점에서 require()와 다르다. 반면에 require()문은 지정된 파일의 내용이 실행되는가에 관계없이(예를들어 if 문 안에 들어있고 상태가 거짓인 경우에도), 이 문장을 처음 만날을 때 지정된 파일로 대체된다.

include()는 특별한 구조이므로, 만약 이것이 조전절 안에 놓여있다면 반드시 {}(statement block)으로 둘러싸야 한다.

  1 
  2 /* This is WRONG and will not work as desired. */
  3  
  4 if ($condition)
  5     include($file);
  6 else
  7     include($other);
  8  
  9 /* This is CORRECT. */
 10  
 11 if ($condition) {
 12     include($file);
 13 } else {
 14     include($other);
 15 }
 16      

PHP3, PHP4 모두 include() 된 파일 내에서, 이 파일의 수행을 종료하고, 이 파일을 부른 스크립트로 복귀하기 위해 return 문을 사용할 수 있다. 약간 다른점이 있기는하다. 우선, PHP3에서는 해당 블록이 함수의 블록이 아닌한 return 문이 블록안에 올 수 없다. (함수의 블록 안에 있는 경우는 해당 함수에서 return 하는 것이지 현재 파일에서 return 하는 것은 아니다.) 그러나, PHP4에서는 이 제한이 없다. ㄸ또한 PHP4에서는 include() 파일의 return시에 리턴값을 사용할 수 있다. 여러분은 include() 문을 일반 함수처럼 반환값을 받을 수 있다. (이것은 PHP3에서는 구문에러를 발생시킨다.)

Example 11-1. include() in PHP3 and PHP4

다음의 test.inc 라는 파일이 메인 파일과 동일한 디렉토리에 있다고 가정한다. :
  1 
  2 <?php
  3 echo "Before the return <br>\n";
  4 if (1) {
  5     return 27;
  6 }
  7 echo "After the return <br>\n";
  8 ?>
  9      

main.html 이라는 메인파일의 내용은 다음과 같다. :
  1 
  2 <?php
  3 $retval = include ('test.inc');
  4 echo "File returned: '$retval'<br>\n";
  5 ?>
  6      

main.html 이 PHP3에서 불려지면, 이 파일은 두 번째 줄에서 "you can't take the value of an include()" 라는 구문 에러를 발생시킨다. 그러나, PHP4에서는 다음돠 같은 결과를 출력한다. :

Before the return
File returned: '27'
     

이제 main.html 을 다음과 같은 내용으로 고쳐서 실행해 보자. :
  1 
  2 <?php
  3 include ('test.inc');
  4 echo "Back in main.html<br>\n";
  5 ?>
  6      

PHP4에서는 다음과 같은 결과가 출력된다. :
Before the return
Back in main.html
     

그러나 PHP3에서는 다음과 같은 결과가 나온다. :

Before the return 
27Back in main.html

Parse error: parse error in /home/torben/public_html/phptest/main.html on line 5
     

위의 구문 에러는 test.inc에서 return 문이 함수블록이외의 블록안에 사용되었기 때문에 생긴다. return 을 블록 밖으로 꺼내면 다음과 같은 경과가 출력된다. :
Before the return
27Back in main.html
     

위의 '27'이 출력된 것은 PHP3가 include파일로 부터의 값의 반환을 지원하지 않기 때문이다.

include()require() 모두 호출한 스크립트안으로 원하는 파일의 내용 자체를 끌어들이는(pull) 것이지, HTTP나 그와 비슷한 방식으로 해당 타겟을 call하는 것은 아니다. 따라서 현재 범위안에 선언된 모든 변수들은 포함할 파일 안에서도 그대로 사용된다.

  1 
  2 include ("file.inc?varone=1&vartwo=2"); /* Won't work. */
  3 
  4 $varone = 1;
  5 $vartwo = 2;
  6 include ("file.inc");  /* $varone and $vartwo will be available in file.inc */
  7      

여러분은 remote files 기능을 사용하여 HTTP를 통한 원격 파일을 include하거나 require할 때 위의 내용을 명확히 알아둘 필요가 있다.

See also readfile(), require(), virtual().


Chapter 12. Functions

User-defined functions

함수는 다음과 같이 정의한다. :

  1 
  2 function foo ($arg_1, $arg_2, ..., $arg_n) {
  3     echo "Example function.\n";
  4     return $retval;
  5 }
  6      

함수 안에는 다른 함수나 class의 선언 등을 포함한 모든 가능한 PHP 코드가 사용될 수 있다.

PHP3에서는 함수는 그 함수가 사용되기 이전에 선언되어 있어야 하였으나 PHP4에서는 이런 제약이 없어졌다.

PHP는 function overloading을 지원하지 않고, 이미 정의된 함수를 재정의하거나 없애지 못한다.

PHP3에서는 함수 파라메터의 기본값을 설정해주는 것(default argument values를 보자.)은 가능해도, 파라메터의 개수를 가변으로 설정하는 것은 불가능했지만, PHP4는 두가지 모두 가능하다. 자세한 내용은 Variable-length argument listsfunc_num_args(), func_get_arg(), func_get_args() 의 함수 설명을 보기 바란다.

 


Function arguments

argument list를 통해 함수에 어떤 정보를 넘겨줄 수 있다. 이 argument list는 쉼표(,)로 나위어진 변수나 상수의 list이다.

PHP는 passing by value(기본적으로 이것을 사용)와 passing by reference, default argument values의 3가지 방법을 제공한다. 가변 길이(Variable-length) argument list는 PHP4이후에서만 제공된다. 자세한 내용은 Variable-length argument listsfunc_num_args(), func_get_arg(), func_get_args() 의 함수 설명을 보기 바란다. 그러나 PHP3에서도 배열을 통한 전달을 사용한다면 비슷한 효과를 낼 수 있다.

  1 
  2 function takes_array($input) {
  3     echo "$input[0] + $input[1] = ", $input[0]+$input[1];
  4 }
  5      

Making arguments be passed by reference

기본적으로 함수의 인수(argument)들은 값으로 전달된다(passed by value). 함수내에서 변화시킨 값을 그대로 유지하려면 pass by reference로 인수를 넘겨야 한다.

여러분이 어떤 함수의 인수를 항상 pass by reference로 넘기려 한다면, 여러분은 함수를 선언할 때 ampersand(&)를 인수의 앞에 붙여주면 된다. :

  1 
  2 function add_some_extra(&$string) {
  3     $string .= 'and something extra.';
  4 }
  5 $str = 'This is a string, ';
  6 add_some_extra($str);
  7 echo $str;    // outputs 'This is a string, and something extra.'
  8       

만약 기본은 by value 로 하지만 필요에 따라 by reference로 호출하고 싶다면 함수 호출 시에 인수의 앞에 &를 붙이면 된다. :

  1 
  2 function foo ($bar) {
  3     $bar .= ' and something extra.';
  4 }
  5 $str = 'This is a string, ';
  6 foo ($str);
  7 echo $str;    // outputs 'This is a string, '
  8 foo (&$str);
  9 echo $str;    // outputs 'This is a string, and something extra.'
 10       

Default argument values

스칼라 인수는 다음과 같이 C++ 과 비슷하게 기본값을 정해줄 수 있다. :

  1 
  2 function makecoffee ($type = "cappucino") {
  3     return "Making a cup of $type.\n";
  4 }
  5 echo makecoffee ();
  6 echo makecoffee ("espresso");
  7       

위의 코드의 실행 결과는 다음과 같다 :

Making a cup of cappucino.
Making a cup of espresso.
     

default 값은 반드시 상수이어야 한다. (예를들어) 변수나 class의 멤버를 사용해서는 안된다.

PHP 4.0에서는 default argument로 unset을 지정할 수 있다. 이것은 해당 argument에 값이 제공되지 않으면, 절대로 값을 설정하지 않는 것을 의미한다.

default argument를 사용할 때, default가 되는 인수들은 non-default인 인수들보다 오른쪽에 위치해야 한다. 그렇지 않으면 원하는 결과가 나오지 않는다. 다음을 보자. :

  1 
  2 function makeyogurt ($type = "acidophilus", $flavour) {
  3     return "Making a bowl of $type $flavour.\n";
  4 }
  5  
  6 echo makeyogurt ("raspberry");   // won't work as expected
  7       

위 코드의 실행 결과는 다음과 같다 :

Warning: Missing argument 2 in call to makeyogurt() in 
/usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Making a bowl of raspberry .
     

그러면 이제 위의 것과 아래것을 비교해 보자. :

  1 
  2 function makeyogurt ($flavour, $type = "acidophilus") {
  3     return "Making a bowl of $type $flavour.\n";
  4 }
  5  
  6 echo makeyogurt ("raspberry");   // works as expected
  7       

이 예제의 실행 결과는 다음과 같다. :

Making a bowl of acidophilus raspberry.
     

 


Variable-length argument lists

PHP4에서는 사용자 정의 함수에 가변 길이(Variable-length) argument list를 제공한다. func_num_args(), func_get_arg(), func_get_args() 의 함수를 사용하여 쉽게 사용할 수 있다.

특별한 문법이 사용되지도 않고, 함수의 정의시나 사용시 argument list는 보통의 경우와 동일하게 사용하면 된다.


Returning values

함수는 return 문을 통해 함수값을 돌려줄 수 있다. list와 object를 포함한 어떤 type도 돌려질 수 있다.

  1 
  2 function square ($num) {
  3     return $num * $num;
  4 }
  5 echo square (4);   // outputs '16'.
  6      

여러값을 돌려주는 일은 할 수 없다. 그러나 list를 돌려줌으로써 비슷한 일을 할 수 있다. :

  1 
  2 function small_numbers() {
  3     return array (0, 1, 2);
  4 }
  5 list ($zero, $one, $two) = small_numbers();
  6      

 


old_function

OLD_FUNCTION 문장은 PHP/FI2에서 동일한 함수 사용법을 제공한다. (function대신 old_function을 사용한다는 점은 제외하고)

이것을 사용하는 것은 좋지 않은 방법이다. 이것이 사용될 때는 PHP/FI2->PHP3 변환기에서 뿐이다.

주의

OLD_FUNCTION으로 정의된 함수들은 PHP의 내부 코드에서 호출될 수 없다. 이 말은 usort()array_walk(), register_shutdown_function()같은 함수에 사용할 수 없다는 의미이다. 이를 해결하기 위해서는 이 OLD_FUNCTION으로 선언된 함수를 호출하는 PHP3 형태의 함수를 만들어 사용하는 것이다.

 


Variable functions

PHP는 가변 함수(variable functions) 개념을 지원한다. 이것은 변수명 뒤에 괄호가 왔을 때, PHP는 그 이름을 가진 함수를 찾아 실행한다는 것을 의미한다. 이 기능은  callbacks, function table 등의 기능에 사용하면 매우 유용하게 사용할 수 있다.

Example 12-1. Variable function example

  1 
  2 <?php
  3 function foo() {
  4     echo "In foo()<br>\n";
  5 }
  6 
  7 function bar( $arg = '' ) {
  8     echo "In bar(); argument was '$arg'.<br>\n";
  9 }
 10 
 11 $func = 'foo';
 12 $func();
 13 $func = 'bar';
 14 $func( 'test' );
 15 ?>
 16      

 


Chapter 13. Classes and Objects

( 역자주 : Class 문장은 Java의 subset이라 할만큼 동일하다. )

class

클래스는 일련의 변수와 이 변수들을 사용하는 함수들의 모음이다. 클래스는 다음과 같은 형태로 선언된다.

  1 
  2 <?php
  3 class Cart {
  4     var $items;  // Items in our shopping cart
  5    
  6     // Add $num articles of $artnr to the cart
  7  
  8     function add_item ($artnr, $num) {
  9         $this->items[$artnr] += $num;
 10     }
 11    
 12     // Take $num articles of $artnr out of the cart
 13  
 14     function remove_item ($artnr, $num) {
 15         if ($this->items[$artnr] > $num) {
 16             $this->items[$artnr] -= $num;
 17             return true;
 18         } else {
 19             return false;
 20         }   
 21     }
 22 }
 23 ?>
 24      

이 선언은 Cart라는 이름의 클래스로, 카트안에 들어있는 물품을 위한 한 개의 배열 변수와 cart에 물건을 넣거나 빼는 두 개의 함수로 구성되어 있다.

Classe는 Type으로, 실제 변수들의 청사진이라 할 수 있다. 여러분은 new 연산자를 사용하여 원하는 type의 변수를 생성하여야 한다.

  1 
  2  $cart = new Cart;
  3  $cart->add_item("10", 1);
  4     

위에 있는 예는 Cart 클래스의 $cart라는 object를 만드는 것이다. 이 object의 add_item() 함수를 호출하여 물품 번호 "10"번의 물품 1개를 카트에 넣는다.

클래스는 다른 클래스로 확장 될 수 있다. 확장 혹은 파생된(extended or derived) 클래스는 base 가 되는 클래스의 모든 변수들과 함수들을 그대로 가제게 되고, 여러분은 여기에 추가로 확장된 선언을 할 수 있다. 이를 위해 "extends"라는 키워드가 사용된다.

  1 
  2 class Named_Cart extends Cart {
  3     var $owner;
  4   
  5     function set_owner ($name) {
  6         $this->owner = $name;
  7     }
  8 }
  9     

위의 예는 Cart 클래스의 변수와 함수에 $owner 변수와 set_owner() 함수를 추가한 Named_Cart라는 클래스의 선언이다. 여러분은 이름붙은 카트(named cart)를 사용하여 카트의 주인을 설정하고 찾아볼 수 있다. 또한 기존의 일반 카트(normal cart)에 있던 함수도 사용할 수 있다.

  1 
  2 $ncart = new Named_Cart;    // Create a named cart
  3 $ncart->set_owner ("kris"); // Name that cart
  4 print $ncart->owner;        // print the cart owners name
  5 $ncart->add_item ("10", 1); // (inherited functionality from cart)
  6     

클래스 내부에 있는 함수에서 $this 라는 변수는 자기 자신 object를 의미한다. 여러분은 $this->something 의 형태로 현재 object의 변수나 함수를 사용하여야 한다.

생성자(Constructor)는 해당 클래스의 새 인스턴스(새로 만든 변수라고 생각해 두자)를 만들 때 자동적으로 실행되는 함수를 의미한다. 클래스의 이름과 같은 이름의 함수가 생성자가 된다.

  1 
  2 class Auto_Cart extends Cart {
  3     function Auto_Cart () {
  4         $this->add_item ("10", 1);
  5     }
  6 }
  7     

위의 예는 Cart 클래스에 물품번호 10번의 물품을 한 개 자동으로 추가하는 생성자를 추가한 Auto_Cart라는 클래스의 선언이다. Auto_Cart는 "new"로 생성된다. 생성자는 또한 인수(argument)를 가질 수 있고, 이 인수들은 default값을 가진 옵션으로 선언 할 수 있다. 이 기능은 매우 유용하게 사용된다.

  1 
  2 class Constructor_Cart extends Cart {
  3     function Constructor_Cart ($item = "10", $num = 1) {
  4         $this->add_item ($item, $num);
  5     }
  6 }
  7  
  8 // Shop the same old boring stuff.
  9  
 10 $default_cart   = new Constructor_Cart;
 11  
 12 // Shop for real...
 13  
 14 $different_cart = new Constructor_Cart ("20", 17);
 15     

 

Caution

파생된(derived) 클래스의 경우, 이 클래스의 생성자가 호출될 때 부모 클래스의 생성자는 자동으로 호출되지 않는다.

 


III. 기능 (Features)

Table of Contents
14. Error handling
15. Creating GIF images
16. HTTP authentication with PHP
17. Cookies
18. Handling file uploads
19. Using remote files
20. Connection handling
21. Persistent database connections


Chapter 14. Error handling

PHP에는 다음과 같은 4가지의 에러와 경고 형태가 있다.

error reporting level은 위의 4개의 숫자가 더해져서 결정된다. 기본 error reporting level 은 7로 1+2+4가 되고, 이는 Notice를 제외한 모든 것을 레포트하라는 의미이다. 이 레벨은 php3.ini 파일에서 error_reporting 지시자로 결정할 수 있다. 혹은, 아파치의 httpd.conf 파일에서 php3_error_reporting 지시자로 결정하거나, 스크립트 실행 중에 error_reporting() 함수를 사용하여 바꿔줄 수도 있다.

모든 PHP 표현식(expression)은 "@"를 앞에 붙이고 호출되면 error reporting을 하지 않는다. 만약 track_errors 기능이 Enabled로 되어 있는데 해당 문장에서 에러가 발생했다면, $php_errormsg라는 전역변수에서 에러 메시지를 찾을 수 있을 것이다.


Chapter 15. PHP에서 GIF의 생성 (Creating GIF images)

PHP는 단지 HTML출력을 만드는 것만 할 수 있는 것이 아니다. PHP는 GIF image file도 만들 수 있을 있을 뿐아니라, 사용하기에 편리한 GIF image stream까지 만들 수 있다. 이를 위해서 여러분은 PHP를 컴파일 할 때, image 함수를 가지고 있는 GD 라이브러리를 포함하여야 한다.

Example 15-1. GIF creation with PHP

  1 
  2 <?php
  3     Header("Content-type: image/gif");
  4     $string=implode($argv," ");
  5     $im = imagecreatefromgif("images/button1.gif");
  6     $orange = ImageColorAllocate($im, 220, 210, 60);
  7     $px = (imagesx($im)-7.5*strlen($string))/2;
  8     ImageString($im,3,$px,9,$string,$orange);
  9     ImageGif($im);
 10     ImageDestroy($im);
 11 ?>
 12     

위의 예제는 <img src="button.php3?text">와 같은 tag이 있는 페이지로부터 불려지게 될 것이다. 그러면 위에있는 button.php 스크립트는 "text"라는 문자열을 "images/button1.gif"에 오버레이 시켜 결과 image에 출력한다. 이렇게 하면 버튼에 들어가는 글씨를 매번 손쉽게 바꿔 쓸 수 있고, 또한 매번 이미지 파일을 만들 필요가 없어 효율적이고 간단하다.


Chapter 16. HTTP 인증 (HTTP authentication with PHP)

(역자주. HTTP authentication이란 Web Client에게 ID와 Password를 입력받아, 그 ID와 Password로 Web문서에 접근을 허가, 불허하는 기능을 말한다. 자세히 알고 싶다면 RFC1945의 Authentication 부분을 참고하기 바란다. http://pec.etri.re.kr/!qkim/HTTP/에 한글 번역 문서도 있으니 참조하자.)

PHP를 사용한 HTTP 인증은 Apache 모듈로 사용될 때만 동작한다. Apache 모듈의 PHP 스크립트에서 Header()라는 함수를 사용하면 Client 브라우저에게 Username과 Password를 입력받는 윈도우를 띄우도록 하는 "인증 요구"("Authentication Required") 메시지를 보내게 된다. 일단 사용자가 Username과 Password를 입력하면, user name, password, authentication type의 값을 가지는 $PHP_AUTH_USER, $PHP_AUTH_PW, $PHP_AUTH_TYPE의 3개의 변수를 가지고 해당 URL(PHP 스크립트를 포함한)이 다시 불리워진다. 현재 authentication type은 "Basic"만이 지원된다.

client authentication을 사용하여 그 입력된 값을 출력하는 예제가 아래에 있다. :

Example 16-1. HTTP Authentication example

  1 
  2 <?php
  3   if(!isset($PHP_AUTH_USER)) {
  4     Header("WWW-Authenticate: Basic realm=\"My Realm\"");
  5     Header("HTTP/1.0 401 Unauthorized");
  6     echo "Text to send if user hits Cancel button\n";
  7     exit;
  8   } else {
  9     echo "Hello $PHP_AUTH_USER.<P>";
 10     echo "You entered $PHP_AUTH_PW as your password.<P>";
 11   }
 12 ?>
 13     

여러분은 $PHP_AUTH_USER 와 $PHP_AUTH_PW를 단순히 출력하는 대신, 사용자의 식별을 위해 username과 password를 사용하기를 원할 것이다. 이때는 Database에 Query하거나 직접 dbm 파일에서 찾아보면 가능할 것이다.

Internet Explorer browser에서는 버그로 인해 Header의 순서가 매우 까다롭다. WWW-authenticate header를 HTTP/1.0 401 header보다 먼저 보내는 것이 현재 가능한 요령으로 보인다.

비밀번호의 유출을 우려하여 HTTP에서 제공하는 인증을 사용하는 대신 기존의 외부 메카니즘을 사용할 경우에는 물론 PHP_AUTH 변수는 설정되지 않는다.

유의할 점은 인증이 필요한 페이지와 인증이 필요없는 페이지가 같은 서버상에 존재할 때, 인증이 필요없는 URL을 control할 수 있는 누군가가, 인증이 필요한 URL의 암호를 훔쳐보는 것은 막을 수 없다는 점이다.

Netscape와 Internet Explorer 모두 401응답 코드를 서버에서 받게되면 local browser window의 authentication cache를 clear한다. 즉, 이것은 "log out"개념이 되는 것으로, 사용자들로 하여금 username과 암호를 다시 입력하게 한다. 일부는 이것을 login의 "time out"이나 "log-out"버튼을 만드는데 사용한다

Example 16-2. HTTP Authentication example forcing a new name/password

  1 
  2 <?php
  3   function  authenticate()  {
  4     Header( "WWW-authenticate:  basic  realm='Test  Authentication  System'");
  5     Header( "HTTP/1.0  401  Unauthorized");
  6     echo  "You  must  enter  a  valid  login  ID  and  password  to  access  this  resource\n";
  7     exit;
  8   }
  9 
 10   if(!isset($PHP_AUTH_USER)  ||  ($SeenBefore ==  1  &&  !strcmp($OldAuth,  $PHP_AUTH_USER))  )  {
 11     authenticate();
 12   }  
 13   else  {
 14     echo  "Welcome:  $PHP_AUTH_USER<BR>";
 15     echo  "Old:  $OldAuth";
 16     echo  "<FORM  ACTION=\"$PHP_SELF\"  METHOD=POST>\n";
 17     echo  "<INPUT  TYPE=HIDDEN  NAME=\"SeenBefore\"  VALUE=\"1\">\n";
 18     echo  "<INPUT  TYPE=HIDDEN  NAME=\"OldAuth\"  VALUE=\"$PHP_AUTH_USER\">\n";
 19     echo  "<INPUT  TYPE=Submit  VALUE=\"Re  Authenticate\">\n";
 20     echo  "</FORM>\n";
 21 
 22 }
 23 ?>
 24   

이 동작은 HTTP Basic authentication 기준에 요구되는 것은 아니므로 여러분은 이것에 의존하여서는 안된다. Lynx에서는 401 서버 응답을 받아도 authentication 정보를 clear하지 않는다. 따라서 Back을 누르고 다시 Forward 버튼을 눌러서 다시 접근할 수 있다.

또한 이 Authentication 기능은 Microsoft's IIS server에서 CGI version의 PHP를 사용할 경우에는 IIS의 제약으로인해 동작하지 않는다.


Chapter 17. Cookies

PHP는 HTTP Cookie를 투명하게(transparently) 지원한다. Cookie 메카니즘은 트래킹이나 사용자 식별 등을 위해 원격 browser에 저장된 데이터를 돌려 받는 과정을 말한다. 여러분은 cookie를 설정하기 위해 setcookie() 함수를 사용할 수 있다. Cookie는 HTTP 헤더의 한 부분이므로, SetCookie() 함수는 브라우저로 보내는 어떤 데이터보다도 앞에 사용해야 한다. 이 제약은 Header() 함수와 같은 제약으로 보면 된다.

당신이 보내준 모든 cookie는 자동적으로 GET이나 POST 방식 데이터와 같은 PHP 변수로 변환된다. 만약 여러분이 동일한 cookie에 여러 값을 저장하고 싶다면 Cookie이름에 []를 더하면 된다. 자세한 것은 setcookie() 함수 설명을 참조하자.


Chapter 18. Handling file uploads


POST method uploads

PHP는 RFC-1867을 지원하는 브라우저로부터 파일을 업로드 받을 수 있는 기능이 있다. 이 기능을 사용하면 Text분아니라 Binary파일도 업로드가 가능하다. 여러분은 PHP's authetication과 논리적인 함수들을 사용하여, Upload가 가능한 사용자와, 파일이 Upload된 후에 해야 할 일을 반드시 정해 두어야 한다. (역자주. RFC-1867은 Netscape 3.0이상, Explorer 4.0이상에서 지원한다. Netscape 2.x대의 일부 상위버젼도 지원하고, Explorer 3.02는 Patch가 나와 있으므로 patch시키면 가능하다.)

PHP는 또한 Netscape Composer 와 W3C's Amaya clients를 사용할 경우 PUT-method 의 파일 업로드도 지원한다. 자세한 내용은 PUT Method Support 를 읽어보기바란다.

파일 업로드 화면은 다음과 같은 좀 특별한 폼을 만들어 띄울 수 있다. :

Example 18-1. File Upload Form

  1 
  2 <FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>
  3 <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">
  4 Send this file: <INPUT NAME="userfile" TYPE="file">
  5 <INPUT TYPE="submit" VALUE="Send File">
  6 </FORM>
  7     

여기서_URL_은 PHP html파일이어야 합니다. hidden 필드인 MAX_FILE_SIZE는 File input 필드들보다 선행되어야 합니다. 이 값은 PHP html이 받아들이는 최대 파일 크기를 Byte단위로 나타냅니다. 업로드가 성공적으로 되면 지정된 파일에는 다음과 같은 변수들이 정의되어 진다. :

위 변수의 "$userfile"부분은 upload form에서 TYPE=filed을 가진 INPUT 필드의 이름이 된다. 위의 예제에서 우리는 그 이름은 "userfile"이라고 정했다.

File은 기본적으로 우선 서버의 default temporary directory에 저장된다. 이 디폴트 디렉토리는 PHP가 돌아가는 컴퓨터의 환경변수 "TMPDIR"을 설정하여 변경할 수 있다. 이를 PHP 스크립트 안에서 putenv() 함수를 사용하여 변경하는 것은 동작하지 않는다.

업로드된 파일을 다루는 PHP 스크립트는 해당 파일을 가지고 하는 작업을 설정해 줄 필요가 있다. 예를들어, 여러분은 $file_size변수를 사용하여 너무 작거나 큰 파일을 버릴 수도 있다. 또한 여러분은 $file_type변수를 가지고 특정한 타입에 맞지 않는 파일을 버릴 수 있다. 어떤 로직이던, 여러분은 임시 디렉토리에 있는 파일을 지우거나 나중에 필요할 경우에는 다른 곳에 이동시켜야 한다.

만약 임시 디렉토리에 있는 파일을 해당 request가 끝날 때 까지도 지우거나 이동시키지 않았다면, 이 파일은 해당 request가 종료되는 시점에서 자동으로 지워진다.


일반적인 주의사항 (Common Pitfalls)

MAX_FILE_SIZE 아이템의 값은 PHP3.ini에 설정된 upload_max_filesize의 값이나 Apache .conf에 설정한 php3_upload_max_filesize의 값보다 크게 설정할 수 없다. 기본값은 2메가 바이트이다.

CERN httpd 서버는 client로부터 입력받은 mime header의 앞쪽 여백을 모두 strip off 시켜버리므로, CERN httpd 서버에서는 File Upload 기능이 동작하지 않는다.


여러 파일을 Upload하기 (Uploading multiple files)

한번에 여러개의 파일을 동시에 전송하는 것도 가능하다. 이때 PHP는 이 파일들에 대한 정보를 배열로 전달한다. 따라서 이런 경우에는 여러개를 선택하는 select나 checkbox 때처럼 HTML의 form의 아이템에 동일한 array명을 적어주어야 한다.

Note: 여러 파일 전송 기능은 3.0.10부터 추가된 기능이다. (역자주: php 4.0.0은 버그로 인해 이 기능이 동작하지 않는다)

Example 18-2. Uploading multiple forms

  1 
  2 <form action="file-upload.html" method="post" enctype="multipart/form-data">
  3   Send these files:<br>
  4   <input name="userfile[]" type="file"><br>
  5   <input name="userfile[]" type="file"><br>
  6   <input type="submit" value="Send files">
  7 </form>
  8      

위의 폼이 전송될 때 $userfile, $userfile_name, $userfile_size의 배열이 전역 변수로 만들어진다. ($HTTP_POST_VARS에도 만들어진다.) 이 배열들은 전송된 파일의 정보를 가지고 있고, 각 배열들은 번호로 인덱스되어 있다.

예를 들어, 위의 예에서 /home/test/review.html/home/test/xwp.out 의 두 개의 파일을 전송했다면 $userfile_name[0]에는 review.html이라는 값이, $userfile_name[1]에는 xwp.out이라는 값이 저장되게 된다. 동시에, $userfile_size[0] 에는 review.html의 파일 크기가 저장되는 식이 된다.


PUT Method Support

PHP는 Netscape Composer나 W3C Amaya같은 클리이언트에 대해 HTTP PUT 방식(method)을 지원한다. PUT 요구(request)는 file upload보다 훨씬 쉽다. 단지 다음과 같이 하면 된다. :

  1 
  2 PUT /path/filename.html HTTP/1.1
  3     

이것은 보통 원격 클라이언트가 보낸 내용을 웹 트리 밑의 /path/filename.html로 저장하라는 의미이다. 그런데 여러분의 웹 트리밑에 있는 파일들을 아무나 덮어 쓸 수 있다는 것은 Apache나 PHP에 있어서 확실히 좋지 않은 생각이다. 따라서 이와 같은 요구를 다루기 전에, 우선 웹 서버에게 이런 요구를 다루는 PHP 스크립트를 미리 지정해 주어야 한다. 아파치에서는 Script 지시자로 그 내용을 지정한다. 이 지시자는 Apache 설정 파일중의 어느 위치에 있어도 괜찮으나, 보통 <Directory> 블록 안이나 <Virtualhost> 블록 안에 위치하는 것이 일반적이다. 보통 다음과 같이 쓰여진다. :

  1 
  2 Script PUT /put.php3
  3     

이것은 이 라인을 위치시킨 블록의 URI에 해당되는 모든 PUT 요구를 put.php3 스크립트에게 전달하라고 Apache에게 알려 준다. 물론 이 경우 .php3 확장자에 대하여 PHP설정이 완료되어 있고, PHP가 작동중이어야 한다.

put.php3 파일내에서는 보통 다음과 같이 사용할 수 있다. :

  1 
  2 <? copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?>
  3     

위의 명령은 해당 파일을 원격 클라이언트가 요청한 위치에 복사하는 것이다. 아마 여러분은 복사하기 전에 사용자를 확인하거나 파일을 검사하는 등의 기능을 원할 것이다. 여기서 알 수 있는 것은 PHP가 PUT-method의 요구를 받았을 때 POST-method기능과 마찬가지로 임시 파일에 해당 내용을 저장한다는 것이다. 즉, 요구가 끝나게 되면 임시파일은 지워진다. 따라서 PUT을 다루는 PHP 스크립트는 해당 파일을 어디 다른 곳에 복사해 두어야 한다. 임시파일의 이름은 $PHP_PUT_FILENAME 이라는 변수에 저장되고, $REQUEST_URI 변수에 클라이언트에서 보내온 저장할 파일의 경로와 이름이 저장된다.(Apache가 아닌 웹서버에서는 모양이 조금 달라진다.) 물론 여러분은 이 경로명과 파일명이 아닌 전혀 다른 위치에 다른 파일명을 사용할 수도 있다.


Chapter 19. Using remote files

여러분이 PHP를 설정할 때 "URL fopen wrapper"를 enable로 설정하였다면(이 설정은 --disable-url-fopen-wrapper로 명시하지 않으면 설정된다.), 여러분은 대부분 함수의 파라메타로 있는 파일이름(filename)에 HTTP나 FTP URL을 사용할 수 있다. 심지어 require()include() 함수에도 사용이 가능하다.

Note: 단, Windows환경의 include()require() 함수에서는 사용할 수 없다.

예를 들어, 여러분은 이 기능을 사용하여 원격 웹 서버가 출력하는 내용을 파일로 열고, 그 출력 내용에서 여러분이 원하는 데이타를 분석하여, 이 원하는 데이타로 데이타베이스 질의에 사용하거나, 여러분의 웹 사이트에 맞는 모양으로 변형 시켜 출력할 수 있다.

Example 19-1. Getting the title of a remote page

  1 
  2 <?php
  3   $file = fopen("http://www.php.net/", "r");
  4   if (!$file) {
  5     echo "<p>Unable to open remote file.\n";
  6     exit;
  7   }
  8   while (!feof($file)) {
  9     $line = fgets($file, 1024);
 10     /* This only works if the title and its tags are on one line. */
 11     if (eregi("<title>(.*)</title>", $line, $out)) {
 12       $title = $out[1];
 13       break;
 14     }
 15   }
 16   fclose($file);
 17 ?>
 18     

여러분은 해당 서버에 권한이 있는 사용자로 접속하고, 해당 파일이 존재하지 않는다면, FTP를 이용한 파일로 쓸 수도 있다. 'anonymous'가 아닌 사용자로 접속하려면, URL내에 username을 (필요하다면 password도) 다음과 같이 명시해야 한다 : 'ftp://user:password@ftp.example.com/path/to/file'. (또한 HTTP에서 Basic authentication을 사용한 인증을 요구하는 경우에도 이와 같은 문법을 사용할 수 있다.)

Example 19-2. Storing data on a remote server

  1 
  2 <?php
  3   $file = fopen("ftp://ftp.php.net/incoming/outputfile", "w");
  4   if (!$file) {
  5     echo "<p>Unable to open remote file for writing.\n";
  6     exit;
  7   }
  8   /* Write the data here. */
  9   fputs($file, "$HTTP_USER_AGENT\n");
 10   fclose($file);
 11 ?>
 12     

Note: 여러분은 위의 예제를 보고, 이 테크닉을 사용하여 remote log를 작성할 수 있겠다고 생각할 수도 있다. 그러나 위에 언급한대로 URL fopen() wrapper는 새 파일에만 쓸 수 있다. 여러분이 원하는 대로 분산된 log를 하고 싶다면 syslog()의 내용을 살펴보라.


Chapter 20. Connection handling

Note: 이 기능은 PHP version 3.0.7 이후부터 적용된 것들이다.

내부적으로 PHP는 연결의 상태를 다음 3가지중 하나로 설정한다. :

PHP 스크립트가 일반적으로 실행되고 있을 때는 NORMAL 상태가 active된다. 만약 원격 클라이언트가 연결을 끊게되면 ABORTED 상태 flag가 켜지게 된다. 보통 클라이언트가 연결을 끊는 것은 사용자가 STOP 버튼을 눌렀을 때 일어난다. 만약 PHP가 설정한 시간 제한에 (set_time_limit()을 보라) 걸리게 되면 TIMEOUT 상태 flag가 켜지게 된다.

여러분은 클라이언트가 연결을 끊었을 때 스크립트가 수행을 중단할 것인가 아닌가를 결정하여야 한다. 때때로 원격 브라우저가 어떤 결과도 받아들이지 않더라도 스크립트를 끝까지 실행하는 것이 편리할 때가 많다. 기본 동작은 클라이언트가 연결을 끊으면 스크립트도 중단되는 것이다. 이 동작은 ignore_user_abort라는 php3.ini 지시자(directive)나, php3_ignore_user_abort라는 Apache .conf의 지시자로 설정이 가능하고, ignore_user_abort() 함수를 사용하여 설정할 수도 있다. 만약 여러분이 PHP에게 사용자가 내린 중지 명령을 무시하라고 말해주지 않았다면, 사용자의 중지 신호는 여러분의 스크립트를 종료시킨다. 단, register_shutdown_function()을 사용하여 shutdown 함수를 등록해놓은 경우는 예외가 된다. shutdown 함수를 사용하면, 사용자가 STOP버튼을 눌렀을 때, 여러분의 스크립트는 남은 출력을 하려고 하고, PHP는 연결이 중단되었음을 인지하여 shutdown 함수를 호출하게 된다. shutdown 함수는 여러분의 스크립트가 정상적으로 종료되었을 때도 호출 된다. 따라서 클라이언트의 연결 중단 때와 일반적인 종료시에 다른 동작을 원한다면 connection_aborted() 함수를 사용하면 된다. 이 함수는 연결이 중단되었다면 true를 반환한다.

여러분의 스크립트는 내장된 타이머에 의해 종료될 수 있다. 기본 timeout 시간은 30초로 되어 있다. 이것은 max_execution_time이라는 php3.ini 지시자(directive)나 동일한 내용의 php3_max_execution_time이라는 Apache .conf 지시자에 의해 다르게 설정이 가능하고 set_time_limit() 함수를 사용하여 설정할 수도 있다. 시간이 다 되면 스크립트는 중단되고, 이 스크는 위에서 설명한 클라이언트와의 연결이 종료된 것처럼 동작한다. 따라서 shutdown 함수가 등록되어 있다면 이 함수가 실행된다. shutdown 함수내에서 이 함수가 timeout에 의해 호출된 것인가를 판단하려면 connection_timeout() 함수를 사용하면 된다. 이 함수는 timeout에 의해 shutdown 함수가 호출되었다면 true를 반환한다.

한가지 유의할 사항은 ABORTED와 TIMEOUT 상태는 두 개가 동시에 active될 수 있다는 것이다. 이것은 PHP가 사용자 중단을 무시하도록 설정해 놓았을 때 가능하다. 또 다른 경우는 사용자가 연결을 끊지는 않았지만 연결에 어떤 문제가 생겨 연결이 망가진 경우로, 이 때도 스크립트는 계속 실행된다. 이런 경우에 스크립트는 계속실행되고, 시간 제한에 걸려 스크립트의 수행이 중단되고 shutdown 함수가 호출되면, connection_timeout() connection_aborted() 함수 모두 true를 반환하게 된다. 여러분은 connection_status() 라는 함수를 사용하여 두가지 상태 모두를 검사할 수 있다. 이 함수는 각 상태에 대한 정보를 bit단위로 가지고 있다. 예를들어 위와같이 ABORT와 TIMEOUT 두 개의 상태가 모두 active되어 있다면 이 함수는 3을 반환한다.


Chapter 21. 영구적인 데이터베이스 접속 (Persistent database connections)

영구적인 접속(Persistent connection)은 여러분의 스크립트가 종료되어도 SQL link를 닫지 않는 접속을 말한다. 영구적인 접속이 요청되면, PHP는 기존의 (이전에 열어 두었던) 동일한(identical) 영구적인 접속이 있는가를 검사한다. 만약 있다면 기존의 것을 사용하고, 없다면 새로운 link를 만든다. '동일한(identical)' 접속이란 같은 호스트에 같은 사용자명(username)과 같은 암호(password)를 사용한 접속을 말한다.

가끔 웹서버의 작동과 작업의 할당에 대해 잘 알고 있지 못한 사람들은 영구적인 접속이 사실은 별 것 아니라고 오해하기도 한다. 특히, 영구적인 접속이 동일한 SQL link에서 'user sessions'를 여는데 별 나을 것도 없다던가, transaction을 효율적으로 처리하는 것도 아니라다던가, 혹은 다른 어떤 작업을 하지 못한다고도 한다. 사실, 이런 말들에 대해 명백히 말하자면, 영구적인 접속은 비영구적인 접속에 비해 어떠한 기능적인 향상도 주지 못한다.

왜?

이것은 웹서버의 동작 방법대로 동작한다. 여러분의 웹서버가 웹 페이지를 만들기위해 PHP를 이용하는데는 3가지 방법이 있다.

첫 번째 방법은 PHP를 CGI "wrapper"이 형태로 사용하는 것이다. 이 방법의 경우, 웹서버에 매 PHP 페이지가 요구될 때 마다, PHP 인터프리터의 실행이 만들어지고 종료된다. 따라서 매 요구가 종료될 때마다 인터프리터의 실행이 종료되므로, 실행 중 만들었던 (SQL link를 포함한) 모든 자원은 실행 종료와 더불어 해제된다. 이 경우 여러분은 영구적입 접속을 사용하여 어떤 이득도 얻을 수 없다. 다르게 말하면 이 경우는 영구적인 접속을 해도 영구적이 아니다.

두 번째 방법은 가장 대중적인 방법인데, PHP를 다중프로세스(multiprocess) 웹서버의 모듈로 사용하는 것이다. (현재는 Apache가 유일하다.) 다중프로세스 서버는 보통 한 개의 부모(parent) 프로세스와, 이와 유기적으로 연결되어 웹 페이지를 실제로 만드는 작업을 하는 여러개의 자식(child) 프로세스들을 가지고 있다. 클라이언트로부터 들어오는 개별 요구는 다른 클라이언트의 료구를 처리하고 있지 않은 남는 자식 프로세스로 넘겨진다. 이것은 동일한 클라이언트가 서버에 두 번째 요구를 보낼 때, 보통 처음과 다른 자식 프로세스에서 처리된다는 것을 의미한다. 이 경우 영구적인 접속을 사용하면 각각의 자식 프로세스들은 처음 요구에서만 SQL 서버에 접속하게 된다. 다른 페이지에서 SQL 서버에의 접속 요구시는 기존에 만들어진 접속을 다시 사용하게 된다.

마지막 방법은 PHP를 멀티쓰레드(multithreaded) 웹서버의 플러그-인의 형태로 작동시키는 것인데, 현재 이방법은 이론적으로만 존재하고, 실제로 만들어 진 것은 없다. ISAPI, WSAPI, NSAPI (Windows에서) 등의 방법을 사용하여 Netscape FastTrack, Microsoft's Internet Information Server (IIS), O'Reilly's WebSite Pro 등의 멀티쓰레드 웹서버에서 PHP를 플러그-인으로 동작시키려는 작업이 현재 진행중이다. 이 경우 기본 동작은 위에서 언급한 다중프로세스 모델과 동일하게 동작한다.

영구적인 접속이 실제로 아무런 기능의 향상도 주지 못한다면, 이것을 사용해 어떤 이점이 있나요?

이것에 대한 간단한 답은 효율성이다. 영구적인 접속은 SQL 서버와의 link를 만드는 것에 따른 overhead가 클 경우에 유용하다. 이  overhead는 많은 요인에 따라 커지기도 하고 작아지기도 한다. 어떤 종류의 데이터베이스인가? 웹서버와 같은 컴퓨터에 데이터베이스 서버가 있는가? SQL 서버가 어떻게 사용되고 있는가? 등에 따라 크게 달라진다. 접속에 따른 overhead가 클 경우에 영구적인 접속은 여러분에게 적지 않은 도움을 줄 것이다. 이것은 자식 process에서 SQL 서버에 접속을 요청할 때 마다 접속을 만드는 대신, 이 프로세스가 종료될 때 까지 살아있는 한 개의 접속 만을 사용한다. 이것은 모든 영구적인 접속을 사용한 프로세스는, 그에 해당하는 한 대의 영구적인 접속을 가지고 있다는 것을 의미한다. 예를 들어 SQL 서버에 대하여 영구적인 접속을 사용하는 스크립트를 실행하였던 20개의 다른 자식 프로세스가 있다면, 아마도 각각의 자식 프로세스에대해 1개씩, 20개의 SQL 접속이 있을 것이다.

중요한 요약 한가지. 영구적인 접속은 일반적인 접속에 1대1로 대응되도록 설계되었다. 이것은 스크립트의 기능은 그대로 두고, 언제라도 비영구적인 연결을 영구적인 연결로 대치할 수 있다는 것을 의미한다. 이것으로 여러분은 아마도 스크립트의 효율을 향상시킬 수 있을 것이다.


IV. Function Reference

(역자주: 이 Reference 부분은 비교적 간단한 내용들이고, 내용의 정확성을 기하기 위해 특별한 경우를 제외하고는 제목 부분만 번역하였다.)

Table of Contents
I. Apache-specific functions
II. Arbitrary precision mathematics functions
III. Array functions
IV. Aspell functions
V. Calendar functions
VI. COM support functions for Windows
VII. Class/Object Functions
VIII. ClibPDF functions
IX. Cybercash payment functions
X. DOM XML functions
XI. Compression functions
XII. Database (dbm-style) abstraction layer functions
XIII. Date and Time functions
XIV. dBase functions
XV. dbm functions
XVI. Directory functions
XVII. Dynamic Loading functions
XVIII. Encryption functions
XIX. filePro functions
XX. Filesystem functions
XXI. Forms Data Format functions
XXII. FTP functions
XXIII. GNU Gettext
XXIV. Hash functions
XXV. HTTP functions
XXVI. Hyperwave functions
XXVII. Image functions
XXVIII. IMAP, POP3, and NNTP functions
XXIX. Informix functions
XXX. InterBase functions
XXXI. LDAP functions
XXXII. Mail functions
XXXIII. Mathematical functions
XXXIV. MCAL functions
XXXV. Microsoft SQL Server functions
XXXVI. Miscellaneous functions
XXXVII. mSQL functions
XXXVIII. MySQL functions
XXXIX. Network functions
XL. NIS functions
XLI. ODBC functions
XLII. Oracle functions
XLIII. Oracle 8 functions
XLIV. PDF functions
XLV. Perl-compatible Regular Expression functions
XLVI. PHP options & information
XLVII. POSIX functions
XLVIII. PostgreSQL functions
XLIX. Program Execution functions
L. GNU Recode functions
LI. Regular expression functions
LII. Semaphore and shared memory functions
LIII. Session handling functions
LIV. SNMP functions
LV. String functions
LVI. Shockwave Flash functions
LVII. Sybase functions
LVIII. URL functions
LIX. Variable functions
LX. Vmailmgr functions
LXI. WDDX functions
LXII. XML parser functions


I. Apache Specific functions

Table of Contents
apache_lookup_uri … Perform a partial request for the specified URI and return all info about it
apache_note … Get and set apache request notes
getallheaders … Fetch all HTTP request headers
virtual … Perform an Apache sub-request

apache_lookup_uri

apache_lookup_uri -- 특정 URI에 대한 부분적인 요청(partial request)을 수행하고 그것에 대한 모든 정보를 돌려준다.

Description

class apache_lookup_uri(string filename);

This performs a partial request for a URI. It goes just far enough to obtain all the important information about the given resource and returns this information in a class. The properties of the returned class are:

status

the_request

status_line

method

content_type

handler

uri

filename

path_info

args

boundary

no_cache

no_local_copy

allowed

send_bodyct

bytes_sent

byterange

clength

unparsed_uri

mtime

request_time

apache_note

apache_note -- apache request note를 설정하거나 읽어온다.

Description

string apache_note(string note_name, string [note_value]);

apache_note() is an Apache-specific function which gets and sets values in a request's notes table. If called with one argument, it returns the current value of note note_name. If called with two arguments, it sets the value of note note_name to note_value and returns the previous value of note note_name.

getallheaders

getallheaders -- 모든 HTTP request header를 분석하여 읽어온다.

Description

array getallheaders(void);

This function returns an associative array of all the HTTP headers in the current request.

Example 1. getallheaders() Example

  1 
  2 $headers = getallheaders();
  3 while (list($header, $value) = each($headers)) {
  4     echo "$header: $value<br>\n";
  5 }
  6       

This example will display all the request headers for the current request.

Note: GetAllHeaders() 는 PHP가 모듈로 설치되었을 경우만 동작한다.

virtual

virtual -- Apache sub-request를 수행한다.

Description

int virtual(string filename);

virtual() is an Apache-specific function which is equivalent to <!--#include virtual...--> in mod_include. It performs an Apache sub-request. It is useful for including CGI scripts or .shtml files, or anything else that you would parse through Apache. Note that for a CGI script, the script must generate valid CGI headers. At the minimum that means it must generate a Content-type header. For PHP files, you need to use include() or require(); virtual() cannot be used to include a document which is itself a PHP file.

II. Arbitrary precision mathematics functions

이 BC 함수들은 PHP가 --enable-bcmath 설정 옵션으로 컴파일 된 경우에만 사용이 가능하다.

Table of Contents
bcadd … Add two arbitrary precision numbers.
bccomp … Compare two arbitrary precision numbers.
bcdiv … Divide two arbitrary precision numbers.
bcmod … Get modulus of an arbitrary precision number.
bcmul … Multiply two arbitrary precision number.
bcpow … Raise an arbitrary precision number to another.
bcscale … Set default scale parameter for all bc math functions.
bcsqrt … Get the square root of an arbitray precision number.
bcsub … Subtract one arbitrary precision number from another.

bcadd

bcadd -- 두 개의 arbitrary precision number를 더한다.

Description

string bcadd(string left operand, string right operand, int [scale]);

Adds the left operand to the right operand and returns the sum in a string. The optional scale parameter is used to set the number of digits after the decimal place in the result.

See also bcsub().

bccomp

bccomp -- 두 arbitrary precision numbers를 비교한다.

Description

int bccomp(string left operand, string right operand, int [scale]);

Compares the left operand to the right operand and returns the result as an integer. The optional scale parameter is used to set the number of digits after the decimal place which will be used in the comparion. The return value is 0 if the two operands are equal. If the left operand is larger than the right operand the return value is +1 and if the left operand is less than the right operand the return value is -1.

bcdiv

bcdiv -- 두 arbitrary precision number를 나눈다.

Description

string bcdiv(string left operand, string right operand, int [scale]);

Divides the left operand by the right operand and returns the result. The optional scale sets the number of digits after the decimal place in the result.

See also bcmul().

bcmod

bcmod -- arbitrary precision number의 나머지를 구한다.

Description

string bcmod(string left operand, string modulus);

Get the modulus of the left operand using modulus.

See also bcdiv().

bcmul

bcmul -- 두 arbitrary precision number를 곱한다.

Description

string bcmul(string left operand, string right operand, int [scale]);

Multiply the left operand by the right operand and returns the result. The optional scale sets the number of digits after the decimal place in the result.

See also bcdiv().

bcpow

bcpow -- arbitrary precision number의 n 제곱한다.

Description

string bcpow(string x, string y, int [scale]);

Raise x to the power y. The scale can be used to set the number of digits after the decimal place in the result.

See also bcsqrt().

bcscale

bcscale -- 모든 bc 수학 함수의 기본 scale parameter를 정한다.

Description

string bcscale(int scale);

This function sets the default scale parameter for all subsequent bc math functions that do not explicitly specify a scale parameter.

bcsqrt

bcsqrt -- arbitray precision number의 제곱근을 구한다.

Description

string bcsqrt(string operand, int scale);

Return the square root of the operand. The optional scale parameter sets the number of digits after the decimal place in the result.

See also bcpow().

bcsub

bcsub -- arbitrary precision number 를 뺀다.

Description

string bcsub(string left operand, string right operand, int [scale]);

Subtracts the right operand from the left operand and returns the result in a string. The optional scale parameter is used to set the number of digits after the decimal place in the result.

See also bcadd().


III. Array functions

Table of Contents
array … Create an array
array_count_values … Counts all the values of an array
array_flip … Flip all the values of an array
array_keys … Return all the keys of an array
array_merge … Merge two or more arrays
array_pad … Pad array to the specified length with a value
array_pop … Pop the element off the end of array
array_push … Push one or more elements onto the end of array
array_reverse … Return an array with elements in reverse order
array_shift … Pop an element of the beginning of array
array_slice … Extract a slice of the array
array_splice … Remove a portion of the array and replace it with something else
array_unshift … Push one or more elements onto the beginning of array
array_values … Return all the values of an array
array_walk … Apply a user function to every member of an array.
arsort … Sort an array in reverse order and maintain index association
asort … Sort an array and maintain index association
compact … Create array containing variables and their values
count … count elements in a variable
current … return the current element in an array
each … return next key/value pair from an array
end … set internal pointer of array to last element
extract … Import variables into the symbol table from an array
in_array … Return true if a value exists in an array
key … fetch a key from an associative array
krsort … Sort an array by key in reverse order
ksort … Sort an array by key.
list … assign variables as if they were an array
next … advance the internal array pointer
pos … return the current element in an array
prev … rewind internal array pointer
range … Create an array containing a range of integers
reset … set internal pointer of array to first element
rsort … Sort an array in reverse order
shuffle … Shuffle an array
sizeof … get size of array
sort … Sort an array
uasort … Sort an array with a user-defined comparison function and maintain index association
uksort … Sort an array by keys using a user-defined comparison function
usort … Sort an array by values using a user-defined comparison function

array

array -- 배열을 만든다.

Description

array array(...);

Returns an array of the parameters. The parameters can be given an index with the => operator.

Note: array() is a language construct used to represent literal arrays, and not a regular function.

The following example demonstrates how to create a two-dimensional array, how to specify keys for associative arrays, and how to skip-and-continue numeric indices in normal arrays.

Example 1. array() example

  1 
  2 $fruits = array (
  3     "fruits"  => array("a"=>"orange", "b"=>"banana", "c"=>"apple"),
  4     "numbers" => array(1, 2, 3, 4, 5, 6),
  5     "holes"   => array("first", 5 => "second", "third")
  6 );
  7       

See also: list().

array_count_values

array_count_values -- 배열의 모든 개개의 값의 갯수를 센다.

Description

array array_count_values(array input);

array_count_values() returns an array using the values of the input array as keys and their frequency in input as values.

Example 1. array_count_values() example

  1 
  2 $array = array(1, "hello", 1, "world", "hello");
  3 array_count_values($array); // returns array(1=>2, "hello"=>2, "world"=>1)
  4       

Note: This function was added in PHP 4.0.

array_flip

array_flip -- 배열 값들의 순서를 반대로 한다.

Description

array array_flip(array trans);

array_flip() returns an array in flip order.

Example 1. array_flip() example

  1 
  2 $trans = array_flip ($trans);
  3 $original = strtr ($str, $trans);
  4       

Note: This function was added in PHP 4.0.

array_keys

array_keys -- 배열의 모든 키들을 반환한다,

Description

array array_keys(array input, mixed [search_value] );

array_keys() returns the keys, numeric and string, from the input array.

If the optional search_value is specified, then only the keys for that value are returned. Otherwise, all the keys from the input are returned.

Example 1. array_keys() example

  1 
  2 $array = array(0 => 100, "color" => "red");
  3 array_keys ($array);       // returns array (0, "color")
  4 
  5 $array = array(1, 100, 2, 100);
  6 array_keys ($array, 100);  //  returns array (0, 2) 
  7       

See also array_values().

Note: This function was added in PHP 4.0.

array_merge

array_merge -- 두 개 이상의 배열을 하나로 합친다.

Description

array array_merge(array array1, array array2, [ ...] );

array_merge() merges the elements of two or more arrays together so that the values of one are appended to the end of the previous one. It returns the resulting array.

If the input arrays had the same string keys, then the later value for that key will overwrite previous one. If, however, the arrays have the same numeric key, this does not happen since the values are appended.

Example 1. array_merge() example

  1 
  2 $array1 = array ("color" => "red", 2, 4);
  3 $array2 = array ("a", "b", "color" => "green", "shape" => "trapezoid");
  4 array_merge ($array1, $array2);
  5       

Resulting array will be array("color" => "green", 2, 4, "a", "b", "shape" => "trapezoid").

Note: This function was added in PHP 4.0.

array_pad

array_pad -- 배열을 주어진 길이만큼 주어진 값으로 채운다.

Description

array array_pad(array input, int pad_size, mixed pad_value);

array_pad() returns a copy of the input padded to size specified by pad_size with value pad_value. If pad_size is positive then the array is padded on the right, if it's negative then on the left. If the absolute value of pad_size is less than or equal to the length of the input then no padding takes place.

Example 1. array_pad() example

  1 
  2 $input = array (12, 10, 9);
  3 
  4 $result = array_pad ($input, 5, 0);
  5 // result is array (12, 10, 9, 0, 0)
  6 
  7 $result = array_pad ($input, -7, -1);
  8 // result is array (-1, -1, -1, -1, 12, 10, 9)
  9 
 10 $result = array_pad ($input, 2, "noop");
 11 // not padded
 12       

array_pop

array_pop -- 배열의 맨 뒤에 있는 원소를 꺼내고 그 원소를 삭제한다.

Description

mixed array_pop(array array);

array_pop() pops and returns the last value of the array, shortening the array by one element.

Example 1. array_pop() example

  1 
  2 $stack = array ("orange", "apple", "raspberry");
  3 $fruit = array_pop ($stack);
  4       

After this, $stack has only 2 elements: "orange" and "apple", and $fruit has "raspberry".

See also array_push(), array_shift(), and array_unshift().

Note: This function was added in PHP 4.0.

array_push

array_push -- 배열의 맨 뒤에 한 개나 그 이상의 원소를 첨가한다.

Description

int array_push(array array, mixed var, [...] );

array_push() treats array as a stack, and pushes the passed variables onto the end of array. The length of array increases by the number of variables pushed. Has the same effect as:
  1 
  2 $array[] = $var;
  3      
repeated for each var.

Returns the new number of elements in the array.

Example 1. array_push() example

  1 
  2 $stack = array (1, 2);
  3 array_push($stack, "+", 3);
  4       
This example would result in $stack having 4 elements: 1, 2, "+", and 3.

See also array_pop(), array_shift(), and array_unshift().

Note: This function was added in PHP 4.0.

array_reverse

array_reverse -- 주어진 배열의 원소의 순서를 반대로 한 배열을 돌려준다.

Description

array array_reverse(array array);

array_reverse() takes input array and returns a new array with the order of the elements reversed.

Example 1. array_reverse() example

  1 
  2 $input = array ("php", 4.0, array ("green", "red"));
  3 $result = array_reverse ($input);
  4       
This makes $result have array (array ("green", "red"), 4.0, "php").

Note: This function was added in PHP 4.0 Beta 3.

array_shift

array_shift -- 배열의 맨 앞에 있는 원소를 꺼내고 그 원소를 삭제한다.

Description

mixed array_shift(array array);

array_shift() shifts the first value of the array off and returns it, shortening the array by one element and moving everything down.

Example 1. array_shift() example

  1 
  2 $args = array ("-v", "-f");
  3 $opt = array_shift ($args);
  4       
This would result in $args having one element "-f" left, and $opt being "-v".

See also array_unshift(), array_push(), and array_pop().

Note: This function was added in PHP 4.0.

array_slice

array_slice -- 배열의 일부를 추출한다.

Description

array array_slice(array array, int offset, int [length] );

array_slice() returns a sequence of elements from the array specified by the offset and length parameters.

If offset is positive, the sequence will start at that offset in the array. If offset is negative, the sequence will start that far from the end of the array.

If length is given and is positive, then the sequence will have that many elements in it. If length is given and is negative then the sequence will stop that many elements from the end of the array. If it is omitted, then the sequence will have everything from offset up until the end of the array.

Example 1. array_slice() examples

  1 
  2 $input = array ("a", "b", "c", "d", "e");
  3 
  4 $output = array_slice ($input, 2);      // returns "c", "d", and "e"
  5 $output = array_slice ($input, 2, -1);  // returns "c", "d"
  6 $output = array_slice ($input, -2, 1);  // returns "d"
  7 $output = array_slice ($input, 0, 3);   // returns "a", "b", and "c"
  8       

See also array_splice().

Note: This function was added in PHP 4.0.

array_splice

array_splice -- 배열의 일부를 삭제하고, 그 위치에 다른 내용을 끼워 넣는다.

Description

array array_splice(array input, int offset, int [length] , array [replacement] );

array_splice() removed the elements designated by offset and length from the input array, and replaces them with the elements of the replacement array, if supplied.

If offset is positive then the start of removed portion is at that offset from the beginning of the input array. If offset is negative then it starts that far from the end of the input array.

If length is omitted, removes everything from offset to the end of the array. If length is specified and is positive, then that many elements will be removed. If length is specified and is negative then the end of the removed portion will be that many elements from the end of the array. Tip: to remove everything from offset to the end of the array when replacement is also specified, use count($input) for length.

If replacement array is specified, then the removed elements are replaced with elements from this array. If offset and length are such that nothing is removed, then the elements from the replacement array are inserted in the place specified by the offset. Tip: if the replacement is just one element it is not necessary to put array() around it, unless the element is an array itself.

The following equivalences hold:
  1 
  2 array_push($input, $x, $y)     array_splice($input, count($input), 0, array($x, $y))
  3 array_pop($input)              array_splice($input, -1)
  4 array_shift($input)            array_splice($input, 0, 1)
  5 array_unshift($input, $x, $y)  array_splice($input, 0, 0, array($x, $y))
  6 $a[$x] = $y                    array_splice($input, $x, 1, $y)
  7      

Returns the array consisting of removed elements.

Example 1. array_splice() examples

  1 
  2 $input = array("red", "green", "blue", "yellow");
  3 
  4 array_splice($input, 2);      // $input is now array("red", "green")
  5 array_splice($input, 1, -1);  // $input is now array("red", "yellow")
  6 array_splice($input, 1, count($input), "orange");  
  7                               // $input is now array("red", "orange")
  8 array_splice($input, -1, 1, array("black", "maroon")); 
  9                               // $input is now array("red", "green", 
 10                               //          "blue", "black", "maroon")
 11       

See also array_slice().

Note: This function was added in PHP 4.0.

array_unshift

array_unshift -- 배열의 맨 앞에 한 개나 그 이상의 원소를 첨가한다.

Description

int array_unshift(array array, mixed var, [...] );

array_unshift() prepends passed elements to the front of the array. Note that the list of elements is prepended as a whole, so that the prepended elements stay in the same order.

Returns the new number of elements in the array.

Example 1. array_unshift() example

  1 
  2 $queue = array("p1", "p3");
  3 array_unshift($queue, "p4", "p5", "p6");
  4       
This would result in $queue having 5 elements: "p4", "p5", "p6", "p1", and "p3".

See also array_shift(), array_push(), and array_pop().

Note: This function was added in PHP 4.0.

array_values

array_values -- 배열의 모든 값들을 반환한다.

Description

array array_values(array input);

array_values() returns all the values from the input array.

Example 1. array_values() example

  1 
  2 $array = array("size" => "XL", "color" => "gold");
  3 array_values($array);    // returns array("XL", "gold")
  4       

Note: This function was added in PHP 4.0.

array_walk

array_walk -- 배열의 개개의 원소에 특정 함수를 적용하여 수행한다.

Description

int array_walk(array arr, string func, mixed userdata);

Applies the function named by func to each element of arr. func will be passed array value as the first parameter and array key as the second parameter. If userdata is supplied, it will be passed as the third parameter to the user function.

If func requires more than two or three arguments, depending on userdata, a warning will be generated each time array_walk() calls func. These warnings may be suppressed by prepending the '@' sign to the array_walk() call, or by using error_reporting().

Note: If func needs to be working with the actual values of the array, specify that the first parameter of func should be passed by reference. Then any changes made to those elements will be made in the array itself.

Note: Passing the key and userdata to func was added in 4.0.

In PHP 4 reset() needs to be called as necessary since array_walk() does not reset the array by default.

Example 1. array_walk() example

  1 
  2 $fruits = array ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
  3 
  4 function test_alter (&$item1, $key, $prefix) {
  5    $item1 = "$prefix: $item1";
  6 }
  7 
  8 function test_print ($item2, $key) {
  9    echo "$key. $item2<br>\n";
 10 }
 11 
 12 array_walk ($fruits, 'test_print');
 13 reset ($fruits);
 14 array_walk ($fruits, 'test_alter', 'fruit');
 15 reset ($fruits);
 16 array_walk ($fruits, 'test_print');
 17       

See also each() and list().

arsort

arsort -- 배열을 역순으로 정렬하고 index association을 유지한다.

Description

void arsort(array array);

This function sorts an array such that array indices maintain their correlation with the array elements they are associated with. This is used mainly when sorting associative arrays where the actual element order is significant.

Example 1. arsort() example

  1 
  2 $fruits = array ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
  3 arsort ($fruits);
  4 for (reset ($fruits); $key = key ($fruits); next ($fruits)) {
  5     echo "fruits[$key] = ".$fruits[$key]."\n";
  6 }
  7       
This example would display: fruits[a] = orange fruits[d] = lemon fruits[b] = banana fruits[c] = apple The fruits have been sorted in reverse alphabetical order, and the index associated with each element has been maintained.

See also: asort(), rsort(), ksort(), and sort().

asort

asort -- 배열을 정렬하고 index association을 유지한다.

Description

 

void asort(array array);

This function sorts an array such that array indices maintain their correlation with the array elements they are associated with. This is used mainly when sorting associative arrays where the actual element order is significant.

Example 1. asort() example

  1 
  2 $fruits = array ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
  3 asort ($fruits);
  4 for (reset ($fruits); $key = key ($fruits); next ($fruits)) {
  5     echo "fruits[$key] = ".$fruits[$key]."\n";
  6 }
  7       
This example would display: fruits[c] = apple fruits[b] = banana fruits[d] = lemon fruits[a] = orange The fruits have been sorted in alphabetical order, and the index associated with each element has been maintained.

See also arsort(), rsort(), ksort(), and sort().

compact

compact -- 주어진 여러 변수의 이름과 값을 가지는 배열을 만든다.

Description

array compact(string varname | array varnames, [...] );

compact() takes a variable number of parameters. Each parameter can be either a string containing the name of the variable, or an array of variable names. The array can contain other arrays of variable names inside it; compact() handles it recursively.

For each of these, compact() looks for a variable with that name in the current symbol table and adds it to the output array such that the variable name becomes the key and the contents of the variable become the value for that key. In short, it does the opposite of extract(). It returns the output array with all the variables added to it.

Example 1. compact() example

  1 
  2 $city = "San Francisco";
  3 $state = "CA";
  4 $event = "SIGGRAPH";
  5 
  6 $location_vars = array ("city", "state");
  7 
  8 $result = compact ("event", $location_vars);
  9       

After this, $result will be array ("event" => "SIGGRAPH", "city" => "San Francisco", "state" => "CA").

See also extract().

Note: This function was added in PHP 4.0.

count

count -- 배열 변수의 원소 개수를 구한다.

Description

int count(mixed var);

Returns the number of elements in var, which is typically an array (since anything else will have one element).

Returns 1 if the variable is not an array.

Returns 0 if the variable is not set.

Warning

count() may return 0 for a variable that isn't set, but it may also return 0 for a variable that has been initialized with an empty array. Use isset() to test if a variable is set.

See also: sizeof(), isset(), and is_array().

current

current -- 배열의 현재 원소를 돌려준다.

Description

mixed current(array array);

각각의 배열 변수는 그것의 원소를 가르키는 내부적인 pointer를 가지고 있다. 게다가, 배열의 모든 원소들은 검색이 용이하도록 양방향 linked list로 연결되어 있다. 이 내부적인 pointer는 다른 어떤 조작을 하기 전에는 항상 첫 번째 요소를 가르키고 있다.

current() 함수는 단순히 내부적인 Pointer가 가르키고 있는 원소를 반환할 뿐이다. 만약 이 pointer가 원소 list의 범위를 넘어서 지시하고 있다면 current()는 false를 반환한다.

Warning

current()는 현재 원소가 0이나 ""(빈 문자열)의 값을 가지고 있으면 false을 반환한다. 따라서 이 current() 함수는 원소의 값이 0인가 아니면 배열의 범위를 넘었는가를 판단할 수 없다. current()를 사용한 loop 코딩보다는  each() 함수를 사용하는 것이 좋다.

See also: end(), next(), prev() and reset().

each

each -- 배열에서 다음 key/value 쌍을 돌려준다.

Description

array each(array array);

array 배열에서 다음 key/value 쌍을 반환한다. 이 쌍은 네 개의 원소를 가진 배열로 반환되는데 이 네 개의 원소의 key는 0, 1, key, value이다. 0key 원소는 각각 변수의 key 이름을 가지고, 1value는 그 값을 가지고 있다.

Example 1. each() examples

  1 
  2 $foo = array ("bob", "fred", "jussi", "jouni", "egon", "marliese");
  3 $bar = each ($foo);
  4       

$bar now contains the following key/value pairs:

  • 0 => 0
  • 1 => 'bob'
  • key => 0
  • value => 'bob'
  1 
  2 $foo = array ("Robert" => "Bob", "Seppo" => "Sepi");
  3 $bar = each ($foo);
  4        

$bar now contains the following key/value pairs:

  • 0 => 'Robert'
  • 1 => 'Bob'
  • key => 'Robert'
  • value => 'Bob'

보통 each()list() 함수와 함께 배열을 탐색하는데 사용된다. 예를 들어 다음과 같이 $HTTP_POST_VARS와 같은 배열을 탐색하는데 많이 사용된다

Example 2. Traversing $HTTP_POST_VARS with each()

  1 
  2 echo "Values submitted via POST method:<br>";
  3 reset ($HTTP_POST_VARS);
  4 while (list ($key, $val) = each ($HTTP_POST_VARS)) {
  5     echo "$key => $val<br>";
  6 }
  7       

After each() has executed, the array cursor will be left on the next element of the array, or on the last element if it hits the end of the array.

See also key(), current(), reset(), next(), and prev().

end

end -- 배열의 내부적인(internal) pointer를 맨 마지막 원소로 옮긴다.

Description

end(array array);

end() advances array's internal pointer to the last element.

See also: current(), end() next() and reset()

extract

extract -- 배열의 내용을 심볼 테이블로 읽어들여 일반적인 변수로 만든다.

Description

void extract(array var_array, int [extract_type] , string [prefix] );

This function is used to import variables from an array into the current symbol table. It takes associative array var_array and treats keys as variable names and values as variable values. For each key/value pair it will create a variable in the current symbol table, subject to extract_type and prefix parameters.

extract() checks for colissions with existing variables. The way collisions are treated is determined by extract_type. It can be one of the following values:

EXTR_OVERWRITE

If there is a collision, overwrite the existing variable.

EXTR_SKIP

If there is a collision, don't overwrite the existing variable.

EXTR_PREFIX_SAME

If there is a collision, prefix the new variable with prefix.

EXTR_PREFIX_ALL

Prefix all variables with prefix.

If extract_type is not specified, it is assumed to be EXTR_OVERWRITE.

Note that prefix is only required if extract_type is EXTR_PREFIX_SAME or EXTR_PREFIX_ALL.

extract() checks each key to see if it constitues a valid variable name, and if it does only then does it proceed to import it.

A possible use for extract is to import into symbol table variables contained in an associative array returned by wddx_deserialize().

Example 1. Extract() example

  1 
  2 <php?
  3 
  4 /* Suppose that $var_array is an array returned from
  5    wddx_deserialize */
  6 
  7 $size = "large";
  8 $var_array = array ("color" => "blue",
  9                     "size"  => "medium",
 10                     "shape" => "sphere");
 11 extract ($var_array, EXTR_PREFIX_SAME, "wddx");
 12 
 13 print "$color, $size, $shape, $wddx_size\n";
 14 
 15 ?>
 16       

The above example will produce:
  1 
  2 blue, large, sphere, medium
  3      

The $size wasn't overwritten, becaus we specified EXTR_PREFIX_SAME, which resulted in $wddx_size being created. If EXTR_SKIP was specified, then $wddx_size wouldn't even have been created. EXTR_OVERWRITE would have cause $size to have value "medium", and EXTR_PREFIX_ALL would result in new variables being named $wddx_color, $wddx_size, and $wddx_shape.

in_array

in_array -- 배열에 찾는 값이 있으면 true를 반환한다.

Description

bool in_array(mixed needle, array haystack);

Searches haystack for needle and returns true if it is found in the array, false otherwise.

Example 1. in_array() example

  1 
  2 $os = array ("Mac", "NT", "Irix", "Linux");
  3 if (in_array ("Irix", $os))
  4     print "Got Irix";
  5       

Note: This function was added in PHP 4.0.

key

key --배열(associative array)에서 내부적인(internal) pointer가 가리키고 있는 원소의 key 값을 가져온다.

Description

mixed prev(array array);

key() returns the index element of the current array position.

See also: current() next()

krsort

krsort -- key 순으로 배열을 큰것서 작은순서로 정렬한다.

Description

int krsort(array array);

Sorts an array by key in reverse order, maintaining key to data correlations. This is useful mainly for associative arrays.

Example 1. krsort() example

  1 
  2 $fruits = array ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
  3 krsort ($fruits);
  4 for (reset ($fruits); $key = key ($fruits); next ($fruits)) {
  5     echo "fruits[$key] = ".$fruits[$key]."\n";
  6 }
  7       
This example would display: fruits[d] = lemon fruits[c] = apple fruits[b] = banana fruits[a] = orange

See also asort(), arsort(), ksort(), sort(), and rsort().

ksort

ksort -- key 순으로 배열을 정렬한다.

Description

int ksort(array array);

Sorts an array by key, maintaining key to data correlations. This is useful mainly for associative arrays.

Example 1. ksort() example

  1 
  2 $fruits = array ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
  3 ksort ($fruits);
  4 for (reset ($fruits); $key = key ($fruits); next ($fruits)) {
  5     echo "fruits[$key] = ".$fruits[$key]."\n";
  6 }
  7       
This example would display: fruits[a] = orange fruits[b] = banana fruits[c] = apple fruits[d] = lemon

See also asort(), arsort(), sort(), and rsort().

list

list -- 변수를 배열인 것처럼 만든다.

Description

void list(...);

Like array(), this is not really a function, but a language construct. list() is used to assign a list of variables in one operation.

Example 1. list() example

  1 
  2 <table>
  3  <tr>
  4   <th>Employee name</th>
  5   <th>Salary</th>
  6  </tr>
  7 
  8 <?php
  9 
 10 $result = mysql($conn, "SELECT id, name, salary FROM employees");
 11 while (list($id, $name, $salary) = mysql_fetch_row($result)) {
 12     print(" <tr>\n".
 13           "  <td><a href=\"info.php3?id=$id\">$name</a></td>\n".
 14           "  <td>$salary</td>\n".
 15           " </tr>\n");
 16 }
 17 
 18 ?>
 19 
 20 </table>
 21       

See also: array().

next

next -- 배열의 internal pointer를 하나 전진시킨다.

Description

mixed next(array array);

Returns the array element in the next place that's pointed by the internal array pointer, or false if there are no more elements.

next() behaves like current(), with one difference. It advances the internal array pointer one place forward before returning the element. That means it returns the next array element and advances the internal array pointer by one. If advancing the internal array pointer results in going beyond the end of the element list, next() returns false.

Warning

If the array contains empty elements then this function will return false for these elements as well. To properly traverse an array which may contain empty elements see the each() function.

See also: current(), end() prev() and reset()

pos

pos -- 배열의 현재 원소를 return한다.

Description

mixed pos(array array);

This is an alias for current().

See also: end(), next(), prev() and reset().

prev

prev -- 배열의 internal pointer를 하나 뒤로 후진시킨다.

Description

mixed prev(array array);

Returns the array element in the previous place that's pointed by the internal array pointer, or false if there are no more elements.

Warning

If the array contains empty elements then this function will return false for these elements as well. To properly traverse an array which may contain empty elements see the each() function.

prev() behaves just like next(), except it rewinds the internal array pointer one place instead of advancing it.

See also: current(), end() next() and reset()

range

range -- 일정 범위에 있는 정수값을 일렬로 가진 배열을 만든다.

Description

array range(int low, int high);

range() returns an array of integers from low to high, inclusive.

이 함수의 사용 예는 shuffle()에 나와있다.

reset

reset -- 배열의 internal pointer를 맨 처음 원소로 설정한다.

Description

mixed reset(array array);

reset() rewinds array's internal pointer to the first element.

reset() returns the value of the first array element.

See also: current(), next() prev() and reset()

rsort

rsort -- 배열을 역순으로 정렬한다.

Description

void rsort(array array);

This function sorts an array in reverse order (highest to lowest).

Example 1. rsort() example

  1 
  2 $fruits = array ("lemon", "orange", "banana", "apple");
  3 rsort ($fruits);
  4 for (reset ($fruits); list ($key, $value) = each ($fruits); ) {
  5     echo "fruits[$key] = ", $value, "\n";
  6 }
  7       
This example would display: fruits[0] = orange fruits[1] = lemon fruits[2] = banana fruits[3] = apple The fruits have been sorted in reverse alphabetical order.

See also arsort(), asort(), ksort(), and sort().

shuffle

shuffle -- 배열의 내용을 뒤섞는다.

Description

void shuffle(array array);

This function shuffles (randomizes the order of the elements in) an array.

Example 1. shuffle() example

  1 
  2 $numbers = range (1,20);
  3 srand (time());
  4 shuffle ($numbers);
  5 while (list(, $number) = each ($numbers)) {
  6     echo "$number ";
  7 }
  8       

See also arsort(), asort(), ksort(), rsort(), sort() and usort().

sizeof

sizeof -- 배열의 크기를 구한다. 원소의 개수가 구해진다.

Description

int sizeof(array array);

Returns the number of elements in the array.

See also: count()

sort

sort -- 배열을 정렬한다.

Description

void sort(array array);

This function sorts an array. Elements will be arranged from lowest to highest when this function has completed.

Example 1. sort() example

  1 
  2 $fruits = array ("lemon", "orange", "banana", "apple");
  3 sort ($fruits);
  4 for (reset ($fruits); $key = key ($fruits); next ($fruits)) {
  5     echo "fruits[$key] = ".$fruits[$key]."\n";
  6 }
  7       
This example would display: fruits[0] = apple fruits[1] = banana fruits[2] = lemon fruits[3] = orange The fruits have been sorted in alphabetical order.

 See also arsort(), asort(), ksort(), rsort(), and usort().

uasort

uasort -- 사용자가 지정한 비교 함수를 사용하여 정렬하고 index association을 유지한다.

Description

void uasort(array array, function cmp_function);

This function sorts an array such that array indices maintain their correlation with the array elements they are associated with. This is used mainly when sorting associative arrays where the actual element order is significant. The comparison function is user-defined.

uksort

uksort -- 사용자가 지정한 비교 함수를 사용하여 key 순으로 정렬한다.

Sort an array by keys using a user-defined comparison function

Description

void uksort(array array, function cmp_function);

This function will sort the keys of an array using a user-supplied comparison function. If the array you wish to sort needs to be sorted by some non-trivial criteria, you should use this function.

Example 1. uksort() example

  1 
  2 function mycompare ($a, $b) {   
  3     if ($a == $b) return 0;
  4     return ($a > $b) ? -1 : 1;
  5 }
  6 $a = array (4 => "four", 3 => "three", 20 => "twenty", 10 => "ten");
  7 uksort ($a, mycompare);
  8 while (list ($key, $value) = each ($a)) {
  9     echo "$key: $value\n";
 10 }
 11       
This example would display: 20: twenty 10: ten 4: four 3: three

See also arsort(), asort(), uasort(), ksort(), rsort() and sort().

usort

usort -- 사용자가 지정한 비교 함수를 사용하여 value 순으로 정렬한다.

Description

 void usort(array array, function cmp_function);

This function will sort an array by its values using a user-supplied comparison function. If the array you wish to sort needs to be sorted by some non-trivial criteria, you should use this function.

The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second. If two members compare as equal, their order in the sorted array is undefined.

Example 1. usort() example

  1 
  2 function cmp ($a, $b) {   
  3     if ($a == $b) return 0;
  4     return ($a > $b) ? -1 : 1;
  5 }
  6 $a = array (3, 2, 5, 6, 1);
  7 usort ($a, cmp);
  8 while (list ($key, $value) = each ($a)) {
  9     echo "$key: $value\n";
 10 }
 11       
This example would display: 0: 6 1: 5 2: 3 3: 2 4: 1

Note: Obviously in this trivial case the rsort() function would be more appropriate.

Warning

The underlying quicksort function in some C libraries (such as on Solaris systems) may cause PHP to crash if the comparison function does not return consistent values.

See also arsort(), asort(), ksort(), rsort() and sort().


IV. Aspell functions

aspell() 함수들은 여러분에게 단어의 철자를 검사하고 수정사항을 조언해 준다.

이 함수들을 사용하려면 aspell 라이브러리가 필요하다. 다음 사이트에서 찾을 수 있을 것이다. : http://metalab.unc.edu/kevina/aspell/

Table of Contents
aspell_new … load a new dictionary
aspell_check … check a word
aspell_check-raw … check a word without changing its case or trying to trim it
aspell_suggest … suggest spellings of a word

aspell_new

aspell_new -- 새 사전을 읽어 온다.

Description

int aspell_new(string master, string personal);

aspell_new() opens up a new dictionary and returns the dictionary link identifier for use in other aspell functions.

Example 1. aspell_new

  1 
  2 $aspell_link=aspell_new("english");
  3       

aspell_check

aspell_check -- 단어를 검사한다.

Description

boolean aspell_check(int dictionary_link, string word);

aspell_check() checks the spelling of a word and returns true if the spelling is correct, false if not.

Example 1. aspell_check

  1 
  2 $aspell_link=aspell_new("english");
  3 if (aspell_check($aspell_link,"testt")) {
  4     echo "This is a valid spelling";
  5 } else {
  6     echo "Sorry, wrong spelling";
  7 }
  8       

aspell_check-raw

aspell_check-raw -- 단어의 대/소문자를 변환하지 않고, 앞뒤의 공백도 제거하지 않은 채로 검사한다.

Description

boolean aspell_check_raw(int dictionary_link, string word);

aspell_check_raw() checks the spelling of a word, without changing its case or trying to trim it in any way and returns true if the spelling is correct, false if not.

Example 1. aspell_check_raw

  1 
  2 $aspell_link=aspell_new("english");
  3 if (aspell_check_raw($aspell_link,"testt")) {
  4     echo "This is a valid spelling";
  5 } else {
  6     echo "Sorry, wrong spelling";
  7 }
  8       

aspell_suggest

aspell_suggest -- 단어의 철자를 조언해 준다.

Description

array aspell_suggest(int dictionary_link, string word);

aspell_suggest() returns an array of possible spellings for the given word.

Example 1. aspell_suggest

  1 
  2 $aspell_link=aspell_new("english");
  3 
  4 if (!aspell_check($aspell_link,"testt")) {
  5     $suggestions=aspell_suggest($aspell_link,"testt");
  6 
  7     for($i=0; $i < count($suggestions); $i++) {
  8        echo "Possible spelling: " . $suggestions[$i] . "<br>"; 
  9     }
 10 }
 11       


V. Calendar functions

PHP에는 서로 다른 날짜(달력) 형태를 변환시켜 주는 함수들을 제공한다. Julian Day Count가 기본이 된다. 이것은 BC4000년의 어느 시점을 기준으로 잡아 그곳에서부터 얼마의 날짜가 지났는지를 기준으로 삼는 것이다. 이 Julian Day Count는 일반적으로 사용하는 Julian 달력과는 다르다는 것을 알아두자. Calendar 시스템에 대해 자세히 알고 싶다면 http://genealogy.org/~scottlee/cal-overview.html를 방문하여 보라. 이 설명서중에서는 위의 페이지에서 발췌된 내용을 ""로 둘러 싸고 있다.

( 역자주 : 이 함수들은 dl/calender extension을 Load한 후에 사용가능하다. dl/README 파일을 읽어보라. )

Table of Contents
JDToGregorian … Converts Julian Day Count to Gregorian date
GregorianToJD … Converts a Gregorian date to Julian Day Count
JDToJulian … Converts a Julian Calendar date to Julian Day Count
JulianToJD … Converts a Julian Calendar date to Julian Day Count
JDToJewish … Converts a Julian Day Count to the Jewish Calendar
JewishToJD … Converts a date in the Jewish Calendar to Julian Day Count
JDToFrench … Converts a Julian Day Count to the French Republican Calendar
FrenchToJD … Converts a date from the French Republican Calendar to a Julian Day Count
JDMonthName … Returns a month name
JDDayOfWeek … Returns the day of the week
easter_date … get UNIX timestamp for midnight on Easter of a given year
easter_days … get number of days after March 21 on which Easter falls for a given year

JDToGregorian

JDToGregorian -- Julian Day Count를 Gregorian date로 변환

Description

string jdtogregorian(int julianday);

Converts Julian Day Count to a string containing the Gregorian date in the format of "month/day/year"

GregorianToJD

GregorianToJD -- Gregorian date를 Julian Day Count로 변환

Description

int gregoriantojd(int month, int day, int year);

Valid Range for Gregorian Calendar 4714 B.C. to 9999 A.D.

Although this software can handle dates all the way back to 4714 B.C., such use may not be meaningful. The Gregorian calendar was not instituted until October 15, 1582 (or October 5, 1582 in the Julian calendar). Some countries did not accept it until much later. For example, Britain converted in 1752, The USSR in 1918 and Greece in 1923. Most European countries used the Julian calendar prior to the Gregorian.

Example 1. Calendar functions

  1 
  2 <?php
  3 $jd = GregorianToJD(10,11,1970);
  4 echo("$jd\n");
  5 $gregorian = JDToGregorian($jd);
  6 echo("$gregorian\n");
  7 ?>
  8 

JDToJulian

JDToJulian -- Julian Day Count를 Julian Calendar date로 변환

Description

string jdtojulian(int julianday);

Converts Julian Day Count to a string containing the Julian Calendar Date in the format of "month/day/year".

JulianToJD

JulianToJD -- Julian Calendar date를 Julian Day Count로 변환

Description

int juliantojd(int month, int day, int year);

Valid Range for Julian Calendar 4713 B.C. to 9999 A.D.

Although this software can handle dates all the way back to 4713 B.C., such use may not be meaningful. The calendar was created in 46 B.C., but the details did not stabilize until at least 8 A.D., and perhaps as late at the 4th century. Also, the beginning of a year varied from one culture to another - not all accepted January as the first month.

JDToJewish

JDToJewish -- Julian Day Count를 the 유대 Calendar로 변환.

Description

string jdtojewish(int julianday);

Converts a Julian Day Count the the Jewish Calendar.

JewishToJD

JewishToJD -- 유대 Calendar를 Julian Day Count로 변환.

Description

int jewishtojd(int month, int day, int year);

Valid Range Although this software can handle dates all the way back to the year 1 (3761 B.C.), such use may not be meaningful.

The Jewish calendar has been in use for several thousand years, but in the early days there was no formula to determine the start of a month. A new month was started when the new moon was first observed.

JDToFrench

JDToFrench -- Julian Day Count를 French Republican Calendar로 변환.

Description

string jdtofrench(int month, int day, int year);

Converts a Julian Day Count to the French Republican Calendar.

FrenchToJD

FrenchToJD -- French Republican Calendar를 Julian Day Count로 변환.

Description

int frenchtojd(int month, int day, int year);

Converts a date from the French Republican Calendar to a Julian Day Count

These routines only convert dates in years 1 through 14 (Gregorian dates 22 September 1792 through 22 September 1806). This more than covers the period when the calendar was in use.

JDMonthName

JDMonthName -- 월의 이름을 반환

Description

string jdmonthname(int julianday, int mode);

Returns a string containing a month name. mode tells this function which calendar to convert the Julian Day Count to, and what type of month names are to be returned.

Table 1. Calendar modes

Mode

Meaning

0

Gregorian - apreviated

1

Gregorian

2

Julian - apreviated

3

Julian

4

Jewish

5

French Republican

JDDayOfWeek

JDDayOfWeek -- 해당 날짜의 요일을 반환한다.

Description

mixed jddayofweek(int julianday, int mode);

Returns the day of the week. Can return a string or an int depending on the mode.

Table 1. Calendar week modes

Mode

Meaning

0

returns the day number as an int (0=sunday, 1=monday, etc)

1

returns string containing the day of week (english-gregorian)

2

returns a string containing the abreviated day of week (english-gregorian)

easter_date

easter_date -- 주어진 연도의 부활절의 자정에 대한 UNIX timestamp를 얻는다.

Description

int easter_date(int year);

Returns the UNIX timestamp corresponding to midnight on Easter of the given year. If no year is specified, the current year is assumed.

Warning: This function will generate a warning if the year is outside of the range for UNIX timestamps (i.e. before 1970 or after 2037).

Example 1. easter_date() example

  1 
  2 echo date( "M-d-Y", easter_date(1999) );        /* "Apr-04-1999" */
  3 echo date( "M-d-Y", easter_date(2000) );        /* "Apr-23-2000" */
  4 echo date( "M-d-Y", easter_date(2001) );        /* "Apr-15-2001" */
  5 

The date of Easter Day was defined by the Council of Nicaea in AD325 as the Sunday after the first full moon which falls on or after the Spring Equinox. The Equinox is assumed to always fall on 21st March, so the calculation reduces to determining the date of the full moon and the date of the following Sunday. The algorithm used here was introduced around the year 532 by Dionysius Exiguus. Under the Julian Calendar (for years before 1753) a simple 19-year cycle is used to track the phases of the Moon. Under the Gregorian Calendar (for years after 1753 - devised by Clavius and Lilius, and introduced by Pope Gregory XIII in October 1582, and into Britain and its then colonies in September 1752) two correction factors are added to make the cycle more accurate.

(The code is based on a C program by Simon Kershaw, <webmaster@ely.anglican.org>)

See easter_days() for calculating Easter before 1970 or after 2037.

easter_days

easter_days -- 주어진 연도의 부활절이 3월 21일로부터 며칠이 지난 것인지를 얻는다.

Description

int easter_days(int year);

Returns the number of days after March 21 on which Easter falls for a given year. If no year is specified, the current year is assumed.

This function can be used instead of easter_date() to calculate Easter for years which fall outside the range of UNIX timestamps (i.e. before 1970 or after 2037).

Example 1. easter_date() example

  1 
  2 echo easter_days(1999);        /* 14, i.e. April 4   */
  3 echo easter_days(1492);        /* 32, i.e. April 22  */
  4 echo easter_days(1913);        /*  2, i.e. March 23  */
  5 

The date of Easter Day was defined by the Council of Nicaea in AD325 as the Sunday after the first full moon which falls on or after the Spring Equinox. The Equinox is assumed to always fall on 21st March, so the calculation reduces to determining the date of the full moon and the date of the following Sunday. The algorithm used here was introduced around the year 532 by Dionysius Exiguus. Under the Julian Calendar (for years before 1753) a simple 19-year cycle is used to track the phases of the Moon. Under the Gregorian Calendar (for years after 1753 - devised by Clavius and Lilius, and introduced by Pope Gregory XIII in October 1582, and into Britain and its then colonies in September 1752) two correction factors are added to make the cycle more accurate.

(The code is based on a C program by Simon Kershaw, <webmaster@ely.anglican.org>)

See also easter_date().


VI. COM support functions for Windows

이 함수들은 윈도우 버전의 PHP에서만 작동한다. 이 함수들은 PHP4에서 추가되었다.

Table of Contents
com_load … ???
com_invoke … ???
com_propget … ???
com_get … ???
com_propput … ???
com_propset … ???
com_set … ???

com_load

(PHP3 >= 3.0.3, PHP4 )

com_load -- ???

Description

string com_load (string module name [, string server name])

com_invoke

(PHP3 >= 3.0.3, PHP4 )

com_invoke -- ???

Description

mixed com_invoke (resource object, string function_name [, mixed function parameters, ...])

com_propget

(PHP3 >= 3.0.3, PHP4 )

com_propget -- ???

Description

mixed com_propget (resource object, string property)

com_get

(PHP3 >= 3.0.3, PHP4 )

com_get -- ???

Description

mixed com_get (resource object, string property)

com_propput

(PHP3 >= 3.0.3, PHP4 )

com_propput -- ???

Description

void com_propput (resource object, string property, mixed value)

com_propset

(PHP3 >= 3.0.3, PHP4 )

com_propset -- ???

Description

void com_propset (resource object, string property, mixed value)

This function is an alias for com_propput().

com_set

(PHP3 >= 3.0.3, PHP4 )

com_set -- ???

Description

void com_set (resource object, string property, mixed value)

This function is an alias for com_set().


VII. Class/Object Functions

Table of Contents
get_class_methods … Returns an array of class methods' names
get_class_vars … Returns an array of default properties of the class
get_object_vars … Returns an array of object properties
method_exists … Checks if the class method exists

get_class_methods

(PHP4 >= 4.0RC1)

get_class_methods -- 클래스의 methods 이름을 배열로 반환한다.

Description

array get_class_methods (string class_name)

This function returns an array of method names defined for the class specified by class_name.

get_class_vars

(PHP4 >= 4.0RC1)

get_class_vars -- 클래스의 default properties 이름을 배열로 반환한다.

Returns an array of default properties of the class

Description

array get_class_vars (string class_name)

This function will return an array of default properties of the class.

get_object_vars

(PHP4 >= 4.0RC1)

get_object_vars -- 객체(object)의 properties를 배열로 반환한다.

Description

array get_class_vars (object obj)

This function returns an array of object properties for the specified object obj.

method_exists

(PHP4 >= 4.0b2)

method_exists -- 해당 클래스의 method 가 존재하는가를 검사한다.

Checks if the class method exists

Description

bool method_exists (object object, string method_name)

This function returns true if the method given by method_name has been defined for the given object, false otherwise.


VIII. ClibPDF functions

ClibPDF는 PHP에서 pdf 문서를 만들 수 있게 해 준다. 이것은 FastIO에서 구할 수 있으나 무료(free software)는 아니다. 여러분은 ClibPDF를 사용하기 전에 라이센스를 자세히 읽어봐야 할 것이다. 만약 여러분이 이 라이센스에 동의하기를 원하지 않으면 Thomas Merz의 pdflib의 사용을 고려 할 수도 있다. pdflib도 역시 강력한 기능을 가지고 있다. ClibPDF는 Thomas Merz의 pdflib와 기능이나 API가 매우 유사하지만, FastIO에 따르면 ClibPDF는 문서를 더 작은 크기로 더 빠르게 만들 수 있다고 한다. ClibPDF는 pdflib 새로운 2.0 버전에서 변화된 것 같다. 간단한 예제(pdflib 2.0의 pdfclock.c를 php 스크립트로 고친 것)에서는 실질적인 속도의 차이는 없었다. 또한 압축기능을 꺼 놓으면 두 개의 파일 크기도 비슷하다.

여기의 설면은 ClibPDF의 매뉴얼과 같이 읽는 것이 좋을 것이다. 이 매뉴얼은 라이브러리에 대한 더 자세한 설명을 하고 있다. ClibPDF의 매뉴얼의 내용을 이해여야 여러분은 PHP에서 이 라이브러리를 사용할 수 있을 것이다.

대부분의 PHP 모듈의 함수이름은 ClibPDF 고유의 함수(pdflib도 마찬가지고) 이름과 동일하다. cpdf_open() 을 제외한 모든 함수들은 첫 번째 인수로 작업할 문서의 핸들을 가지게 된다. 현재 ClibPDF가 동시에 여러개의 PDF 문서를 만들지 못하기 때문에 이 핸들은 내부적으로 아무 의미가 없다. 그러나 이를 시험하지는 말라. 어떤 결과가 나올지 알 수 없다. 더구나 멀티 쓰레드 환경에서는 중대한 오류가 생길 수도 있다. ClibPDF의 제작자에 따르면 이 내용은 다음 버전에서 수정될 것이라고 한다.(현재 버전은 1.10이다.) 여러문서를 동시에 만드는 기능이 필요하다면 pdflib module을 사용하도록 하라.

pdflib에 비해서 ClibPDF의 가장 큰 장점은 pdf 문서를 임시 파일을 사용하지 않고 메모리 상에서 만들 수 있다는 점이다. 또한 ClibPDF는 미리 정의된 유닛 길이의 좌표를 넘겨줄 수 있다. 이것은 매유 편리한 기능이지만 pdflib에서도 pdf_translate()를 사용하면 비슷한 기능을 할 수 있다.

대부분의 함수들은 사용하기 쉽다. 간단한 pdf 문서를 하나 만들어보면 별로 어렵지 않다는 것을 알 수 있을 것이다. 다음 예를 보면 쉽게 시작할 수 있다. 이것은 한 장짜리 test.pdf라는 파일을 만드는 것이다. 이 페이지에는 외곽선 30pt의 "Times-Roman" 폰트의 text가 쓰여진다. 이 text는 밑줄이 그어진다.

Example 1. Simple ClibPDF Example

  1 
  2 <?php
  3 $cpdf = cpdf_open(0);
  4 cpdf_page_init($cpdf, 1, 0, 595, 842);
  5 cpdf_add_outline($cpdf, 0, 0, 0, 1, "Page 1");
  6 cpdf_set_font($cpdf, "Times-Roman", 30, "WinAnsiEncoding");
  7 cpdf_set_text_rendering($cpdf, 1);
  8 cpdf_text($cpdf, "Times Roman outlined", 50, 750);
  9 cpdf_moveto($cpdf, 50, 740);
 10 cpdf_lineto($cpdf, 330, 740);
 11 cpdf_stroke($cpdf);
 12 cpdf_finalize($cpdf);
 13 Header("Content-type: application/pdf");
 14 cpdf_output_buffer($cpdf);
 15 cpdf_close($cpdf);
 16 ?>
 17     

pdflib 배포본에 보면 아나로그 시계가 포함된 여러 페이지의 문서를 만드는 조금은 복잡한 예제가 있다. 여기 그 예제를 ClibPDF 확장을 사용한 PHP로 변환한 예가 있다.

Example 2. pdfclock example from pdflib 2.0 distribution

  1 
  2 <?php
  3 $radius = 200;
  4 $margin = 20;
  5 $pagecount = 40;
  6 
  7 $pdf = cpdf_open(0);
  8 cpdf_set_creator($pdf, "pdf_clock.php3");
  9 cpdf_set_title($pdf, "Analog Clock");
 10   
 11 while($pagecount-- > 0) {
 12   cpdf_page_init($pdf, $pagecount+1, 0, 2 * ($radius + $margin), 2 * ($radius + $margin), 1.0);
 13   
 14   cpdf_set_page_animation($pdf, 4, 0.5, 0, 0, 0);  /* wipe */
 15   
 16   cpdf_translate($pdf, $radius + $margin, $radius + $margin);
 17   cpdf_save($pdf);
 18   cpdf_setrgbcolor($pdf, 0.0, 0.0, 1.0);
 19   
 20   /* minute strokes */
 21   cpdf_setlinewidth($pdf, 2.0);
 22   for ($alpha = 0; $alpha < 360; $alpha += 6)
 23     {
 24     cpdf_rotate($pdf, 6.0);
 25     cpdf_moveto($pdf, $radius, 0.0);
 26     cpdf_lineto($pdf, $radius-$margin/3, 0.0);
 27     cpdf_stroke($pdf);
 28     }
 29   
 30   cpdf_restore($pdf);
 31   cpdf_save($pdf);
 32  
 33   /* 5 minute strokes */
 34   cpdf_setlinewidth($pdf, 3.0);
 35   for ($alpha = 0; $alpha < 360; $alpha += 30)
 36   {
 37     cpdf_rotate($pdf, 30.0);
 38     cpdf_moveto($pdf, $radius, 0.0);
 39     cpdf_lineto($pdf, $radius-$margin, 0.0);
 40     cpdf_stroke($pdf);
 41   }
 42 
 43   $ltime = getdate();
 44 
 45   /* draw hour hand */
 46   cpdf_save($pdf);
 47   cpdf_rotate($pdf, -(($ltime['minutes']/60.0) + $ltime['hours'] - 3.0) * 30.0);
 48   cpdf_moveto($pdf, -$radius/10, -$radius/20);
 49   cpdf_lineto($pdf, $radius/2, 0.0);
 50   cpdf_lineto($pdf, -$radius/10, $radius/20);
 51   cpdf_closepath($pdf);
 52   cpdf_fill($pdf);
 53   cpdf_restore($pdf);
 54 
 55   /* draw minute hand */
 56   cpdf_save($pdf);
 57   cpdf_rotate($pdf, -(($ltime['seconds']/60.0) + $ltime['minutes'] - 15.0) * 6.0);
 58   cpdf_moveto($pdf, -$radius/10, -$radius/20);
 59   cpdf_lineto($pdf, $radius * 0.8, 0.0);
 60   cpdf_lineto($pdf, -$radius/10, $radius/20);
 61   cpdf_closepath($pdf);
 62   cpdf_fill($pdf);
 63   cpdf_restore($pdf);
 64 
 65   /* draw second hand */
 66   cpdf_setrgbcolor($pdf, 1.0, 0.0, 0.0);
 67   cpdf_setlinewidth($pdf, 2);
 68   cpdf_save($pdf);
 69   cpdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0));
 70   cpdf_moveto($pdf, -$radius/5, 0.0);
 71   cpdf_lineto($pdf, $radius, 0.0);
 72   cpdf_stroke($pdf);
 73   cpdf_restore($pdf);
 74 
 75   /* draw little circle at center */
 76   cpdf_circle($pdf, 0, 0, $radius/30);
 77   cpdf_fill($pdf);
 78 
 79   cpdf_restore($pdf);
 80 
 81   cpdf_finalize_page($pdf, $pagecount+1);
 82 }
 83 
 84 cpdf_finalize($pdf);
 85 Header("Content-type: application/pdf");
 86 cpdf_output_buffer($pdf);
 87 cpdf_close($pdf);
 88 ?>
 89     

Table of Contents
cpdf_global_set_document_limits … Sets document limits for any pdf document
cpdf_set_creator … Sets the creator field in the pdf document
cpdf_set_title … Sets the title field of the pdf document
cpdf_set_subject … Sets the subject field of the pdf document
cpdf_set_keywords … Sets the keywords field of the pdf document
cpdf_open … Opens a new pdf document
cpdf_close … Closes the pdf document
cpdf_page_init … Starts new page
cpdf_finalize_page … Ends page
cpdf_finalize … Ends document
cpdf_output_buffer … Outputs the pdf document in memory buffer
cpdf_save_to_file … Writes the pdf document into a file
cpdf_set_current_page … Sets current page
cpdf_begin_text … Starts text section
cpdf_end_text … ends text section
cpdf_show … Output text at current position
cpdf_show_xy … Output text at position
cpdf_text … Output text with parameters
cpdf_set_font … Select the current font face and size
cpdf_set_leading … Sets distance between text lines
cpdf_set_text_rendering … Determines how text is rendered
cpdf_set_horiz_scaling … Sets horizontal scaling of text
cpdf_set_text_rise … Sets the text rise
cpdf_set_text_matrix … Sets the text matrix
cpdf_set_text_pos … Sets text position
cpdf_set_char_spacing … Sets character spacing
cpdf_set_word_spacing … Sets spacing between words
cpdf_continue_text … Output text in next line
cpdf_stringwidth … Returns width of text in current font
cpdf_save … Saves current enviroment
cpdf_restore … Restores formerly saved enviroment
cpdf_translate … Sets origin of coordinate system
cpdf_scale … Sets scaling
cpdf_rotate … Sets rotation
cpdf_setflat … Sets flatness
cpdf_setlinejoin … Sets linejoin parameter
cpdf_setlinecap … Sets linecap aparameter
cpdf_setmiterlimit … Sets miter limit
cpdf_setlinewidth … Sets line width
cpdf_setdash … Sets dash pattern
cpdf_moveto … Sets current point
cpdf_rmoveto … Sets current point
cpdf_curveto … Draws a curve
cpdf_lineto … Draws a line
cpdf_rlineto … Draws a line
cpdf_circle … Draw a circle
cpdf_arc … Draws an arc
cpdf_rect … Draw a rectangle
cpdf_closepath … Close path
cpdf_stroke … Draw line along path
cpdf_closepath_stroke … Close path and draw line along path
cpdf_fill … Fill current path
cpdf_fill_stroke … Fill and stroke current path
cpdf_closepath_fill_stroke … Close, fill and stroke current path
cpdf_clip … Clips to current path
cpdf_setgray_fill … Sets filling color to gray value
cpdf_setgray_stroke … Sets drawing color to gray value
cpdf_setgray … Sets drawing and filling color to gray value
cpdf_setrgbcolor_fill … Sets filling color to rgb color value
cpdf_setrgbcolor_stroke … Sets drawing color to rgb color value
cpdf_setrgbcolor … Sets drawing and filling color to rgb color value
cpdf_add_outline … Adds bookmark for current page
cpdf_set_page_animation … Sets duration between pages
cpdf_import_jpeg … Opens a JPEG image
cpdf_place_inline_image … Places an image on the page
cpdf_add_annotation … Adds annotation

cpdf_global_set_document_limits

(PHP4 >= 4.0b4)

cpdf_global_set_document_limits -- 모든 pdf 문서에 대한 제한을 설정한다.

Description

void cpdf_global_set_document_limits (int maxpages, int maxfonts, int maximages, int maxannotations, int maxobjects)

The cpdf_global_set_document_limits() function sets several document limits. This function has to be called before cpdf_open() to take effect. It sets the limits for any document open afterwards.

See also cpdf_open().

cpdf_set_creator

cpdf_set_creator -- pdf 문서에서 creator 필드를 설정한다.

Description

void cpdf_set_creator(string creator);

The cpdf_set_creator() function sets the creator of a pdf document.

See also cpdf_set_subject(), cpdf_set_title(), cpdf_set_keywords().

cpdf_set_title

cpdf_set_title -- pdf 문서에서 title 필드를 설정한다.

Description

void cpdf_set_title(string title);

The cpdf_set_title() function sets the title of a pdf document.

See also cpdf_set_subject(), cpdf_set_creator(), cpdf_set_keywords().

cpdf_set_subject

cpdf_set_subject -- pdf 문서에서 subject 필드를 설정한다.

Description

void cpdf_set_subject(string subject);

The cpdf_set_subject() function sets the subject of a pdf document.

See also cpdf_set_title(), cpdf_set_creator(), cpdf_set_keywords().

cpdf_set_keywords

cpdf_set_keywords -- pdf 문서에서 keywords 필드를 설정한다.

Description

void cpdf_set_keywords(string keywords);

The cpdf_set_keywords() function sets the keywords of a pdf document.

See also cpdf_set_title(), cpdf_set_creator(), cpdf_set_subject().

cpdf_open

cpdf_open -- 새 pdf 문서를 연다.

Description

int cpdf_open(int compression, string filename);

The cpdf_open() function opens a new pdf document. The first parameter turns document compression on if it is unequal to 0. The second optional parameter sets the file in which the document is written. If it is omitted the document is created in memory and can either be written into a file with the cpdf_save_to_file() or written to standard output with cpdf_output_buffer().

Note: The return value will be needed in futher versions of ClibPDF as the first parameter in all other functions which are writing to the pdf document.

The ClibPDF library takes the filename "-" as a synonym for stdout. If PHP is compiled as an apache module this will not work because the way ClibPDF outputs to stdout does not work with apache. You can solve this problem by skipping the filename and using cpdf_output_buffer() to output the pdf document.

See also cpdf_close(), cpdf_output_buffer().

cpdf_close

cpdf_close -- pdf 문서를 닫는다.

Description

void cpdf_close(int pdf document);

The cpdf_close() function closes the pdf document. This should be the last function even after cpdf_finalize(), cpdf_output_buffer() and cpdf_save_to_file().

See also cpdf_open().

cpdf_page_init

cpdf_page_init -- 새 page를 시작한다.

Description

void cpdf_page_init(int pdf document, int page number, int orientation, double height, double width, double unit);

The cpdf_page_init() function starts a new page with height height and width width. The page has number page number and orientation orientation. orientation can be 0 for portrait and 1 for landscape. The last optional parameter unit sets the unit for the koordinate system. The value should be the number of postscript points per unit. Since one inch is equal to 72 points, a value of 72 would set the unit to one inch. The default is also 72.

See also cpdf_set_current_page().

cpdf_finalize_page

cpdf_finalize_page -- page를 끝낸다.

Description

void cpdf_finalize_page(int pdf document, int page number);

The cpdf_finalize_page() function ends the page with page number page number. This function is only for saving memory. A finalized page takes less memory but cannot be modified anymore.

See also cpdf_page_init().

cpdf_finalize

cpdf_finalize -- 문서를 끝낸다.

Description

void cpdf_finalize(int pdf document);

The cpdf_finalize() function ends the document. You still have to call cpdf_close().

See also cpdf_close().

cpdf_output_buffer

cpdf_output_buffer -- 메모리 버퍼의 PDF 문서를 출력한다.

Description

void cpdf_output_buffer(int pdf document);

The cpdf_output_buffer() function outputs the pdf document to stdout. The document has to be created in memory which is the case if cpdf_open() has been called with no filename parameter.

See also cpdf_open().

cpdf_save_to_file

cpdf_save_to_file -- PDF문서를 파일로 출력한다.

Description

void cpdf_save_to_file(int pdf document, string filename);

The cpdf_save_to_file() function outputs the pdf document into a file if it has been created in memory. This function is not needed if the pdf document has been open by specifying a filename as a parameter of cpdf_open().

See also cpdf_output_buffer(), cpdf_open().

cpdf_set_current_page

cpdf_set_current_page -- 현재 page를 설정한다.

Description

void cpdf_set_current_page(int pdf document, int page number);

The cpdf_set_current_page() function set the page on which all operations are performed. One can switch between pages until a page is finished with cpdf_finalize_page().

See also cpdf_finalize_page().

cpdf_begin_text

cpdf_begin_text -- text section을 시작한다.

Description

void cpdf_begin_text(int pdf document);

The cpdf_begin_text() function starts a text section. It must be ended with cpdf_end_text().

Example 1. Text output

<?php cpdf_begin_text($pdf);
cpdf_set_font($pdf, 16, "Helvetica", 4);
cpdf_text($pdf, 100, 100, "Some text");
cpdf_end_text($pdf) ?>

See also cpdf_end_text().

cpdf_end_text

cpdf_end_text -- text section을 끝낸다.

Description

void cpdf_end_text(int pdf document);

The cpdf_end_text() function ends a text section which was started with cpdf_begin_text().

Example 1. Text output

<?php cpdf_begin_text($pdf);
cpdf_set_font($pdf, 16, "Helvetica", 4);
cpdf_text($pdf, 100, 100, "Some text");
cpdf_end_text($pdf) ?>

See also cpdf_begin_text().

cpdf_show

cpdf_show -- 현재 위치에 text를 출력한다.

Description

void cpdf_show(int pdf document, string text);

The cpdf_show() function outputs the string in text at the current position.

See also cpdf_text(), cpdf_begin_text(), cpdf_end_text().

cpdf_show_xy

cpdf_show_xy -- 지정한 위치에 text를 출력한다.

Description

void cpdf_show_xy(int pdf document, string text, double x-koor, double y-koor, int mode);

The cpdf_show_xy() function outputs the string text at position with coordinates (x-koor, y-koor). The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.

Note: The function cpdf_show_xy() is identical to cpdf_text().

See also cpdf_text().

cpdf_text

cpdf_text -- 지정된 파라메터대로 text를 출력한다.

Description

void cpdf_text(int pdf document, string text, double x-koor, double y-koor, int mode, double orientation, int alignmode);

The cpdf_text() function outputs the string text at position with coordinates (x-koor, y-koor). The optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit. The optional parameter orientation is the rotation of the text in degree. The optional parameter alignmode determines how the text is align. See the ClibPDF documentation for possible values.

See also cpdf_show_xy().

cpdf_set_font

cpdf_set_font -- 현재 사용할 폰트 모양과 크기를 선택한다.

Description

void cpdf_set_font (int pdf document, string font name, double size, string encoding)

The cpdf_set_font() function sets the the current font face, font size and encoding. Currently only the standard postscript fonts are supported. The last parameter encoding can take the following values: "MacRomanEncoding", "MacExpertEncoding", "WinAnsiEncoding", and "NULL". "NULL" stands for the font's built-in encoding. See the ClibPDF Manual for more information, especially how to support asian fonts.

cpdf_set_leading

cpdf_set_leading -- text 줄간격을 지정한다.

Description

void cpdf_set leading(int pdf document, double distance);

The cpdf_set_leading() function sets the distance between text lines. This will be used if text is output by cpdf_continue_text().

See also cpdf_continue_text().

cpdf_set_text_rendering

cpdf_set_text_rendering -- text의 rendering 방법을 결정한다.

Description

void cpdf_set_text_rendering(int pdf document, int mode);

The cpdf_set_text_rendering() function determines how text is rendered. The possible values for mode are 0=fill text, 1=stroke text, 2=fill and stroke text, 3=invisible, 4=fill text and add it to cliping path, 5=stroke text and add it to clipping path, 6=fill and stroke text and add it to cliping path, 7=add it to clipping path.

cpdf_set_horiz_scaling

cpdf_set_horiz_scaling -- text의 수평 확대값을 정한다.

Description

void cpdf_set_horiz_scaling(int pdf document, double scale);

The cpdf_set_horiz_scaling() function sets the horizontal scaling to scale percent.

cpdf_set_text_rise

cpdf_set_text_rise -- text를 솟아 오른 모양(rise)으로 만든다.

Description

void cpdf_set_text_rise(int pdf document, double value);

The cpdf_set_text_rise() function sets the text rising to value units.

cpdf_set_text_matrix

cpdf_set_text_matrix -- text를 행열의 형태로 설정한다.

Description

void cpdf_set_text_matrix(int pdf document, array matrix);

The cpdf_set_text_matrix() function sets a matrix which describes a transformation applied on the current text font.

cpdf_set_text_pos

cpdf_set_text_pos -- text 위치를 정한다.

Description

void cpdf_set_text_pos(int pdf document, double x-koor, double y-koor, int mode);

The cpdf_set_text_pos() function sets the position of text for the next cpdf_show() function call. The optional parameter mode

The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.

See also cpdf_show(), cpdf_text().

cpdf_set_char_spacing

cpdf_set_char_spacing -- 글자간의 간격을 정한다.

Description

void cpdf_set_char_spacing(int pdf document, double space);

The cpdf_set_char_spacing() function sets the spacing between characters.

See also cpdf_set_word_spacing(), cpdf_set_leading().

cpdf_set_word_spacing

cpdf_set_word_spacing -- 단어간의 간격을 정한다.

Description

void cpdf_set_word_spacing(int pdf document, double space);

The cpdf_set_word_spacing() function sets the spacing between words.

See also cpdf_set_char_spacing(), cpdf_set_leading().

cpdf_continue_text

cpdf_continue_text -- 다음줄에 text를 출력한다.

Description

void cpdf_continue_text(int pdf document, string text);

The cpdf_continue_text() function outputs the string in text in the next line.

See also cpdf_show_xy(), cpdf_text(), cpdf_set_leading(), cpdf_set_text_pos().

cpdf_stringwidth

cpdf_stringwidth -- 현재 폰트를 사용한 해당 text의 넓이를 반환한다.

Description

double cpdf_stringwidth(int pdf document, string text);

The cpdf_stringwidth() function returns the width of the string in text. It requires a font to be set before.

See also cpdf_set_font().

cpdf_save

cpdf_save -- 현재의 환경을 저장한다.

Description

void cpdf_save(int pdf document);

The cpdf_save() function saves the current enviroment. It works like the postscript command gsave. Very useful if you want to translate or rotate an object without effecting other objects.

See also cpdf_restore().

cpdf_restore

cpdf_restore -- 이전에 저장했던 환경으로 재설정한다.

Description

void cpdf_restore(int pdf document);

The cpdf_restore() function restores the enviroment saved with cpdf_save(). It works like the postscript command grestore. Very useful if you want to translate or rotate an object without effecting other objects.

Example 1. Save/Restore

<?php cpdf_save($pdf);
// do all kinds of rotations, transformations, ...
cpdf_restore($pdf) ?>

See also cpdf_save().

cpdf_translate

cpdf_translate -- 좌표 시스템의 원점을 지정한다.

Description

void cpdf_translate(int pdf document, double x-koor, double y-koor, int mode);

The cpdf_translate() function set the origin of coordinate system to the point (x-koor, y-koor).

The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.

cpdf_scale

cpdf_scale -- 화대/축소값을 정한다.

Description

void cpdf_scale(int pdf document, double x-scale, double y-scale);

The cpdf_scale() function set the scaling factor in both directions.

cpdf_rotate

cpdf_rotate -- 회전 정도(rotation )를 정한다.

Description

void cpdf_rotate(int pdf document, double angle);

The cpdf_rotate() function set the rotation in degress to angle.

cpdf_setflat

cpdf_setflat -- flatness를 정한다.

Description

void cpdf_setflat(int pdf document, double value);

The cpdf_setflat() function set the flatness to a value between 0 and 100.

cpdf_setlinejoin

cpdf_setlinejoin -- linejoin 파라메터를 설정한다.

Description

void cpdf_setlinejoin(int pdf document, long value);

The cpdf_setlinejoin() function set the linejoin parameter between a value of 0 and 2. 0 = miter, 1 = round, 2 = bevel.

cpdf_setlinecap

cpdf_setlinecap -- linecap 파라메터를 설정한다.

Description

void cpdf_setlinecap(int pdf document, int value);

The cpdf_setlinecap() function set the linecap parameter between a value of 0 and 2. 0 = butt end, 1 = round, 2 = projecting square.

cpdf_setmiterlimit

cpdf_setmiterlimit -- miter 한계를 설정한다.

Description

void cpdf_setmiterlimit(int pdf document, double value);

The cpdf_setmiterlimit() function set the miter limit to a value greater or equal than 1.

cpdf_setlinewidth

cpdf_setlinewidth -- 줄의 두께를 정한다.

Description

void cpdf_setlinewidth(int pdf document, double width);

The cpdf_setlinewidth() function set the line width to width.

cpdf_setdash

cpdf_setdash -- 선이나 점선의 형태를 정한다.

Description

void cpdf_setdash(int pdf document, double white, double black);

The cpdf_setdash() function set the dash pattern white white units and black black units. If both are 0 a solid line is set.

cpdf_moveto

cpdf_moveto -- 현재 위치를 정한다.

Description

void cpdf_moveto(int pdf document, double x-koor, double y-koor, int mode);

The cpdf_moveto() function set the current point to the coordinates x-koor and y-koor.

The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.

cpdf_rmoveto

cpdf_rmoveto -- 현재 위치를 정한다. (현재 위치에서 상대적인 값을 준다.)

Description

void cpdf_rmoveto(int pdf document, double x-koor, double y-koor, int mode);

The cpdf_rmoveto() function set the current point relative to the coordinates x-koor and y-koor.

The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.

See also cpdf_moveto().

cpdf_curveto

cpdf_curveto -- 곡선을 그린다.

Description

void cpdf_curveto(int pdf document, double x1, double y1, double x2, double y2, double x3, double y3, int mode);

The cpdf_curveto() function draws a Bezier curve from the current point to the point (x3, y3) using (x1, y1) and (x2, y2) as control points.

The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.

See also cpdf_moveto(), cpdf_rmoveto(), cpdf_rlineto(), cpdf_lineto().

cpdf_lineto

cpdf_lineto -- 직선을 그린다.

Description

void cpdf_lineto(int pdf document, double x-koor, double y-koor, int mode);

The cpdf_lineto() function draws a line from the current point to the point with coordinates (x-koor, y-koor).

The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.

See also cpdf_moveto(), cpdf_rmoveto(), cpdf_curveto().

cpdf_rlineto

cpdf_rlineto -- 직선을 그린다. (현재 위치에서 상대적인 위치값으로 그린다.)

Description

void cpdf_rlineto(int pdf document, double x-koor, double y-koor, int mode);

The cpdf_rlineto() function draws a line from the current point to the relative point with coordinates (x-koor, y-koor).

The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.

See also cpdf_moveto(), cpdf_rmoveto(), cpdf_curveto().

cpdf_circle

cpdf_circle -- 윈을 그린다.

Description

void cpdf_circle(int pdf document, double x-koor, double y-koor, double radius, int mode);

The cpdf_circle() function draws a circle with center at point (x-koor, y-koor) and radius radius.

The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.

See also cpdf_arc().

cpdf_arc

cpdf_arc -- 원호를 그린다.

Description

void cpdf_arc(int pdf document, double x-koor, double y-koor, double radius, double start, double end, int mode);

The cpdf_arc() function draws an arc with center at point (x-koor, y-koor) and radius radius, starting at angle start and ending at angle end.

The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.

See also cpdf_circle().

cpdf_rect

cpdf_rect -- 직사각형을 그린다.

Description

void cpdf_rect(int pdf document, double x-koor, double y-koor, double width, double height, int mode);

The cpdf_rect() function draws a rectangle with its lower left corner at point (x-koor, y-koor). This width is set to widgth. This height is set to height.

The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.

cpdf_closepath

cpdf_closepath -- path를 닫는다.

Description

void cpdf_closepath(int pdf document);

The cpdf_closepath() function closes the current path.

cpdf_stroke

cpdf_stroke -- path를 따라 선을 그린다.

Description

void cpdf_stroke(int pdf document);

The cpdf_stroke() function draws a line along current path.

See also cpdf_closepath(), cpdf_closepath_stroke().

cpdf_closepath_stroke

cpdf_closepath_stroke -- path를 닫고 해당 path에 따라 선을 그린다.

Description

void cpdf_closepath_stroke(int pdf document);

The cpdf_closepath_stroke() function is a combination of cpdf_closepath() and cpdf_stroke(). Than clears the path.

See also cpdf_closepath(), cpdf_stroke().

cpdf_fill

cpdf_fill -- 현재 path의 내부를 채운다.

Description

void cpdf_fill(int pdf document);

The cpdf_fill() function fills the interior of the current path with the current fill color.

See also cpdf_closepath(), cpdf_stroke(), cpdf_setgray_fill(), cpdf_setgray(), cpdf_setrgbcolor_fill(), cpdf_setrgbcolor().

cpdf_fill_stroke

cpdf_fill_stroke -- 현재 path를 채우고 선을 그린다.

Description

void cpdf_fill_stroke(int pdf document);

The cpdf_fill_stroke() function fills the interior of the current path with the current fill color and draws current path.

See also cpdf_closepath(), cpdf_stroke(), cpdf_fill(), cpdf_setgray_fill(), cpdf_setgray(), cpdf_setrgbcolor_fill(), cpdf_setrgbcolor().

cpdf_closepath_fill_stroke

cpdf_closepath_fill_stroke -- 현재 path를 닫은 후, 채우고 선을 그린다.

Description

void cpdf_closepath_fill_stroke(int pdf document);

The cpdf_closepath_fill_stroke() function closes, fills the interior of the current path with the current fill color and draws current path.

See also cpdf_closepath(), cpdf_stroke(), cpdf_fill(), cpdf_setgray_fill(), cpdf_setgray(), cpdf_setrgbcolor_fill(), cpdf_setrgbcolor().

cpdf_clip

cpdf_clip -- 현재 path를 따낸다.(clip)

Description

void cpdf_clip(int pdf document);

The cpdf_clip() function clips all drawing to the current path.

cpdf_setgray_fill

cpdf_setgray_fill -- 채우는 색을 흑백값으로 정한다.

Description

void cpdf_setgray_fill(int pdf document, double value);

The cpdf_setgray_fill() function sets the current gray value to fill a path.

See also cpdf_setrgbcolor_fill().

cpdf_setgray_stroke

cpdf_setgray_stroke -- (선이나 글자를) 그리는 색을 흑백값으로 정한다.

Description

void cpdf_setgray_stroke(int pdf document, double gray value);

The cpdf_setgray_stroke() function sets the current drawing color to the given gray value.

See also cpdf_setrgbcolor_stroke().

cpdf_setgray

cpdf_setgray -- 채우는 색과 그리는 색의 흑백값 정도를 정한다.

Description

void cpdf_setgray(int pdf document, double gray value);

The cpdf_setgray_stroke() function sets the current drawing and filling color to the given gray value.

See also cpdf_setrgbcolor_stroke(), cpdf_setrgbcolor_fill().

cpdf_setrgbcolor_fill

cpdf_setrgbcolor_fill -- 채우는 색을 rgb color 값으로 정한다.

Description

void cpdf_setrgbcolor_fill(int pdf document, double red value, double green value, double blue value);

The cpdf_setrgbcolor_fill() function sets the current rgb color value to fill a path.

See also cpdf_setrgbcolor_fill().

cpdf_setrgbcolor_stroke

cpdf_setrgbcolor_stroke -- 그리는 색을 rgb color 값으로 정한다.

Description

void cpdf_setrgbcolor_stroke(int pdf document, double red value, double green value, double blue value);

The cpdf_setrgbcolor_stroke() function sets the current drawing color to the given rgb color value.

See also cpdf_setrgbcolor_stroke().

cpdf_setrgbcolor

cpdf_setrgbcolor -- 채우는 색과 그리는 색의 rgb color 값을 정한다.

Description

void cpdf_setrgbcolor(int pdf document, double red value, double green value, double blue value);

The cpdf_setrgbcolor_stroke() function sets the current drawing and filling color to the given rgb color value.

See also cpdf_setrgbcolor_stroke(), cpdf_setrgbcolor_fill().

cpdf_add_outline

cpdf_add_outline -- 현재 page에 bookmark를 추가한다.

Description

void cpdf_add_outline(int pdf document, string text);

The cpdf_add_outline() function adds a bookmark with text text that points to the current page.

Example 1. Adding a page outline

<?php
$cpdf = cpdf_open(0);
cpdf_page_init($cpdf, 1, 0, 595, 842);
cpdf_add_outline($cpdf, 0, 0, 0, 1, "Page 1");
// ...
// some drawing
// ...
cpdf_finalize($cpdf);
Header("Content-type: application/pdf");
cpdf_output_buffer($cpdf);
cpdf_close($cpdf);
?>
    

cpdf_set_page_animation

cpdf_set_page_animation -- page간에 넘어가는 방법을 정한다.

Description

void cpdf_set_page_animation(int pdf document, int transition, double duration);

The cpdf_set_page_animation() function set the transition between following pages.

The value of transition can be

0 for none,

1 for two lines sweeping across the screen reveal the page,

2 for multiple lines sweeping across the screen reveal the page,

3 for a box reveals the page,

4 for a single line sweeping across the screen reveals the page,

5 for the old page dissolves to reveal the page,

6 for the dissolve effect moves from one screen edge to another,

7 for the old page is simply replaced by the new page (default)

The value of duration is the number of seconds between page flipping.

cpdf_import_jpeg

cpdf_import_jpeg -- JPEG 이미지를 연다.

Description

int cpdf_open_jpeg(int pdf document, string file name, double x-koor, double y-koor, double angle, double width, double height, double x-scale, double y-scale, int mode);

The cpdf_import_jpeg() function opens an image stored in the file with the name file name. The format of the image has to be jpeg. The image is placed on the current page at position (x-koor, y-koor). The image is rotated by angle degres.

The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.

See also cpdf_place_inline_image(),

cpdf_place_inline_image

cpdf_place_inline_image -- 이미지를 해당 페이지에 위치시킨다.

Description

void cpdf_place_inline_image(int pdf document, int image, double x-koor, double y-koor, double angle, double width, double height, int mode);

The cpdf_place_inline_image() function places an image created with the php image functions on the page at postion (x-koor, y-koor). The image can be scaled at the same time.

The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.

See also cpdf_import_jpeg()

cpdf_add_annotation

cpdf_add_annotation -- 주석(annotation)을 단다.

Description

void cpdf_add_annotation(int pdf document, double llx, double lly, double urx, double ury, string title, string content, int mode);

The cpdf_add_annotation() adds a note with the lower left corner at (llx, lly) and the upper right corner at (urx, ury).

The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.


IX. Cybercash payment functions

이 함수들은 PHP를 컴파일할 때 --with-cybercash=[DIR] 옵션을 주고 컴파일한 경우에만 사용가능하다. 이 함수들은 PHP4에 추가되었다.

Table of Contents
cybercash_encr … ???
cybercash_decr … ???
cybercash_base64_encode … ???
cybercash_base64_decode

cybercash_encr

(PHP4 >= 4.0b4)

cybercash_encr -- ???

Description

array cybercash_encr (string wmk, string sk, string inbuff)

The function returns an associative array with the elements "errcode" and, if "errcode" is false, "outbuff" (string), "outLth" (long) and "macbuff" (string).

cybercash_decr

(PHP4 >= 4.0b4)

cybercash_decr -- ???

Description

array cybercash_decr (string wmk, string sk, string inbuff)

The function returns an associative array with the elements "errcode" and, if "errcode" is false, "outbuff" (string), "outLth" (long) and "macbuff" (string).

cybercash_base64_encode

(PHP4 >= 4.0b4)

cybercash_base64_encode -- ???

Description

string cybercash_base64_encode (string inbuff)

cybercash_base64_decode

(PHP4 >= 4.0b4)

cybercash_base64_decode -- 

Description

string cybercash_base64_decode (string inbuff)

X. DOM XML functions

이 함수들은 GNOME xml 라이브러리를 사용하고, PHP를 설정할 때 --with-dom=[DIR] 옵션을 주었을 경우에만 사용가능하다. 이 함수들은 PHP4에 추가되었다.

이 모듈은 다음과 같은 상수들을 미리 정의해 놓고 있다.

Table 1. XML constants

Constant Value Description
XML_ELEMENT_NODE 1  
XML_ATTRIBUTE_NODE 2  
XML_TEXT_NODE 3  
XML_CDATA_SECTION_NODE 4  
XML_ENTITY_REF_NODE 5  
XML_ENTITY_NODE 6  
XML_PI_NODE 7  
XML_COMMENT_NODE 8  
XML_DOCUMENT_NODE 9  
XML_DOCUMENT_TYPE_NODE 10  
XML_DOCUMENT_FRAG_NODE 11  
XML_NOTATION_NODE 12  
XML_GLOBAL_NAMESPACE 1  
XML_LOCAL_NAMESPACE 2  

This module defines a number of classes. The DOM XML functions return a parsed tree of the XML document with each node being an object belonging to one of these classes.

Table of Contents
xmldoc … Creates a DOM object of an XML document
xmldocfile … Creates a DOM object from XML file
xmltree … Creates a tree of php objects from XML document

xmldoc

(PHP4 >= 4.0b4)

xmldoc -- XML 문서로부터 DOM 객체를 만들어낸다.

Description

object xmldoc (string str)

The function parses the XML document in str and returns an object of class "Dom document", having the properties "doc" (resource), "version" (string) and "type" (long).

xmldocfile

(PHP4 >= 4.0b4)

xmldocfile -- XML 파일로부터 DOM 객체를 만들어낸다.

Description

object xmldocfile (string filename)

The function parses the XML document in the file named filename and returns an object of class "Dom document", having the properties "doc" (resource), "version" (string).

xmltree

(PHP4 >= 4.0b4)

xmltree --  XML 문서로부터 PHP 객체들의 tree를 만들어낸다.

Description

object xmltree (string str)

The function parses the XML document in str and returns a tree PHP objects as the parsed document.


XI. Compression functions

이 모듈은 gzip(.gz)으로 압축된 파일을 투명하게(압축되지 않은 것처럼) 읽고 쓰기 위해 Jean-loup Gailly와 Mark Adler에 의한 zlib >= 1.0.9 (http://www.cdrom.com/pub/infozip/zlib/) 함수들을 사용한다.

이 모듈은 (socket을 제외한) 대부분의 파일관리(filesystem)함수에 gzip-압축과 압축해제 기능을 더한 내용의 함수들을 제공한다.

예제

임시파일을 열어 문자열을 쓴 후에, 그 파일에 있는 내용을 다른 방법으로 두 번 출력하는 예제이다.

Example 1. Small Zlib example

  1 
  2 <?php
  3   $filename = tempnam('/tmp', 'zlibtest').'.gz';
  4   print "<html>\n<head></head>\n<body>\n<pre>\n";
  5   $s = "Only a test, test, test, test, test, test, test, test!\n";
  6   // open file for writing with maximum compression
  7   $zp = gzopen($filename, "w9");
  8   // write string to file
  9   gzwrite($zp, $s);
 10   // close file
 11   gzclose($zp);
 12   // open file for reading
 13   $zp = gzopen($filename, "r");
 14   // read 3 char
 15   print gzread($zp, 3);
 16   // output until end of the file and close it.
 17   gzpassthru($zp);
 18   print "\n";
 19   // open file and print content (the 2nd time).
 20   if (readgzfile($filename) != strlen($s)) {
 21           echo "Error with zlib functions!";
 22   }
 23   unlink($filename);
 24   print "</pre>\n</h1></body>\n</html>\n";
 25 ?>
 26 
Table of Contents
gzclose … close an open gz-file pointer
gzeof … test for end-of-file on a gz-file pointer
gzfile … read entire gz-file into an array
gzgetc … get character from gz-file pointer
gzgets … get line from file pointer
gzgetss … get line from gz-file pointer and strip HTML tags
gzopen … open gz-file
gzpassthru … output all remaining data on a gz-file pointer
gzputs … write to a gz-file pointer
gzread … Binary-safe gz-file read
gzrewind … rewind the position of a gz-file pointer
gzseek … seek on a gz-file pointer
gztell … tell gz-file pointer read/write position
gzwrite … Binary-safe gz-file write
readgzfile … output a gz-file
gzcompress … gz-compress a string
gzuncompress … uncompress a gz-compressed string
 

gzclose

gzclose -- gz-file pointer를 닫는다.

Description

int gzclose(int zp);

The gz-file pointed to by zp is closed.

Returns true on success and false on failure.

The gz-file pointer must be valid, and must point to a file successfully opened by gzopen().

gzeof

gzeof -- gz-file pointer가 end-of-file에 있는가 검사한다.

Description

int gzeof(int zp);

Returns true if the gz-file pointer is at EOF or an error occurs; otherwise returns false.

The gz-file pointer must be valid, and must point to a file successfully opened by gzopen().

gzfile

gzfile -- gz-file의 내용을 배열로 읽는다.

Description

array gzfile(string filename);

Identical to readgzfile(), except that gzfile() returns the file in an array.

See also readgzfile(), and gzopen().

gzgetc

gzgetc -- gz-file pointer에서 한 문자를 읽는다.

Description

string gzgetc(int zp);

Returns a string containing a single (uncompressed) character read from the file pointed to by zp. Returns FALSE on EOF (as does gzeof()).

The gz-file pointer must be valid, and must point to a file successfully opened by gzopen().

See also gzopen(), and gzgets().

gzgets

gzgets -- gz-file pointer에서 한 줄을 읽는다.

Description

string gzgets(int zp, int length);

Returns a (uncompressed) string of up to length - 1 bytes read from the file pointed to by fp. Reading ends when length - 1 bytes have been read, on a newline, or on EOF (whichever comes first).

If an error occurs, returns false.

The file pointer must be valid, and must point to a file successfully opened by gzopen().

See also gzopen(), and gzgetc().

gzgetss

gzgetss -- gz-file pointer에서 한 줄을 읽어 HTML tag들을 strip한다.

Description

string gzgetss(int zp, int length);

Identical to gzgets(), except that gzgetss attempts to strip any HTML and PHP tags from the text it reads.

See also gzgets(), and gzopen().

gzopen

gzopen -- gz-file을 연다.

Description

int gzopen(string filename, string mode);

Opens a gzip (.gz) file for reading or writing. The mode parameter is as in fopen() ("rb" or "wb") but can also include a compression level ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman only compression as in "wb1h". (See the description of deflateInit2 in zlib.h for more information about the strategy parameter.)

Gzopen can be used to read a file which is not in gzip format; in this case gzread will directly read from the file without decompression.

Gzopen returns a file pointer to the file opened, after that, everything you read from this file descriptor will be transparently decompressed and what you write gets compressed.

If the open fails, the function returns false.

Example 1. gzopen() example

$fp = gzopen("/tmp/file.gz", "r");

See also gzclose().

gzpassthru

gzpassthru -- gz-file pointer에서부터 뒤에 남아있는 모든 데이타를 출력(output)한다.

Description

int gzpassthru(int zp);

Reads to EOF on the given gz-file pointer and writes the (uncompressed) results to standard output.

If an error occurs, returns false.

The file pointer must be valid, and must point to a file successfully opened by gzopen().

The gz-file is closed when gzpassthru() is done reading it (leaving zp useless).

gzputs

gzputs -- gz-file pointer에 쓴다.

Description

int gzputs(int zp, string str, int [length]);

gzputs() is an alias to gzwrite(), and is identical in every way.

gzread

gzread -- gz-file에서 이진 데이타로 읽는다.

Description

string gzread(int zp, int length);

gzread() reads up to length bytes from the gz-file pointer referenced by zp. Reading stops when length (uncompressed) bytes have been read or EOF is reached, whichever comes first.

// get contents of a gz-file into a string
$filename = "/usr/local/something.txt.gz";
$zd = gzopen( $filename, "r" );
$contents = gzread( $zd, 10000 );
gzclose( $zd );

See also gzwrite(), gzopen(), gzgets(), gzgetss(), gzfile(), and gzpassthru().

gzrewind

gzrewind -- gz-file pointer의 위치를 맨 앞으로 가져간다.

Description

int gzrewind(int zp);

Sets the file position indicator for zp to the beginning of the file stream.

If an error occurs, returns 0.

The file pointer must be valid, and must point to a file successfully opened by gzopen().

See also gzseek() and gztell().

gzseek

gzseek -- gz-file pointer를 옮긴다.

Description

int gzseek(int zp, int offset);

Sets the file position indicator for the file referenced by zp to offset bytes into the file stream. Equivalent to calling (in C) gzseek( zp, offset, SEEK_SET ).

If the file is opened for reading, this function is emulated but can be extremely slow. If the file is opened for writing, only forward seeks are supported; gzseek then compresses a sequence of zeroes up to the new starting position.

Upon success, returns 0; otherwise, returns -1. Note that seeking past EOF is not considered an error.

See also gztell() and gzrewind().

gztell

gztell -- gz-file pointer의 읽고, 쓸 위치를 반환한다.

Description

int gztell(int zp);

Returns the position of the file pointer referenced by zp; i.e., its offset into the file stream.

If an error occurs, returns false.

The file pointer must be valid, and must point to a file successfully opened by gzopen().

See also gzopen(), gzseek() and gzrewind().

gzwrite

gzwrite -- gz-file에 이진 데이타를 쓴다.

Description

int gzwrite(int zp, string string, int [length]);

gzwrite() writes the contents of string to the gz-file stream pointed to by zp. If the length argument is given, writing will stop after length (uncompressed) bytes have been written or the end of string is reached, whichever comes first.

Note that if the length argument is given, then the magic_quotes_runtime configuration option will be ignored and no slashes will be stripped from string.

See also gzread(), gzopen(), and gzputs().

readgzfile

readgzfile -- gz-file을 출력(output)한다.

Description

int readgzfile(string filename);

Reads a file, decompresses it and writes it to standard output.

Readgzfile() can be used to read a file which is not in gzip format; in this case readgzfile() will directly read from the file without decompression.

Returns the number of (uncompressed) bytes read from the file. If an error occurs, false is returned and unless the function was called as @readgzfile, an error message is printed.

The file filename will be opened from the filesystem and its contents written to standard output.

See also gzpassthru(), gzfile(), and gzopen().

gzcompress

gzcompress -- 문자열을 gz-압축(compress) 한다.

Description

string gzcompress (string data [, int level])

This function returns a gzip-compressed version of the input data or false on errors. The optional parameter level can be given as 0 for no compression up to 9 for maximum compression.

See also gzuncompress().

gzuncompress

gzuncompress -- gz-압축(compress)된 문자열을 해제(uncompress)한다.

Description

string gzcompress (string data [, int length])

This function takes data compressed by gzcompress() and returns the orignial uncompressed data or false on error. The function will return an error if the uncompressed data is more than 256 times the lenght of the compressed input data or more than the optional parameter length.

See also gzcompress().


XII. Database (dbm-style) abstraction layer functions

이 함수들은 Berkeley DB 형태의 데이터베이스를 접근하기 위한 것이다.

이것은 여러 file-based 데이터베이스의 일반적인 abstraction layer이다. 기능적으로 이것은 Sleepycat Software's DB2 같은 현대적인 데이터베이스 기능의 부분 집합(subset)이 된다. (IBM의 DB2와 혼돈하지 말기 바란다. IBM의 DB2는 ODBC를 통해 지원된다.)

기초가 되는 데이터베이스의 구현에 따라 얼마나 다양하게 사용될 수 있는가가 결정된다. dba_optimize()dba_sync() 같은 함수는 단지 한 데이터베이스에 대해 작동되고 다른 데이터베이스에 대해서는 아무 영향을 미치지 못한다.

다음과 같은 handler를 지원한다. :

Example 1. DBA example

  1 
  2 <?php
  3 
  4 $id = dba_open("/tmp/test.db", "n", "db2");
  5 
  6 if(!$id) {
  7     echo "dba_open failed\n";
  8     exit;
  9 }
 10 
 11 dba_replace("key", "This is an example!", $id);
 12 
 13 if(dba_exists("key", $id)) {
 14     echo dba_fetch("key", $id);
 15     dba_delete("key", $id);
 16 }
 17 
 18 dba_close($id);
 19 ?>
 20 

DBA는 binary safe하고 어떤 어떤 arbitrary limit도 가지고 있지 않다. 이것의 제한은 기초가 되는 데이터베이스 구현에 따른 한계에서 온 것이다.

모든 파일 기반(file-based) 데이터베이스는 새로 만들어진 데이터베이스에 대하여 파일 모드를 지정하는 방법을 제공해야 한다. 일반적으로 파일 모드는 dba_open()이나 dba_popen()의 네 번째 인수로 전달하게 된다.

여러분은 dba_firstkey()dba_nextkey()함수를 사용하여 전체 데이터를 순차적으로 접근할 수 있다. 그리고, 데이터베이스를 탐색하는 동안은 데이터베이스의 내용을 바꿀 수 없다.

Example 2. Traversing a database

  1 
  2 <?php
  3 
  4 # ...open database...
  5 
  6 $key = dba_firstkey($id);
  7 
  8 while($key != false) {
  9     if(...) { # remember the key to perform some action later
 10         $handle_later[] = $key;
 11     }
 12     $key = dba_nextkey($id);
 13 }
 14 
 15 for($i = 0; $i < count($handle_later); $i++)
 16     dba_delete($handle_later[$i], $id);
 17 
 18 ?>
 19 	 

Table of Contents
dba_close … Close database
dba_delete … Delete entry specified by key
dba_exists … Check whether key exists
dba_fetch … Fetch data specified by key
dba_firstkey … Fetch first key
dba_insert … Insert entry
dba_nextkey … Fetch next key
dba_popen … Open database persistently
dba_open … Open database
dba_optimize … Optimize database
dba_replace … Replace or insert entry
dba_sync … Synchronize database

dba_close

dba_close -- 데이터베이스를 닫는다.

Description

void dba_close(int handle);

dba_close() closes the established database and frees all resources specified by handle.

handle is a database handle returned by dba_open().

dba_close() does not return any value.

See also: dba_open() dba_popen()

dba_delete

dba_delete -- 지정된 key값을 가지는 entry를 지운다.

Description

string dba_delete(string key, int handle);

dba_delete() deletes the entry specified by key from the database specified with handle.

key is the key of the entry which is deleted.

handle is a database handle returned by dba_open().

dba_delete() returns true or false, if the entry is deleted or not deleted, respectively.

See also: dba_exists() dba_fetch() dba_insert() dba_replace()

dba_exists

dba_exists -- 지정된 key가 있는가 검사한다.

Description

bool dba_exists(string key, int handle);

dba_exists() checks whether the specified key exists in the database specified by handle.

key is the key the check is performed for.

handle is a database handle returned by dba_open().

dba_exists() returns true or false, if the key is found or not found, respectively.

See also: dba_fetch() dba_delete() dba_insert() dba_replace()

dba_fetch

dba_fetch -- 지정된 key값의 data를 가져온다.

Description

string dba_fetch(string key, int handle);

dba_fetch() fetches the data specified by key from the database specified with handle.

key is the key the data is specified by.

handle is a database handle returned by dba_open().

dba_fetch() returns the associated string or false, if the key/data pair is found or not found, respectively.

See also: dba_exists() dba_delete() dba_insert() dba_replace()

dba_firstkey

dba_firstkey -- 첫 번째 key의 값을 가져온다.

Description

string dba_firstkey(int handle);

dba_firstkey() returns the first key of the database specified by handle and resets the internal key pointer. This permits a linear search through the whole database.

handle is a database handle returned by dba_open().

dba_firstkey() returns the key or false depending on whether it succeeds or fails, respectively.

See also: dba_nextkey()

dba_insert

dba_insert -- entry를 삽입한다.

Description

bool dba_insert(string key, string value, int handle);

dba_insert() inserts the entry described with key and value into the database specified by handle. It fails, if an entry with the same key already exists.

key is the key of the entry to be inserted.

value is the value to be inserted.

handle is a database handle returned by dba_open().

dba_insert() returns true or false, depending on whether it succeeds of fails, respectively.

See also: dba_exists() dba_delete() dba_fetch() dba_replace()

dba_nextkey

dba_nextkey -- 다음 key값을 가져온다.

Description

string dba_nextkey(int handle);

dba_nextkey() returns the next key of the database specified by handle and increments the internal key pointer.

handle is a database handle returned by dba_open().

dba_nextkey() returns the key or false depending on whether it succeeds or fails, respectively.

See also: dba_firstkey()

dba_popen

dba_popen -- 데이터베이스를 영구적으로 연다.

Description

int dba_popen(string path, string mode, string handler, [...]);

dba_popen() establishes a persistent database instance for path with mode using handler.

path is commonly a regular path in your filesystem.

mode is "r" for read access, "w" for read/write access to an already existing database, "c" for read/write access and database creation if it doesn't currently exist, and "n" for create, truncate and read/write access.

handler is the name of the handler which shall be used for accessing path. It is passed all optional parameters given to dba_popen() and can act on behalf of them.

dba_popen() returns a positive handler id or false, in the case the open is successful or fails, respectively.

See also: dba_open() dba_close()

dba_open

dba_open -- 데이터베이스를 연다.

Description

int dba_open(string path, string mode, string handler, [...]);

dba_open() establishes a database instance for path with mode using handler.

path is commonly a regular path in your filesystem.

mode is "r" for read access, "w" for read/write access to an already existing database, "c" for read/write access and database creation if it doesn't currently exist, and "n" for create, truncate and read/write access.

handler is the name of the handler which shall be used for accessing path. It is passed all optional parameters given to dba_open() and can act on behalf of them.

dba_open() returns a positive handler id or false, in the case the open is successful or fails, respectively.

See also: dba_popen() dba_close()

dba_optimize

dba_optimize -- 데이터베이스를 최적화(Optimize)한다.

Description

bool dba_optimize(int handle);

dba_optimize() optimizes the underlying database specified by handle.

handle is a database handle returned by dba_open().

dba_optimize() returns true or false, if the optimization succeeds or fails, respectively.

See also: dba_sync()

dba_replace

dba_replace -- entry를 대치(replace)하거나 삽입한다.

Description

bool dba_replace(string key, string value, int handle);

dba_replace() replaces or inserts the entry described with key and value into the database specified by handle.

key is the key of the entry to be inserted.

value is the value to be inserted.

handle is a database handle returned by dba_open().

dba_replace() returns true or false, depending on whether it succeeds of fails, respectively.

See also: dba_exists() dba_delete() dba_fetch() dba_insert()

dba_sync

dba_sync -- 데이터베이스를 동기화(Synchronize)한다.

Description

bool dba_sync(int handle);

dba_sync() synchronizes the database specified by handle. This will probably trigger a physical write to disk, if supported.

handle is a database handle returned by dba_open().

dba_sync() returns true or false, if the synchronization succeeds or fails, respectively.

See also: dba_optimize()


XIII. Date and Time functions

Table of Contents
checkdate … validate a date/time
date … format a local time/date
getdate … get date/time information
gettimeofday … get current time
gmdate … format a GMT/CUT date/time
gmmktime … get UNIX timestamp for a GMT date
gmstrftime … format a GMT/CUT time/date according to locale settings
localtime … Get the local time
microtime … return current UNIX timestamp with microseconds
mktime … get UNIX timestamp for a date
strftime … format a local time/date according to locale settings
time … return current UNIX timestamp
strtotime … Parse about any english textual datetime description into a UNIX timestamp

checkdate

checkdate -- date/time값이 올바른가 검사한다.

Description

int checkdate(int month, int day, int year);

Returns true if the date given is valid; otherwise returns false. Checks the validity of the date formed by the arguments. A date is considered valid if:

date

date -- local time을 지정된 형태로 만들어 반환한다.

Description

string date(string format, int timestamp);

Returns a string formatted according to the given format string using the given timestamp or the current local time if no timestamp is given.

The following characters are recognized in the format string:

Unrecognized characters in the format string will be printed as-is. The "Z" format will always return "0" when using gmdate().

Example 1. Date() example

  1 
  2 print (date ("l dS of F Y h:i:s A"));
  3 print ("July 1, 2000 is on a " . date ("l", mktime(0,0,0,7,1,2000)));
  4       

It is possible to use date() and mktime() together to find dates in the future or the past.

Example 2. Date() and mktime() example

  1 
  2 $tomorrow  = mktime (0,0,0,date("m")  ,date("d")+1,date("Y"));
  3 $lastmonth = mktime (0,0,0,date("m")-1,date("d"),  date("Y"));
  4 $nextyear  = mktime (0,0,0,date("m"),  date("d"),  date("Y")+1);
  5       

To format dates in other languages, you should use the setlocale() and strftime() functions.

See also gmdate() and mktime().

getdate

getdate -- date/time 정보를 얻는다.

Description

array getdate(int timestamp);

Returns an associative array containing the date information of the timestamp as the following array elements:

gettimeofday

gettimeofday -- 현재 시각을 얻는다.

Description

array gettimeofday(void);

This is an interface to gettimeofday(2). It returns an associative array containing the data returned from the system call.

gmdate

gmdate -- GMT/CUT date/time을 지정된 형태로 만들어 반환한다.

Description

string gmdate(string format, int timestamp);

Identical to the date() function except that the time returned is Greenwich Mean Time (GMT). For example, when run in Finland (GMT +0200), the first line below prints "Jan 01 1998 00:00:00", while the second prints "Dec 31 1997 22:00:00".

Example 1. Gmdate() example

  1 
  2 echo date ("M d Y H:i:s", mktime (0,0,0,1,1,1998));
  3 echo gmdate ("M d Y H:i:s", mktime (0,0,0,1,1,1998));
  4       

See also date(), mktime() and gmmktime().

gmmktime

gmmktime -- GMT 날짜를 가지고 timestamp를 만든다.

Description

int gmmktime(int hour, int minute, int second, int month, int day, int year);

Identical to mktime() except the passed parameters represents a GMT date.

gmstrftime

gmstrftime -- GMT/CUT time/date를 locale 설정에 따른 형태로 만들어 반환한다.

Description

string gmstrftime(string format, int timestamp);

Behaves the same as strftime() except that the time returned is Greenwich Mean Time (GMT). For example, when run in Eastern Standard Time (GMT -0500), the first line below prints "Dec 31 1998 20:00:00", while the second prints "Jan 01 1999 01:00:00".

Example 1. Gmstrftime() example

  1 
  2 setlocale ('LC_TIME', 'en_US');
  3 echo strftime ("%b %d %Y %H:%M:%S", mktime (20,0,0,12,31,98))."\n";
  4 echo gmstrftime ("%b %d %Y %H:%M:%S", mktime (20,0,0,12,31,98))."\n";
  5       

See also strftime().

localtime

(PHP4 >= 4.0RC2)

localtime -- 현재 지역의 시간을 얻는다.

Description

array localtime ([int timestamp [, bool is_associative]])

The localtime() function returns an array identical to that of the structure returned by the C function call. The first argument to localtime() is the timestamp, if this is not given the current time is used. The second argument to the localtime() is the is_associative, if this is set to 0 or not supplied than the array is returned as a regular, numerically indexed array. If the argument is set to 1 then localtime() is an associative array containing all the different elements of the structure returned by the C function call to localtime. The names of the different keys of the associative array are as follows:

microtime

microtime -- 현재 시각의 timestamp를 1000분의 1초 단위까지 반환한다.

Description

string microtime(void);

Returns the string "msec sec" where sec is the current time measured in the number of seconds since the Unix Epoch (0:00:00 January 1, 1970 GMT), and msec is the microseconds part. This function is only available on operating systems that support the gettimeofday() system call.

See also time().

mktime

mktime -- 지정된 날짜를 date()함수 등이 사용하는 timestamp로 만든다.

Description

int mktime (int hour, int minute, int second, int month, int day, int year [, int is_dst])

Warning: Note the strange order of arguments, which differs from the order of arguments in a regular UNIX mktime() call and which does not lend itself well to leaving out parameters from right to left (see below). It is a common error to mix these values up in a script.

Returns the Unix timestamp corresponding to the arguments given. This timestamp is a long integer containing the number of seconds between the Unix Epoch (January 1 1970) and the time specified.

Arguments may be left out in order from right to left; any arguments thus omitted will be set to the current value according to the local date and time.

Is_dst can be set to 1 if the time is during daylight savings time, 0 if it is not, or -1 (the default) if it is unknown whether the time is within daylight savings time or not.

Note: Is_dst was added in 3.0.10.

Mktime() is useful for doing date arithmetic and validation, as it will automatically calculate the correct value for out-of-range input. For example, each of the following lines produces the string "Jan-01-1998".

Example 1. Mktime() example

  1 
  2 echo date ("M-d-Y", mktime (0,0,0,12,32,1997));
  3 echo date ("M-d-Y", mktime (0,0,0,13,1,1997));
  4 echo date ("M-d-Y", mktime (0,0,0,1,1,1998));
  5 echo date ("M-d-Y", mktime (0,0,0,1,1,98));
  6       
Year may be a two or four digit value, with values between 0-69 mapping to 2000-2069 and 70-99 to 1970-1999 (on systems where time_t is a 32bit signed integer, as most common today, the valid range for year is somewhere between 1902 and 2037).

The last day of any given month can be expressed as the "0" day of the next month, not the -1 day. Both of the following examples will produce the string "The last day in Feb 2000 is: 29".

Example 2. Last day of next month

  1 
  2 $lastday = mktime (0,0,0,3,0,2000);
  3 echo strftime ("Last day in Feb 2000 is: %d", $lastday);
  4      
  5 $lastday = mktime (0,0,0,4,-31,2000);
  6 echo strftime ("Last day in Feb 2000 is: %d", $lastday);
  7       

( 역자주 : 다음과 같이 date() 함수를 같이 사용하면 과거나 미래의 특정일을 알 수 있다.
$tomorrow = mktime(0,0,0,date("d")+1,date("m"), date("Y"));
$lastmonth = mktime(0,0,0,date("d"),date("m")-1,date("Y"));
$nextyear = mktime(0,0,0,date("d"),date("m"),date("Y")+1); )

See also date() and time().

strftime

strftime -- 현재 시간/날짜를 지정한 형태로 변환한다.

Description

string strftime(string format, int timestamp);

Returns a string formatted according to the given format string using the given timestamp or the current local time if no timestamp is given. Month and weekday names and other language dependent strings respect the current locale set with setlocale().

The following conversion specifiers are recognized in the format string:

Example 1. Strftime() example

  1 
  2 setlocale ("LC_TIME", "C");
  3 print (strftime ("%A in Finnish is "));
  4 setlocale ("LC_TIME", "fi_FI");
  5 print (strftime ("%A, in French "));
  6 setlocale ("LC_TIME", "fr_CA");
  7 print (strftime ("%A and in German "));
  8 setlocale ("LC_TIME", "de_DE");
  9 print (strftime ("%A.\n"));
 10       

This example works if you have the respective locales installed in your system.

See also setlocale() and mktime() and the Open Group specification of strftime() .

time

time -- 현재 시각의 timestamp를 반환한다.

Description

int time(void);

Returns the current time measured in the number of seconds since the Unix Epoch (January 1, 1970).

See also date().

strtotime

(PHP3 >= 3.0.12, PHP4 >= 4.0b2)

strtotime --  가능한 여러 형태의 영문 날짜/시간을 표시하는 문자열을 분석하여 UNIX timestamp로 만든다.

Description

int strtotime (string time [, int now])

The function expects to be given a string containing an english date format and will try to parse that format into a UNIX timestamp.

Example 1. Strtotime() example

  1 
  2 echo strtotime ("10 march 2000") . "\n";
  3       


XIV. dBase functions

이 함수들은 dBase 형태의 databse(dbf)에 저장된 레코드들을 접근할 수 있게 해 준다.

index와 memo 필드는 지원하지 않는다. 또한 locking도 지원하지 않는다. 두 개의 웹서버 프로세스가 동시에 같은 dBase 파일을 수정하려 한다면, database 자체가 망가질 수도 있다.

SQL 데이터베이스와 다르게 dBase 데이터베이스는 생성후에 그 구조를 바꿀 수 없다. 한 파일이 생성되면 해당 데이터베이스의 선언은 고정된다. 속도 향상 등을 위해 사용하는 index도 지원하지 않는다. dBase는 고정된 길이의 레코드를 가진 단순한 순차 파일이다. 새레코드는 파일의 맨 뒤에 붙고, 삭제된 레코드는 dbase_pack()이 수행되기 전에는 데이터 자체는 유지된다.

우리는 dBase 파일은 사용하지 말기를 권한다. 대신 진짜 SQL 서버를 사용하기를 권한다. MySQL이나 PostgreSQL이 PHP와 같이 많ㅇ 사용된다. dBase 지원은 단지 여러분이 사용하는 데이터베이스에 데이터를 읽어들이거나 내보낼 때만 사용하는 것이 좋다. dBase 포맷은 대부분의 Windows용 프로그램이 사용가능한 데이터 포맷이기 때문이다.

Table of Contents
dbase_create … creates a dBase database
dbase_open … opens a dBase database
dbase_close … close a dBase database
dbase_pack … packs a dBase database
dbase_add_record … add a record to a dBase database
dbase_replace_record … replace a record in a dBase database
dbase_delete_record … deletes a record from a dBase database
dbase_get_record … gets a record from a dBase database
dbase_get_record_with_names … Gets a record from a dBase databaseas an associative array
dbase_numfields … find out how many fields are in a dBase database
dbase_numrecords … find out how many records are in a dBase database

dbase_create

dbase_create -- dBase database를 생성한다.

Description

int dbase_create(string filename, array fields);

The fields parameter is an array of arrays, each array describing the format of one field in the database. Each field consists of a name, a character indicating the field type, a length, and a precision.

The types of fields available are:

If the database is successfully created, a dbase_identifier is returned, otherwise false is returned.

Example 1. Creating a dBase database file

// "database" name
$dbname = "/tmp/test.dbf";
// database "definition"
$def =
    array(
        array("date",     "D"),
        array("name",     "C",  50),
        array("age",      "N",   3, 0),
        array("email",    "C", 128),
        array("ismember", "L")
    );
// creation
if (!dbase_create($dbname, $def))
    print "<strong>Error!</strong>";

dbase_open

dbase_open -- dBase database를 연다.

Description

int dbase_open(string filename, int flags);

The flags correspond to those for the open() system call. (Typically 0 means read-only, 1 means write-only, and 2 means read and write.)

Returns a dbase_identifier for the opened database, or false if the database couldn't be opened.

dbase_close

dbase_close -- dBase database를 닫는다.

Description

bool dbase_close(int dbase_identifier);

Closes the database associated with dbase_identifier.

dbase_pack

dbase_pack -- dBase database를 pack한다.

Description

bool dbase_pack(int dbase_identifier);

Packs the specified database (permanently deleting all records marked for deletion using dbase_delete_record().

dbase_add_record

dbase_add_record -- dBase database에 한 record를 더한다.

Description

bool dbase_add_record(int dbase_identifier, array record);

Adds the data in the record to the database. If the number of items in the supplied record isn't equal to the number of fields in the database, the operation will fail and false will be returned.

dbase_replace_record

dbase_replace_record -- dBase database의 한 레코드의 내용을 바꾼다.

Description

bool dbase_replace_record(int dbase_identifier, array record, int dbase_record_number);

Replaces the data associated with the record record_number with the data in the record in the database. If the number of items in the supplied record is not equal to the number of fields in the database, the operation will fail and false will be returned.

dbase_record_number is an integer which spans from 1 to the number of records in the database (as returned by dbase_numrecords()).

dbase_delete_record

dbase_delete_record -- dBase database에서 한 record를 삭제한다

Description

bool dbase_delete_record(int dbase_identifier, int record);

Marks record to be deleted from the database. To actually remove the record from the database, you must also call dbase_pack().

dbase_get_record

dbase_get_record -- dBase database에서 한 record를 읽어온다.

Description

array dbase_get_record(int dbase_identifier, int record);

Returns the data from record in an array. The array is indexed starting at 0, and includes an associative member named 'deleted' which is set to 1 if the record has been marked for deletion (see dbase_delete_record().

Each field is converted to the appropriate PHP type. (Dates are left as strings.)

dbase_get_record_with_names

(PHP3 >= 3.0.4, PHP4 )

dbase_get_record_with_names --  dBase database에서 한 record를 associative 배열로 읽어온다.

Description

array dbase_get_record_with_names (int dbase_identifier, int record)

Returns the data from record in an associative array. The array also includes an associative member named 'deleted' which is set to 1 if the record has been marked for deletion (see dbase_delete_record()).

Each field is converted to the appropriate PHP type. (Dates are left as strings.)

dbase_numfields

dbase_numfields -- dBase database의 field의 개수를 구한다.

Description

int dbase_numfields(int dbase_identifier);

Returns the number of fields (columns) in the specified database. Field numbers are between 0 and dbase_numfields($db)-1, while record numbers are between 1 and dbase_numrecords($db).

Example 1. Using dbase_numfields()

  1 
  2 $rec = dbase_get_record($db, $recno);
  3 $nf  = dbase_numfields($db);
  4 for ($i=0; $i < $nf; $i++) {
  5     print $rec[$i]."<br>\n";
  6 }
  7       

dbase_numrecords

dbase_numrecords -- fdBase database의 record의 개수를 구한다.

Description

int dbase_numrecords(int dbase_identifier);

Returns the number of records (rows) in the specified database. Record numbers are between 1 and dbase_numrecords($db), while field numbers are between 0 and dbase_numfields($db)-1.


XV. dbm functions

이 함수들은 dbm 형태의 databse(dbf)에 저장된 레코드들을 접근할 수 있게 해 준다. 이 형태의 database는 Berkeley db, gdbm 등과 내장된 flatfile 라이브러리 같은 일부 system 라이브러리 등이 지원하는데, 일반적인 relational databases와 달리 key/value의 쌍으로 data를 저장한다.

Example 1. dbm example

  1 
  2 $dbm = dbmopen("lastseen", "w");
  3 if (dbmexists($dbm, $userid)) {
  4   $last_seen = dbmfetch($dbm, $userid);
  5 } else {
  6   dbminsert($dbm, $userid, time());
  7 }
  8 do_stuff();
  9 dbmreplace($dbm, $userid, time());
 10 dbmclose($dbm);
 11 

Table of Contents
dbmopen … opens a dbm database
dbmclose … closes a dbm database
dbmexists … tells if a value exists for a key in a dbm database
dbmfetch … fetches a value for a key from a dbm database
dbminsert … inserts a value for a key in a dbm database
dbmreplace … replaces the value for a key in a dbm database
dbmdelete … deletes the value for a key from a dbm database
dbmfirstkey … retrieves the first key from a dbm database
dbmnextkey … retrieves the next key from a dbm database
dblist … describes the dbm-compatible library being used

dbmopen

dbmopen -- dbm database를 연다.

Description

int dbmopen(string filename, int flags);

The first argument is the full-path filename of the dbm file to be opened and the second is the file open mode which is one of "r", "n", "c" or "w" for read-only, new (implies read-write, and most likely will truncate an already-existing database of the same name), create (implies read-write, and will not truncate an already-existing database of the same name) and read-write respectively.

Returns an identifer to be passed to the other dbm functions on success, or false on failure.

If ndbm support is used, ndbm will actually create filename.dir and filename.pag files. gdbm only uses one file, as does the internal flat-file support, and Berkeley db creates a filename.db file. Note that PHP does its own file locking in addition to any file locking that may be done by the dbm library itself. PHP does not delete the .lck files it creates. It uses these files simply as fixed inodes on which to do the file locking. For more information on dbm files, see your Unix man pages, or obtain GNU's gdbm.

dbmclose

dbmclose -- dbm database를 닫는다.

Description

bool dbmclose(int dbm_identifier);

Unlocks and closes the specified database.

dbmexists

dbmexists -- dbm database에 주어진 key에 해당하는 값이 있는지 알아본다.

Description

bool dbmexists(int dbm_identifier, string key);

Returns true if there is a value associated with the key.

dbmfetch

dbmfetch -- dbm database에서 주어진 key의 value를 읽어온다.

Description

string dbmfetch(int dbm_identifier, string key);

Returns the value associated with key.

dbminsert

dbminsert -- dbm database에 key의 value를 삽입한다.

Description

int dbminsert(int dbm_identifier, string key, string value);

Adds the value to the database with the specified key.

Returns -1 if the database was opened read-only, 0 if the insert was successful, and 1 if the specified key already exists. (To replace the value, use dbmreplace().)

dbmreplace

dbmreplace -- dbm database에서 key의 value를 바꾼다.

Description

bool dbmreplace(int dbm_identifier, string key, string value);

Replaces the value for the specified key in the database.

This will also add the key to the database if it didn't already exist.

dbmdelete

dbmdelete -- dbm database에서 key의 value를 삭제한다.

Description

bool dbmdelete(int dbm_identifier, string key);

Deletes the value for key in the database.

Returns false if the key didn't exist in the database.

dbmfirstkey

dbmfirstkey -- dbm database의 첫 번째 key를 검색한다.

Description

string dbmfirstkey(int dbm_identifier);

Returns the first key in the database. Note that no particular order is guaranteed since the database may be built using a hash-table, which doesn't guarantee any ordering.

dbmnextkey

dbmnextkey -- dbm database의 다음 key를 검색한다.

Description

string dbmnextkey(int dbm_identifier, string key);

Returns the next key after key. By calling dbmfirstkey() followed by successive calls to dbmnextkey() it is possible to visit every key/value pair in the dbm database. For example:

Example 1. Visiting every key/value pair in a dbm database.

  1 
  2 $key = dbmfirstkey($dbm_id);
  3 while ($key) {
  4     echo "$key = " . dbmfetch($dbm_id, $key) . "\n";
  5     $key = dbmnextkey($dbm_id, $key);
  6 }
  7      

dblist

dblist -- 사용중인 dbm-compatible library에 대한 정보를 표시한다.

Description

string dblist(void);


XVI. Directory functions

Table of Contents
chdir … change directory
dir … directory class
closedir … close directory handle
opendir … open directory handle
readdir … read entry from directory handle
rewinddir … rewind directory handle

chdir

chdir -- 현재 directory를 바꾼다.

Description

int chdir(string directory);

Changes PHP's current directory to directory. Returns FALSE if unable to change directory, TRUE otherwise.

dir

dir -- directory class

Description

new dir(string directory);

A pseudo-object oriented mechanism for reading a directory. The given directory is opened. Two properties are available once directory has been opened. The handle property can be used with other directory functions such as readdir(), rewinddir() and closedir(). The path property is set to path the directory that was opened. Three methods are available: read, rewind and close.

Example 1. Dir() Example

  1 
  2 $d = dir("/etc");
  3 echo "Handle: ".$d->handle."<br>\n";
  4 echo "Path: ".$d->path."<br>\n";
  5 while($entry=$d->read()) {
  6     echo $entry."<br>\n";
  7 }
  8 $d->close();
  9       

closedir

closedir -- directory handle을 닫는다.

Description

void closedir(int dir_handle);

Closes the directory stream indicated by dir_handle. The stream must have previously been opened by opendir().

opendir

opendir -- directory handle을 연다.

Description

int opendir(string path);

Returns a directory handle to be used in subsequent closedir(), readdir(), and rewinddir() calls.

readdir

readdir -- directory handle로 부터 항목을 읽어온다.

Description

string readdir(int dir_handle);

Returns the filename of the next file from the directory. The filenames are not returned in any particular order.

Example 1. List all files in the current directory

  1 
  2 <?php
  3 $handle=opendir('.');
  4 echo "Directory handle: $handle\n";
  5 echo "Files:\n";
  6 while ($file = readdir($handle)) {
  7     echo "$file\n";
  8 }
  9 closedir($handle); 
 10 ?>
 11       

rewinddir

rewinddir -- directory handle을 directory의 시작 위치로 되돌린다.

Description

void rewinddir(int dir_handle);

Resets the directory stream indicated by dir_handle to the beginning of the directory.


XVII. Dynamic Loading functions

Table of Contents
dl … load a PHP extension at runtime

dl

dl -- PHP extension을 실행중에 load한다.

Description

int dl(string library);

Loads the PHP extension defined in library. See also the extension_dir configuration directive.


XXVIII. Encryption functions

이 함수들은 mcrypt와 같이 동작하기위해 만들었다.

이것은 mcrypt 라이브러리에 대한 인터페이스이다. mcrypt는 다음과 같은 광범위한 block 알고리즘을 지원한다. : DES, TripleDES, Blowfish (default), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 and GOST in CBC, OFB, CFB and ECB cipher modes 추가로 지원하는 RC6와 IDEA는 무료가 아니다.

이것을 사용하기 위해서는 우선 ftp://argeas.cs-net.gr/pub/unix/mcrypt/에서 libmcrypt-x.x.tar.gz을 다운받은 후에 포함된 설치 설명서 대로 설치한 후에, PHP를 --with-mcrypt 설정을 주어 이 확장을 활성화하여 컴파일 하여야 한다.

mcrypt는 위에서 언급된 암호방식(cipher)으로 암호화하거나 해독할 수 있다. mcrypt_cbc(), mcrypt_cfb(), mcrypt_ecb() mcrypt_ofb()의 네가지 중요한 mcrypt 명령은 각각 MCRYPT_ENCRYPT와 MCRYPT_DECRYPT로 명명된 두가지 모드로 동작한다.

Example 1. Encrypt an input value with TripleDES in ECB mode

  1 
  2 <?php
  3 $key = "this is a very secret key";
  4 $input = "Let us meet at 9 o'clock at the secret place.";
  5 
  6 $encrypted_data = mcrypt_ecb(MCRYPT_TripleDES, $key, $input, MCRYPT_ENCRYPT);
  7 ?>
  8      

위의 예제에서 여러분은 $encrypted_data에 암호화된 문자열 데이터를 얻게 된다.

mcrypt는 CBC, OFB, CFB, ECB의 4가지 암호 모드로 동작한다. 여기서는 개개의 모드에 대한 간략한 설명만을 하겠다. 보다 자세한 내용은 Schneier의 Applied Cryptography (ISBN 0-471-11709-9)를 보기 바란다.

PHP는 현재 bit stream에 대해서는 암호화하거나 해독할 수 없다. 현재의 PHP는 단지 문자열을 지원할 뿐이다.

지원되는 암호방식의 전체 리스트는 mcrypt.h 파일의 마지막에 있다. PHP에서 암호방식(cipher)을 사용하는 일반적인 법칙은 "MCRYPT_암호방식이름"의 형태이다.

아래는 현재 PHP/mcrypt에서 지원하는 암호방식의 간단한 List이다. mcrypt에서 지원한다고 표시되어 있으나, 여기에 나와있지 않은 것은 이 매뉴얼 이후에 추가로 지원된 것이므로 안심하고 사용하여도 된다.

CFB와 OFB 모드에서는 반드시 각각의 암호화 함수에 대해 initialization vector (IV)를 주어야 한다. CBC 모드에서는 옵션으로 줄 수 있다. IV는 유일하여야 하고, 암호/해제시에 동일하여야 한다. 암호화되어 저장된 데이터를 가지고, 데이터가 저장된곳의 index를 어떤 함수를 적용하여 여 얻은 값을 사용할 수 도 있다. (예, 파일이름의 MD5 키) 다른 대안으로 IV를 암호화된 데이터와 함께 보내는 방법이 있다. (여기에 대해서는 Schneier의 Applied Cryptography의 chapter 9.3을 보라.)

Table of Contents
mcrypt_get_cipher_name Get the name of the specified cipher
mcrypt_get_block_size Get the block size of the specified cipher
mcrypt_get_key_size Get the key size of the specified cipher
mcrypt_create_iv Create an initialization vector (IV) from a random source
mcrypt_cbc Encrypt/decrypt data in CBC mode
mcrypt_cfb Encrypt/decrypt data in CFB mode
mcrypt_ecb Encrypt/decrypt data in ECB mode
mcrypt_ofb Encrypt/decrypt data in OFB mode

mcrypt_get_cipher_name

mcrypt_get_cipher_name -- 특정 암호방식(cipher)의 이름을 구한다.

Description

string mcrypt_get_cipher_name (int cipher)

Mcrypt_get_cipher_name() is used to get the name of the specified cipher.

Mcrypt_get_cipher_name() takes the cipher number as an argument and returns the name of the cipher or false, if the cipher does not exist.

Example 1. Mcrypt_get_cipher_name() example

  1 
  2 <?php
  3 $cipher = MCRYPT_TripleDES;
  4 
  5 print mcrypt_get_cipher_name ($cipher);
  6 ?>
  7       

The above example will produce:
  1 
  2 TripleDES
  3      

mcrypt_get_block_size

mcrypt_get_block_size -- 특정 암호방식(cipher)의 블록 크기를 구한다.

Description

int mcrypt_get_block_size(int cipher);

mcrypt_get_block_size() is used to get the size of a block of the specified cipher.

mcrypt_get_block_size() takes one argument, the cipher and returns the size in bytes.

See also: mcrypt_get_key_size()

mcrypt_get_key_size

mcrypt_get_key_size -- 특정 암호방식(cipher)의 key의 길이를 구한다.

Description

int mcrypt_get_key_size(int cipher);

mcrypt_get_key_size() is used to get the size of a key of the specified cipher.

mcrypt_get_key_size() takes one argument, the cipher and returns the size in bytes.

See also: mcrypt_get_block_size()

mcrypt_create_iv

mcrypt_create_iv -- 랜덤 소스에서 initialization vector(IV)를 만든다.

Description

string mcrypt_create_iv (int size, int source)

Mcrypt_create_iv() is used to create an IV.

mcrypt_create_iv() takes two arguments, size determines the size of the IV, source specifies the source of the IV.

The source can be MCRYPT_RAND (system random number generator), MCRYPT_DEV_RANDOM (read data from /dev/random) and MCRYPT_DEV_URANDOM (read data from /dev/urandom). If you use MCRYPT_RAND, make sure to call srand() before to initialize the random number generator.

Example 1. Mcrypt_create_iv() example

  1 
  2 <?php
  3 $cipher = MCRYPT_TripleDES;
  4 $block_size = mcrypt_get_block_size ($cipher);
  5 $iv = mcrypt_create_iv ($block_size, MCRYPT_DEV_RANDOM);
  6 ?>
  7       

mcrypt_cbc

mcrypt_cbc -- CBC 모드로 데이터를 암호화하거나 해제 한다.

Description

int mcrypt_cbc(int cipher, string key, string data, int mode, string [iv]);

mcrypt_cbc() encrypts or decrypts (depending on mode) the data with cipher and key in CBC cipher mode and returns the resulting string.

cipher is one of the MCRYPT_ciphername constants.

key is the key supplied to the algorithm. It must be kept secret.

data is the data which shall be encrypted/decrypted.

mode is MCRYPT_ENCRYPT or MCRYPT_DECRYPT.

iv is the optional initialization vector.

See also: mcrypt_cfb(), mcrypt_ecb(), mcrypt_ofb()

mcrypt_cfb

mcrypt_cfb -- CFB 모드로 데이터를 암호화하거나 해제 한다.

Description

int mcrypt_cfb(int cipher, string key, string data, int mode, string iv);

mcrypt_cfb() encrypts or decrypts (depending on mode) the data with cipher and key in CFB cipher mode and returns the resulting string.

cipher is one of the MCRYPT_ciphername constants.

key is the key supplied to the algorithm. It must be kept secret.

data is the data which shall be encrypted/decrypted.

mode is MCRYPT_ENCRYPT or MCRYPT_DECRYPT.

iv is the initialization vector.

See also: mcrypt_cbc(), mcrypt_ecb(), mcrypt_ofb()

mcrypt_ecb

mcrypt_ecb -- ECB 모드로 데이터를 암호화하거나 해제 한다.

Description

int mcrypt_ecb(int cipher, string key, string data, int mode);

mcrypt_ecb() encrypts or decrypts (depending on mode) the data with cipher and key in ECB cipher mode and returns the resulting string.

cipher is one of the MCRYPT_ciphername constants.

key is the key supplied to the algorithm. It must be kept secret.

data is the data which shall be encrypted/decrypted.

mode is MCRYPT_ENCRYPT or MCRYPT_DECRYPT.

See also: mcrypt_cbc(), mcrypt_cfb(), mcrypt_ofb()

mcrypt_ofb

mcrypt_ofb -- OFB 모드로 데이터를 암호화하거나 해제 한다.

Description

int mcrypt_ofb(int cipher, string key, string data, int mode, string iv);

mcrypt_ofb() encrypts or decrypts (depending on mode) the data with cipher and key in OFB cipher mode and returns the resulting string.

cipher is one of the MCRYPT_ciphername constants.

key is the key supplied to the algorithm. It must be kept secret.

data is the data which shall be encrypted/decrypted.

mode is MCRYPT_ENCRYPT or MCRYPT_DECRYPT.

iv is the initialization vector.

See also: mcrypt_cbc(), mcrypt_cfb(), mcrypt_ecb()


XIX. filePro functions

이 함수들은 filePro 형태의 databse(dbf)에 저장된 레코드들을 read-only로 접근할 수 있게 해 준다.

filePro는 Fiserv, Inc.의 trademark로 등록되어 있다. 여러분은 http://www.fileproplus.com/에서 filePro에 관한 더 많은 정보를 얻을 수 있다.

Table of Contents
filepro … read and verify the map file
filepro_fieldname … gets the name of a field
filepro_fieldtype … gets the type of a field
filepro_fieldwidth … gets the width of a field
filepro_retrieve … retrieves data from a filePro database
filepro_fieldcount … find out how many fields are in a filePro database
filepro_rowcount … find out how many rows are in a filePro database

filepro

filepro -- map file파일을 읽고 검증한다.

Description

bool filepro(string directory);

This reads and verifies the map file, storing the field count and info.

No locking is done, so you should avoid modifying your filePro database while it may be opened in PHP.

filepro_fieldname

filepro_fieldname -- field의 이름을 구한다.

Description

string filepro_fieldname(int field_number);

Returns the name of the field corresponding to field_number.

filepro_fieldtype

filepro_fieldtype -- field의 type을 구한다.

Description

string filepro_fieldtype(int field_number);

Returns the edit type of the field corresponding to field_number.

filepro_fieldwidth

filepro_fieldwidth -- field의 크기(width)를 구한다.

Description

int filepro_fieldwidth(int field_number);

Returns the width of the field corresponding to field_number.

filepro_retrieve

filepro_retrieve -- filePro database에서 데이타를 검색한다.

Description

string filepro_retrieve(int row_number, int field_number);

Returns the data from the specified location in the database.

filepro_fieldcount

filepro_fieldcount -- filePro database의 field의 개수를 구한다.

Description

int filepro_fieldcount(void);

Returns the number of fields (columns) in the opened filePro database.

See also filepro().

filepro_rowcount

filepro_rowcount -- filePro database의 row의 개수를 구한다.

Description

int filepro_rowcount(void);

Returns the number of rows in the opened filePro database.

See also filepro().


XX. Filesystem functions

Table of Contents
basename … return filename component of path
chgrp … change file group
chmod … change file mode
chown … change file owner
clearstatcache … clear file stat cache
copy … copy file
delete … a dummy manual entry
dirname … return directory name component of path
diskfreespace … return available space in directory
fclose … close an open file pointer
feof … test for end-of-file on a file pointer
fgetc … get character from file pointer
fgetcsv … get line from file pointer and parse for CSV fields
fgets … get line from file pointer
fgetss … get line from file pointer and strip HTML tags
file … read entire file into an array
file_exists … Check whether a file exists.
fileatime … get last access time of file
filectime … get inode change time of file
filegroup … get file group
fileinode … get file inode
filemtime … get file modification time
fileowner … get file owner
fileperms … get file permissions
filesize … get file size
filetype … get file type
flock … portable advisory file locking
fopen … open file or URL
fpassthru … output all remaining data on a file pointer
fputs … write to a file pointer
fread … Binary-safe file read
fseek … seek on a file pointer
ftell … tell file pointer read/write position
ftruncate … Truncate a file to a given length.
fwrite … Binary-safe file write
set_file_buffer … Sets file buffering on the given file pointer
is_dir … tells whether the filename is a directory
is_executable … tells whether the filename is executable
is_file … tells whether the filename is a regular file
is_link … tells whether the filename is a symbolic link
is_readable … tells whether the filename is readable
is_writeable … tells whether the filename is writeable
link … Create a hard link
linkinfo … Get information about a link
mkdir … make directory
pclose … close process file pointer
popen … open process file pointer
readfile … output a file
readlink … Return the target of a symbolic link
rename … rename a file
rewind … rewind the position of a file pointer
rmdir … remove directory
stat … give information about a file
lstat … give information about a file or symbolic link
symlink … Create a symbolic link
tempnam … create unique file name
touch … set modification time of file
umask … changes the current umask
unlink … Delete a file

basename

basename -- path중 name 부분을 구한다.

Description

string basename(string path);

Given a string containing a path to a file, this function will return the base name of the file.

On Windows, both slash (/) and backslash (\) are used as path separator character. In other environments, it is the forward slash (/).

Example 1. basename() example

$path = "/home/httpd/html/index.php3";
$file = basename($path); // $file is set to "index.php3"

See also: dirname()

chgrp

chgrp -- 파일의 group을 바꾼다.

Description

int chgrp(string filename, mixed group);

Attempts to change the group of the file filename to group. Only the superuser may change the group of a file arbitrarily; other users may change the group of a file to any group of which that user is a member.

Returns true on success; otherwise returns false.

On Windows, does nothing and returns true.

See also chown() and chmod().

chmod

chmod -- 파일의 mode를 바꾼다.

Description

int chmod(string filename, int mode);

Attempts to change the mode of the file specified by filename to that given in mode.

Note that mode is not automatically assumed to be an octal value. To ensure the expected operation, you need to prefix mode with a zero (0):

chmod( "/somedir/somefile", 755 );   // decimal; probably incorrect
chmod( "/somedir/somefile", 0755 );  // octal; correct value of mode

Returns true on success and false otherwise.

See also chown() and chgrp().

chown

chown -- 파일의 owner를 바꾼다.

Description

int chown(string filename, mixed user);

Attempts to change the owner of the file filename to user user. Only the superuser may change the owner of a file.

Returns true on success; otherwise returns false.

NOTE: On Windows, does nothing and returns true.

See also chown() and chmod().

clearstatcache

clearstatcache -- 파일의 stat cache를 바꾼다.

Description

void clearstatcache(void);

Invoking the stat() or lstat() system call on most systems is quite expensive. Therefore, the result of the last call to any of the status functions (listed below) is stored for use on the next such call using the same filename. If you wish to force a new status check, for instance if the file is being checked many times and may change or disappear, use this function to clear the results of the last call from memory.

This value is only cached for the lifetime of a single request.

Affected functions include stat(), lstat(), file_exists(), is_writeable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype(), and fileperms().

copy

copy -- 파일을 복사한다.

Description

int copy(string source, string dest);

Makes a copy of a file. Returns true if the copy succeeded, false otherwise.

Example 1. copy() example

if (!copy($file, $file.'.bak')) {
    print("failed to copy $file...<br>\n");
}

See also: rename()

delete

delete -- 실제로는 없는 명령

Description

void delete(string file);

이 명령을 찾는 사람들은 아마 unlink()unset() 명령을 사용하는 기능을 원할 것이다.

See also: 파일을 지우기 위해서는 unlink(), 변수를 지우기 위해서는 unset()

dirname

dirname -- path의 Directory부분을 돌려준다.

Description

string dirname(string path);

Given a string containing a path to a file, this function will return the name of the directory.

On Windows, both slash (/) and backslash (\) are used as path separator character. In other environments, it is the forward slash (/).

Example 1. dirname() example

$path = "/etc/passwd";
$file = dirname($path); // $file is set to "/etc"

See also: basename()

diskfreespace

diskfreespace -- 해당 디렉토리에 저장 가능한 남은 용량을 반환한다.

Description

float diskfreespace(string directory);

Given a string containing a directory, this function will return the number of bytes available on the corresponding disk.

Example 1. diskfreespace() example

$df = diskfreespace("/"); // $df contains the number of bytes available on "/"

fclose

fclose -- 지정된 file pointer를 닫는다.

Description

int fclose(int fp);

The file pointed to by fp is closed.

Returns true on success and false on failure.

The file pointer must be valid, and must point to a file successfully opened by fopen() or fsockopen().

feof

feof -- file pointer가 end-of-file에 있는가 검사한다.

Description

int feof(int fp);

Returns true if the file pointer is at EOF or an error occurs; otherwise returns false.

The file pointer must be valid, and must point to a file successfully opened by fopen(), popen(), or fsockopen().

fgetc

fgetc -- file pointer에서 문자를 읽는다.

Description

string fgetc(int fp);

Returns a string containing a single character read from the file pointed to by fp. Returns FALSE on EOF (as does feof()).

The file pointer must be valid, and must point to a file successfully opened by fopen(), popen(), or fsockopen().

See also fread(), fopen(), popen(), fsockopen(), and fgets().

fgetcsv

fgetcsv -- 파일의 현재 위치에서 CSV 필드로 된 줄을 읽어와서 parse한다.

Description

array fgetcsv(int fp, int length, string [delimiter]);

Similar to fgets() except that fgetcsv() parses the line it reads for fields in CSV format and returns an array containing the fields read. The field delimiter is a comma, unless you specifiy another delimiter with the optional third parameter.

fp must be a valid file pointer to a file successfully opened by fopen(), popen(), or fsockopen()

length must be greater than the longest line to be found in the CSV file (allowing for trailing line-end characters).

fgetcsv() returns false on error, including end of file.

NB A blank line in a CSV file will be returned as an array comprising just one single null field, and will not be treated as an error.

Example 1. fgetcsv() example - Read and print entire contents of a CSV file

$row=1;
$fp = fopen("test.csv","r");
while ($data = fgetcsv($fp,1000)) {
        $num = count($data);
        print "<p> $num fields in line $row: <br>";
        $row++;
        for ( $c=0; $c<$num; $c++ ) print $data[$c] . "<br>";
}
fclose($fp);

fgets

fgets -- file pointer에서 한 줄을 읽어 온다.

Description

string fgets(int fp, int length);

Returns a string of up to length - 1 bytes read from the file pointed to by fp. Reading ends when length - 1 bytes have been read, on a newline (which is included in the return value), or on EOF (whichever comes first).

If an error occurs, returns false.

Common Pitfalls:

People used to the 'C' semantics of fgets should note the difference in how EOF is returned.

The file pointer must be valid, and must point to a file successfully opened by fopen(), popen(), or fsockopen().

A simple example follows:

Example 1. Reading a file line by line

$fd = fopen("/tmp/inputfile.txt", "r");
while ($buffer = fgets($fd, 4096)) {
  echo $buffer;
}
fclose($fd);

See also fread(), fopen(), popen(), fgetc(), and fsockopen().

fgetss

fgetss -- file pointer에서 한 줄을 읽어와 HTML tag들을 strip한다.

Description

string fgetss(int fp, int length);

Identical to fgets(), except that fgetss attempts to strip any HTML and PHP tags from the text it reads.

See also fgets(), fopen(), fsockopen(), popen(), and strip_tags().

file

file -- 파일 전체를 읽어서 배열에 저장한다.

Description

array file(string filename);

Identical to readfile(), except that file() returns the file in an array. Each element of the array corresponds to a line in the file, with the newline still attached.

See also readfile(), fopen(), and popen().

file_exists

file_exists -- 파일이 존재하는지 검사한다.

Description

int file_exists(string filename);

Returns true if the file specified by filename exists; false otherwise.

The results of this function are cached. See clearstatcache() for more details.

fileatime

fileatime -- 파일에 마지막으로 접근한 시간을 구한다.

Description

int fileatime(string filename);

Returns the time the file was last accessed, or false in case of an error.

The results of this function are cached. See clearstatcache() for more details.

filectime

filectime -- 파일의 inode가 변경된 시간을 구한다.

Description

int filectime(string filename);

Returns the time the file was last changed, or false in case of an error.

The results of this function are cached. See clearstatcache() for more details.

filegroup

filegroup -- 파일의 group을 구한다.

Description

int filegroup(string filename);

Returns the group ID of the owner of the file, or false in case of an error.

The results of this function are cached. See clearstatcache() for more details.

fileinode

fileinode -- 파일의 inode를 구한다.

Description

int fileinode(string filename);

Returns the inode number of the file, or false in case of an error.

The results of this function are cached. See clearstatcache() for more details.

filemtime

filemtime -- 파일이 수정된 시간을 구한다.

Description

int filemtime(string filename);

Returns the time the file was last modified, or false in case of an error.

The results of this function are cached. See clearstatcache() for more details. error.

fileowner

fileowner -- 파일의 owner를 구한다.

Description

int fileowner(string filename);

Returns the user ID of the owner of the file, or false in case of an error.

The results of this function are cached. See clearstatcache() for more details. error.

fileperms

fileperms -- 파일의 permission을 구한다.

Description

int fileperms(string filename);

Returns the permissions on the file, or false in case of an error.

The results of this function are cached. See clearstatcache() for more details.

filesize

filesize -- 파일의 크기를 구한다.

Description

int filesize(string filename);

Returns the size of the file, or false in case of an error.

The results of this function are cached. See clearstatcache() for more details.

filetype

filetype -- 파일의 type을 구한다.

Description

string filetype(string filename);

Returns the type of the file. Possible values are fifo, char, dir, block, link, file, and unknown.

Returns false if an error occurs.

The results of this function are cached. See clearstatcache() for more details.

flock

flock -- portable 파일 locking

Description

bool flock(int fp, int operation);

PHP supports a portable way of locking complete files in an advisory way (which means all accessing programs have to use the same way of locking or it will not work).

flock() operates on fp which must be an open file pointer. operation is one of the following values:

flock() allows you to perform a simple reader/writer model which can be used on virtually every platform (including most Unices and even Windows).

flock() returns true on success and false on error (e.g. when a lock could not be acquired).

fopen

fopen -- 파일이나 URL을 연다.

Description

int fopen(string filename, string mode);

If filename begins with "http://" (not case sensitive), an HTTP 1.0 connection is opened to the specified server and a file pointer is returned to the beginning of the text of the response.

Does not handle HTTP redirects, so you must include trailing slashes on directories.

If filename begins with "ftp://" (not case sensitive), an ftp connection to the specified server is opened and a pointer to the requested file is returned. If the server does not support passive mode ftp, this will fail. You can open files for either reading and writing via ftp (but not both simultaneously).

If filename begins with anything else, the file will be opened from the filesystem, and a file pointer to the file opened is returned.

If the open fails, the function returns false.

mode may be any of the following:

As well, mode may contain the letter 'b'. This is useful only on systems which differentiate between binary and text files (i.e., it's useless on Unix). If not needed, this will be ignored.

Example 1. fopen() example

$fp = fopen("/home/rasmus/file.txt", "r");
$fp = fopen("http://www.php.net/", "r");
$fp = fopen("ftp://user:password@example.com/", "w");

If you are experiencing problems with reading and writing to files and you're using the server module version of PHP, remember to make sure that the files and directories you're using are accessible to the server process.

On the Windows platform, be careful to escape any backslashes used in the path to the file, or use forward slashes.

$fp = fopen("c:\\data\\info.txt", "r");

See also fclose(), fsockopen(), and popen().

fpassthru

fpassthru -- file pointer에서부터 남아 있는 모든 데이타를 출력한다.

Description

int fpassthru(int fp);

Reads to EOF on the given file pointer and writes the results to standard output.

If an error occurs, fpassthru() returns false.

The file pointer must be valid, and must point to a file successfully opened by fopen(), popen(), or fsockopen(). The file is closed when fpassthru() is done reading it (leaving fp useless).

If you just want to dump the contents of a file to stdout you may want to use the readfile(), which saves you the fopen() call.

See also readfile(), fopen(), popen(), and fsockopen()

fputs

fputs -- file pointer에 쓴다.

Description

int fputs(int fp, string str, int [length]);

fputs() is an alias to fwrite(), and is identical in every way. Note that the length parameter is optional and if not specified the entire string will be written.

fread

fread -- 파일을 binary로 읽어온다.

Description

string fread(int fp, int length);

fread() reads up to length bytes from the file pointer referenced by fp. Reading stops when length bytes have been read or EOF is reached, whichever comes first.

// get contents of a file into a string
$filename = "/usr/local/something.txt";
$fd = fopen( $filename, "r" );
$contents = fread( $fd, filesize( $filename ) );
fclose( $fd );

See also fwrite(), fopen(), fsockopen(), popen(), fgets(), fgetss(), file(), and fpassthru().

fseek

fseek -- file pointer를 옮긴다.

Description

int fseek(int fp, int offset);

Sets the file position indicator for the file referenced by fp to offset bytes into the file stream. Equivalent to calling (in C) fseek( fp, offset, SEEK_SET ).

Upon success, returns 0; otherwise, returns -1. Note that seeking past EOF is not considered an error.

May not be used on file pointers returned by fopen() if they use the "http://" or "ftp://" formats.

See also ftell() and rewind().

ftell

ftell -- file pointer의 read/write 위치를 구한다.

Description

int ftell(int fp);

Returns the position of the file pointer referenced by fp; i.e., its offset into the file stream.

If an error occurs, returns false.

The file pointer must be valid, and must point to a file successfully opened by fopen() or popen().

See also fopen(), popen(), fseek() and rewind().

ftruncate

(PHP4 >= 4.0RC1)

ftruncate --  파일을 주어진 크기로 만든다.

Description

int ftruncate (int fp, int size)

Takes the filepointer, fp, and truncates the file to length, size. This function returns true on success and false on failure.

fwrite

fwrite -- 파일을 Binary로 쓴다.

Description

int fwrite(int fp, string string, int [length]);

fwrite() writes the contents of string to the file stream pointed to by fp. If the length argument is given, writing will stop after length bytes have been written or the end of string is reached, whichever comes first.

Note that if the length argument is given, then the magic_quotes_runtime configuration option will be ignored and no slashes will be stripped from string.

See also fread(), fopen(), fsockopen(), popen(), and fputs().

set_file_buffer

set_file_buffer -- 해당 파일 포인터에서 파일 버퍼링(buffering)을 지정한다.

Description

int fwrite(int fp, int buffer);

set_file_buffer() sets the buffering for write operations on the given filepointer fp to buffer bytes. If buffer is 0 then write operations are unbuffered.

The function returns 0 on success, or EOF if the request cannot be honored.

Note that the default for any fopen with calling set_file_buffer is 8K.

See also fopen().

is_dir

is_dir -- 지정된 파일명이 directory인가 알려준다.

Description

bool is_dir(string filename);

Returns true if the filename exists and is a directory.

The results of this function are cached. See clearstatcache() for more details.

See also is_file() and is_link().

is_executable

is_executable -- 지정된 파일명이 실행가능 파일인가 알려준다.

Description

bool is_executable(string filename);

Returns true if the filename exists and is executable.

The results of this function are cached. See clearstatcache() for more details.

See also is_file() and is_link().

is_file

is_file -- 지정된 파일명이 보통파일인가 알려준다.

Description

bool is_file(string filename);

Returns true if the filename exists and is a regular file.

The results of this function are cached. See clearstatcache() for more details.

See also is_dir() and is_link().

is_link

is_link -- 지정된 파일명이 symbolic link인가 알려준다.

Description

bool is_link(string filename);

Returns true if the filename exists and is a symbolic link.

The results of this function are cached. See clearstatcache() for more details.

See also is_dir() and is_file().

is_readable

is_readable -- 지정된 파일명이 읽기 가능인가 알려준다.

Description

bool is_readable(string filename);

Returns true if the filename exists and is readable.

Keep in mind that PHP may be accessing the file as the user id that the web server runs as (often 'nobody'). Safe mode limitations are not taken into account.

The results of this function are cached. See clearstatcache() for more details.

See also is_writeable().

is_writeable

is_writeable -- 지정된 파일명이 쓰기 가능인가 알려준다.

Description

bool is_readable(string filename);

Returns true if the filename exists and is writeable. The filename argument may be a directory name allowing you to check if a directory is writeable.

Keep in mind that PHP may be accessing the file as the user id that the web server runs as (often 'nobody'). Safe mode limitations are not taken into account.

The results of this function are cached. See clearstatcache() for more details.

See also is_readable().

link

link -- hard link를 만든다.

Description

int link(string target, string link);

Link() creates a hard link.

See also the symlink() to create soft links, and readlink() along with linkinfo().

linkinfo

linkinfo -- link에 대한 정보를 구한다.

Description

int linkinfo(string path);

Linkinfo() returns the st_dev field of the UNIX C stat structure returned by the lstat system call. This function is used to verify if a link (pointed to by path) really exists (using the same method as the S_ISLNK macro defined in stat.h). Returns 0 or FALSE in case of error.

See also symlink(), link(), and readlink().

mkdir

mkdir -- directory를 만든다.

Description

int mkdir(string pathname, int mode);

Attempts to create the directory specified by pathname.

Note that you probably want to specify the mode as an octal number, which means it should have a leading zero.

mkdir("/path/to/my/dir", 0700);

Returns true on success and false on failure.

See also rmdir().

pclose

pclose -- process file pointer를 닫는다.

Description

int pclose(int fp);

Closes a file pointer to a pipe opened by popen().

The file pointer must be valid, and must have been returned by a successful call to popen().

Returns the termination status of the process that was run.

See also popen().

popen

popen -- process file pointer를 연다.

Description

int popen(string command, string mode);

Opens a pipe to a process executed by forking the command given by command.

Returns a file pointer identical to that returned by fopen(), except that it is unidirectional (may only be used for reading or writing) and must be closed with pclose(). This pointer may be used with fgets(), fgetss(), and fputs().

If an error occurs, returns false.

       $fp = popen( "/bin/ls", "r" );
      

See also pclose().

readfile

readfile -- file을 읽어 출력한다.

Description

int readfile(string filename);

Reads a file and writes it to standard output.

Returns the number of bytes read from the file. If an error occurs, false is returned and unless the function was called as @readfile, an error message is printed.

If filename begins with "http://" (not case sensitive), an HTTP 1.0 connection is opened to the specified server and the text of the response is written to standard output.

Does not handle HTTP redirects, so you must include trailing slashes on directories.

If filename begins with "ftp://" (not case sensitive), an ftp connection to the specified server is opened and the requested file is written to standard output. If the server does not support passive mode ftp, this will fail.

If filename begins with neither of these strings, the file will be opened from the filesystem and its contents written to standard output.

See also fpassthru(), file(), fopen(), include(), require(), and virtual().

readlink

readlink -- symbolic link의 대상을 반환한다.

Description

int readlink(string path);

Readlink() does the same as the readlink C function and returns the contents of the symbolic link path or 0 in case of error.

See also symlink(), readlink() and linkinfo().

rename

rename -- 파일명을 바꾼다.

Description

int rename(string oldname, string newname);

Attempts to rename oldname to newname.

Returns true on success and false on failure.

rewind

rewind -- file pointer를 파일의 처음 위치로 설정한다.

Description

int rewind(int fp);

Sets the file position indicator for fp to the beginning of the file stream.

If an error occurs, returns 0.

The file pointer must be valid, and must point to a file successfully opened by fopen().

See also fseek() and ftell().

rmdir

rmdir -- directory를 지운다.

Description

int rmdir(string dirname);

Attempts to remove the directory named by pathname. The directory must be empty, and the relevant permissions must permit this.

If an error occurs, returns 0.

See also mkdir().

stat

stat -- 파일의 stat 정보를 구한다.

Description

array stat(string filename);

Gathers the statistics of the file named by filename.

Returns an array with the statistics of the file with the following elements:

* - only valid on systems supporting the st_blksize type--other systems (i.e. Windows) return -1

The results of this function are cached. See clearstatcache() for more details.

lstat

lstat -- 파일이나 symbolic link의 stat 정보를 구한다.

Description

array lstat(string filename);

Gathers the statistics of the file or symbolic link named by filename. This function is identical to the stat() function except that if the filename parameter is a symbolic link, the status of the symbolic link is returned, not the status of the file pointed to by the symbolic link.

Returns an array with the statistics of the file with the following elements:

* - only valid on systems supporting the st_blksize type--other systems (i.e. Windows) return -1

The results of this function are cached. See clearstatcache() for more details.

symlink

symlink -- symbolic link를 만든다.

Description

int symlink(string target, string link);

symlink() creates a symbolic link from the existing target with the specified name link.

See also link() to create hard links, and readlink() along with linkinfo().

tempnam

tempnam -- 유일한 파일명을 만든다.

Description

string tempnam(string dir, string prefix);

Creates a unique temporary filename in the specified directory. If the directory does not exist, tempnam() may generate a filename in the system's temporary directory.

The behaviour of the tempnam() function is system dependent. On Windows the TMP environment variable will override the dir parameter, on Linux the TMPDIR environment variable has precedence, while SVR4 will always use your dir parameter if the directory it points to exists. Consult your system documentation on the tempnam(3) function if in doubt.

Returns the new temporary filename, or the null string on failure.

Example 1. tempnam() example

$tmpfname = tempnam( "/tmp", "FOO" );

touch

touch -- 파일의 수정 시각을 설정한다.

Description

int touch(string filename, int time);

Attempts to set the modification time of the file named by filename to the value given by time. If the option time is not given, uses the present time.

If the file does not exist, it is created.

Returns true on success and false otherwise.

umask

umask -- 현재의 umask를 변경한다.

Description

int umask(int mask);

Umask() sets PHP's umask to mask & 0777 and returns the old umask. When PHP is being used as a server module, the umask is restored when each request is finished.

Umask() without arguments simply returns the current umask.

unlink

unlink -- 파일을 지운다.

Description

int unlink(string filename);

Deletes filename. Similar to the Unix C unlink() function.

Returns 0 or FALSE on an error.

See also rmdir() for removing directories.


XXI. Forms Data Format functions

이것은 PHP에서 Forms Data Format (FDF)을 지원하기위한 첫 번째 시도이다. FDF와 이것의 사용법에 대해 알고 싶다면 http://partners.adobe.com/asn/developer/acrosdk/forms.html을 읽어보아야 할 것이다.

Note: 현재 Adobe는 Linux용으로 libc5에 호환되는 버전만을 제공한다. glibc2에서 테스트 해 보았으나 segmentation fault가 발생하였다. 만약 누군가 이것을 가능하게 한 사람이 있다면 언급해 주기를 바란다.

Note: 만약 php를 fdftk 지원으로 설정하는 것이 잘 안되는 경우, 헤더 파일인 FdfTk.h와 libFdfTk.so 라이브러리 파일이 제자리에 있는가부터 확인해 보자. 두 파일은 각각 fdftk-dir/include와 fdftk-dir/lib 디렉토리에 있어야 한다. 여러분이 FdfTk 배포본을 풀어놓기만 한 경우 아마도 이 두 파일은 제 위치에 있지 않을 것이다.

FDF의 아이디어는 HTML 폼과 비슷하다. 기본적으로 다른 것은 submit 버튼이 눌려졌을 때 서버에 전송되는 포맷(실제로 이것이 Form Data Format이다)과, 폼 자체의 형태(이것은 Portable Document Format, PDF이다)이다. FDF 데이터를 처리하는 것이 fdf 함수들이 제공하는 기능중 하나이다. 하지만 그것이 전부는 아니다. 이것은 기존의 PDF 폼에 이 폼 자체를 수정하지 않고도 input 필드와 데이터를 추가할 수 있다. 이런 경우 FDF 문서를 생성하여 (fdf_create()) 각각의 input 필드에 값을 설정하고 (fdf_set_value()), 이것을 PDF 폼에 배치시키면 된다. (fdf_set_file()) 마지막으로 이것은 application/vnd.fdf라는 MimeType을 가지고 브라우저로 전송되어야 한다. 여러분의 브라우저에 있는 Acrobat reader plugin은 이 마임 타입을 인식하고, 이 결합된 PDF form을 읽어 FDF 문서로부터 데이터를 읽어 데이터를 채운다.

다음은 form data를 사용해보는 예제이다.

Example 1. Evaluating a FDF document

  1 
  2 <?php
  3 // Save the FDF data into a temp file
  4 $fdffp = fopen("test.fdf", "w");
  5 fwrite($fdffp, $HTTP_FDF_DATA, strlen($HTTP_FDF_DATA));
  6 fclose($fdffp);
  7 
  8 // Open temp file and evaluate data
  9 // The pdf form contained several input text fields with the names
 10 // volume, date, comment, publisher, preparer, and two checkboxes
 11 // show_publisher and show_preparer.
 12 $fdf = fdf_open("test.fdf");
 13 $volume = fdf_get_value($fdf, "volume");
 14 echo "The volume field has the value '<B>$volume</B>'<BR>";
 15 
 16 $date = fdf_get_value($fdf, "date");
 17 echo "The date field has the value '<B>$date</B>'<BR>";
 18 
 19 $comment = fdf_get_value($fdf, "comment");
 20 echo "The comment field has the value '<B>$comment</B>'<BR>";
 21 
 22 if(fdf_get_value($fdf, "show_publisher") == "On") {
 23   $publisher = fdf_get_value($fdf, "publisher");
 24   echo "The publisher field has the value '<B>$publisher</B>'<BR>";
 25 } else
 26   echo "Publisher shall not be shown.<BR>";
 27 
 28 if(fdf_get_value($fdf, "show_preparer") == "On") {
 29   $preparer = fdf_get_value($fdf, "preparer");
 30   echo "The preparer field has the value '<B>$preparer</B>'<BR>";
 31 } else
 32   echo "Preparer shall not be shown.<BR>";
 33 fdf_close($fdf);
 34 ?>
 35      
Table of Contents
fdf_open … Opens a new fdf document
fdf_close … Closes the fdf document
fdf_create … Creates a new fdf document
fdf_save … Saves a fdf document
fdf_get_value … Gets the value of a field
fdf_set_value … Sets the value of a field
fdf_next_field_name … Next field name
fdf_set_ap … Sets the appearence of a field
fdf_set_status … Sets the value of the /STATUS key
fdf_get_status … Gets the value of the /STATUS key
fdf_set_file … Sets the value of the /F key
fdf_get_file … Gets the value of the /F key

fdf_open

fdf_open -- 새 fdf document를 연다

Description

int pdf_open(string filename);

The fdf_open() function opens a file with form data. This file must contain the data as returned from a PDF form. Currently, the file has to be created 'manually' by using fopen() and writing the content of HTTP_FDF_DATA with fwrite() into it. A mechanism like for HTML form data where for each input field a variable is created does not exist.

Example 1. Accessing the form data

<?php
// Save the FDF data into a temp file
$fdffp = fopen("test.fdf", "w");
fwrite($fdffp, $HTTP_FDF_DATA, strlen($HTTP_FDF_DATA));
fclose($fdffp);
// Open temp file and evaluate data
$fdf = fdf_open("test.fdf");
...
fdf_close($fdf);
?>
     

See also fdf_close().

fdf_close

fdf_close -- fdf document를 닫는다.

Description

void fdf_close(int fdf_document);

The fdf_close() function closes the fdf document.

See also fdf_open().

fdf_create

fdf_create -- 새 fdf document를 만든다.

Description

int fdf_create(void );

The fdf_create() creates a new FDF document. This function is needed if one would like to populate input fields in a PDF document with data.

Example 1. Populating a PDF document

<?php
$outfdf = fdf_create();
fdf_set_value($outfdf, "volume", $volume, 0);
fdf_set_file($outfdf, "http:/testfdf/resultlabel.pdf");
fdf_save($outfdf, "outtest.fdf");
fdf_close($outfdf);
Header("Content-type: application/vnd.fdf");
$fp = fopen("outtest.fdf", "r");
fpassthru($fp);
unlink("outtest.fdf");
?>
     

See also fdf_close(), fdf_save(), fdf_open().

fdf_save

fdf_save -- fdf document를 저장한다.

Description

int fdf_save(string filename);

The fdf_save() function saves a FDF document. The FDF Toolkit provides a way to output the document to stdout if the parameter filename is '.'. This does not work if PHP is used as an apache module. In such a case one will have to write to a file and use e.g. fpassthru(). to output it.

See also fdf_close() and example for fdf_create().

fdf_get_value

fdf_get_value -- 한 필드의 값을 읽어온다.

Description

string fdf_get_value(int fdf_document, string fieldname);

The fdf_get_value() function returns the value of a field.

See also fdf_set_value().

fdf_set_value

fdf_set_value -- 한 필드의 값을 설정한다.

Description

void fdf_set_value(int fdf_document, string fieldname, string value, int isName);

The fdf_set_value() function sets the value of a field. The last parameter determines if the field value is to be converted to a PDF Name (isName = 1) or set to a PDF String (isName = 0).

See also fdf_get_value().

fdf_next_field_name

fdf_next_field_name -- 다음 필드의 이름을 반환한다.

Description

string fdf_next_field_name(int fdf_document, string fieldname);

The fdf_next_field_name() function returns the name of the field after the field in fieldname or the field name of the first field if the second paramter is NULL.

See also fdf_set_field(), fdf_get_field().

fdf_set_ap

fdf_set_ap -- 한 필드의 appearance를 설정한다.

Description

void fdf_set_ap(int fdf_document, string field_name, int face, string filename, int page_number);

The fdf_set_ap() function sets the appearance of a field (i.e. the value of the /AP key). The possible values of face are 1=FDFNormalAP, 2=FDFRolloverAP, 3=FDFDownAP.

fdf_set_status

fdf_set_status -- /STATUS 키의 값을 설정한다.

Description

void fdf_set_status(int fdf_document, string status);

The fdf_set_status() sets the value of the /STATUS key.

See also fdf_get_status().

fdf_get_status

fdf_get_status -- /STATUS 키의 값을 읽어온다.

Description

string fdf_get_status(int fdf_document);

The fdf_get_status() returns the value of the /STATUS key.

See also fdf_set_status().

fdf_set_file

fdf_set_file -- /F 키의 값을 설정한다.

Description

void fdf_set_file(int fdf_document, string filename);

The fdf_set_file() sets the value of the /F key. The /F key is just a reference to a PDF form which is to be populated with data. In a web environment it is a URL (e.g. http:/testfdf/resultlabel.pdf).

See also fdf_get_file() and example for fdf_create().

fdf_get_file

fdf_get_file -- /F 키의 값을 읽어온다.

Description

string fdf_get_file(int fdf_document);

The fdf_set_file() returns the value of the /F key.

See also fdf_set_file().


XXII. FTP functions

File Transfer Protocol인 FTP 함수들이다.

FTP_ASCII 와 FTP_BINARY 의 두 개의 상수가 FTP 모듈에 미리 정의되어 있다.

Table of Contents
ftp_connect … Opens up an FTP connection
ftp_login … Logs in an FTP connection
ftp_pwd … Returns the current directory name
ftp_cdup … Changes to the parent directory
ftp_chdir … Changes directories on a FTP server
ftp_mkdir … Creates a directory
ftp_rmdir … Removes a directory
ftp_nlist … Returns a list of files in the given directory.
ftp_rawlist … Returns a detailed list of files in the given directory.
ftp_systype … Returns the system type identifier of the remote FTP server.
ftp_pasv … Turns passive mode on or off.
ftp_get … Downloads a file from the FTP server.
ftp_fget … Downloads a file from the FTP server and saves to an open file.
ftp_put … Uploads a file to the FTP server.
ftp_fput … Uploads from an open file to the FTP server.
ftp_size … Returns the size of the given file.
ftp_mdtm … Returns the last modified time of the given file.
ftp_rename … Renames a file on the ftp server.
ftp_delete … Deletes a file on the ftp server.
ftp_site … Sends a SITE command to the server.
ftp_quit … Closes an FTP connection

ftp_connect

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_connect -- FTP 연결을 연다.

Description

int ftp_connect (string host [, int port])

Returns a FTP stream on success, false on error.

ftp_connect() opens up a FTP connection to the specified host. The port parameter specifies an alternate port to connect to. If it is omitted or zero, then the default FTP port, 21, will be used.

ftp_login

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_login -- FTP 연결에 로그인한다.

Description

int ftp_login (int ftp_stream, string username, string password)

Returns true on success, false on error.

Logs in the given FTP stream.

ftp_pwd

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_pwd -- 현재 디렉토리명을 반환한다.

Description

int ftp_pwd (int ftp_stream)

Returns the current directory, or false on error.

ftp_cdup

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_cdup -- 부모 디렉토리로 이동한다.

Description

int ftp_cdup (int ftp_stream)

Returns true on success, false on error.

Changes to the parent directory.

ftp_chdir

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_chdir -- FTP 서버의 특정 디렉토리로 이동한다.

Description

int ftp_chdir (int ftp_stream, string directory)

Returns true on success, false on error.

Changes to the specified directory.

ftp_mkdir

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_mkdir -- 디렉토리를 만든다.

Description

string ftp_mkdir (int ftp_stream, string directory)

Returns the newly created directory name on success, false on error.

Creates the specified directory.

ftp_rmdir

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_rmdir -- 디렉토리를 지운다.

Description

int ftp_rmdir (int ftp_stream, string directory)

Returns true on success, false on error.

Removes the specified directory.

ftp_nlist

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_nlist -- 주어진 디렉토리의 파일명의 목록을 배열로 돌려준다.

Description

int ftp_nlist (int ftp_stream, string directory)

Returns an array of filenames on success, false on error.

ftp_rawlist

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_rawlist -- 주어진 디렉토리의 파일의 자세한 목록을 배열로 돌려준다.

Description

int ftp_rawlist (int ftp_stream, string directory)

ftp_rawlist() executes the FTP LIST command, and returns the result as an array. Each array element corresponds to one line of text. The output is not parsed in any way. The system type identifier returned by ftp_systype() can be used to determine how the results should be interpreted.

ftp_systype

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_systype --  원격 FTP 서버의 시스템 종류 식별자(system type identifier)를 반환한다.

Description

int ftp_systype (int ftp_stream)

Returns the remote system type, or false on error.

ftp_pasv

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_pasv -- passive 모드를 켜거나 끈다.

Description

int ftp_pasv (int ftp_stream, int pasv)

Returns true on success, false on error.

ftp_pasv() turns on passive mode if the pasv parameter is true (it turns off passive mode if pasv is false.) In passive mode, data connections are initiated by the client, rather than by the server.

ftp_get

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_get -- FTP 서버로부터 한 파일을 가져온다.

Description

int ftp_get (int ftp_stream, string local_file, string remote_file, int mode)

Returns true on success, false on error.

ftp_get() retrieves remote_file from the FTP server, and saves it to local_file locally. The transfer mode specified must be either FTP_ASCII or FTP_BINARY.

ftp_fget

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_fget -- FTP 서버로부터 한 파일을 가져와 기존에 열려진 파일로 저장한다.

Description

int ftp_fget (int ftp_stream, int fp, string remote_file, int mode)

Returns true on success, false on error.

ftp_fget() retrieves remote_file from the FTP server, and writes it to the given file pointer, fp. The transfer mode specified must be either FTP_ASCII or FTP_BINARY.

ftp_put

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_put -- FTP 서버로 한 파일을 올린다.

Description

int ftp_put (int ftp_stream, string remote_file, string local_file, int mode)

Returns true on success, false on error.

ftp_put() stores local_file on the FTP server, as remote_file. The transfer mode specified must be either FTP_ASCII or FTP_BINARY.

ftp_fput

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_fput -- 열려져 있는 파일을 FTP 서버로 올린다.

Uploads from an open file to the FTP server.

Description

int ftp_fput (int ftp_stream, string remote_file, int fp, int mode)

Returns true on success, false on error.

ftp_fput() uploads the data from the file pointer fp until end of file. The results are stored in remote_file on the FTP server. The transfer mode specified must be either FTP_ASCII or FTP_BINARY.

ftp_size

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_size -- 파일의 크기를 반환한다.

Description

int ftp_size (int ftp_stream, string remote_file)

Returns the file size on success, or -1 on error.

ftp_size() returns the size of a file. If an error occurs, of if the file does not exist, -1 is returned. Not all servers support this feature.

ftp_mdtm

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_mdtm -- 파일이 마지막으로 수정된 시각을 반환한다.

Description

int ftp_mdtm (int ftp_stream, string remote_file)

Returns a UNIX timestamp on success, or -1 on error.

ftp_mdtm() checks the last-modified time for a file, and returns it as a UNIX timestamp. If an error occurs, or the file does not exist, -1 is returned. Note that not all servers support this feature.

ftp_rename

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_rename -- FTP 서버에 있는 파일의 이름을 바꾼다.

Description

int ftp_rename (int ftp_stream, string from, string to)

Returns true on success, false on error.

ftp_rename() renames the file specified by from to the new name to.

ftp_delete

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_delete -- FTP 서버에 있는 파일을 지운다.

Description

int ftp_delete (int ftp_stream, string path)

Returns true on success, false on error.

ftp_delete() deletes the file specified by path from the FTP server.

ftp_site

(PHP3 >= 3.0.15, PHP4 >= 4.0RC1)

ftp_site -- SITE 명령을 서버에 보낸다.

Description

int ftp_site (int ftp_stream, string cmd)

Returns true on success, false on error.

ftp_site() sends the command specified by cmd to the FTP server. SITE commands are not standardized, and vary from server to server. They are useful for handling such things as file permissions and group membership.

ftp_quit

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

ftp_quit -- FTP 연결을 닫는다.

Description

int ftp_quit (int ftp_stream)

ftp_connect() closes ftp_stream.


XXIII. GNU Gettext

Table of Contents
bindtextdomain … Sets the path for a domain
dcgettext … Overrides the domain for a single lookup
dgettext … Override the current domain
gettext … Lookup a message in the current domain
textdomain … Sets the default domain

bindtextdomain

(PHP3 >= 3.0.7, PHP4 )

bindtextdomain -- domain의 path를 설정한다.

Description

string bindtextdomain (string domain, string directory)

The bindtextdomain() function sets the path for a domain.

dcgettext

(PHP3 >= 3.0.7, PHP4 )

dcgettext -- Overrides the domain for a single lookup

Description

string dcgettext (string domain, string message, int category)

This function allows you to override the current domain for a single message lookup. It also allows you to specify a category.

dgettext

(PHP3 >= 3.0.7, PHP4 )

dgettext -- Override the current domain

Description

string dgettext (string domain, string message)

The dgettext() function allows you to override the current domain for a single message lookup.

gettext

(PHP3 >= 3.0.7, PHP4 )

gettext -- Lookup a message in the current domain

Description

string gettext (string message)

This function returns a translated string if one is found in the translation table, or the submitted message if not found. You may use an underscore character as an alias to this function.

Example 1. Gettext()-check

  1 
  2 <?php
  3 // Set language to German
  4 putenv ("LANG=de");
  5 
  6 // Specify location of translation tables
  7 bindtextdomain ("myPHPApp", "./locale");
  8 
  9 // Choose domain
 10 textdomain ("myPHPApp");
 11 
 12 // Print a test message
 13 print (gettext ("Welcome to My PHP Application"));
 14 ?>
 15      

textdomain

(PHP3 >= 3.0.7, PHP4 )

textdomain -- Sets the default domain

Description

int textdomain ([string library])

This function sets the domain to search within when calls are made to gettext(), usually the named after an application. The previous default domain is returned. Call it with no parameters to get the current setting without changing it.


XXIV. Hash functions

이 함수들은 mhash와 함께 동작하도록 만들어졌다.

이것은 mhash 라이브러리에 대한 인터페이스이다. mhash는 MD5나 SHA1, GOST와 여타의 광범위한 해쉬 알고리즘을 디원한다.

이것을 사용하고 싶으면 우선 mhash 홈페이지에서 mhash-x.x.x.tar.gz를 다운받고 포함된 설치설명서대로 설치한다. PHP에서 이 확장을 사용하려면 컴파일시에 --with-mhash 파라메터를 주고 컴파일하여야 한다.

mhash는 checksums이나 message digests 등의 것을 만드는데 사용될 수 있다.

Example 1. Compute the SHA1 key and print it out as hex

  1 
  2 <?php
  3 $input = "Let us meet at 9 o' clock at the secret place.";
  4 $hash = mhash(MHASH_SHA1, $input);
  5 
  6 print "The hash is ".bin2hex($hash)."\n";
  7 
  8 ?>
  9      

위의 예는 다음과 같은 결과를 출력한다.:

  1 
  2 The hash is d3b85d710d8f6e4e5efd4d5e67d041f9cecedafe
  3     

지원되는 hash 알고리즘에 대한 완벽한 리스트는 mhash안에 있는 문서를 참조하자. PHP에서 hash 방식을 지칭하는 일반적인 법칙은 "MHASH_해쉬이름"의 형태이다.

현재 mhash에세 지원하는 해쉬의 리스트는 다음과 같다. mhash에서 지원한다고 표시되어 있으나, 여기에 나와있지 않은 것은 이 매뉴얼 이후에 추가로 지원된 것이므로 안심하고 사용하여도 된다.

Table of Contents
mhash_get_hash_name … Get the name of the specified hash
mhash_get_block_size … Get the block size of the specified hash
mhash_count … Get the highest available hash id
mhash … Compute hash

mhash_get_hash_name

mhash_get_hash_name -- 지정된 hash의 이름을 구한다.

Description

string mhash_get_hash_name (int hash)

mhash_get_hash_name() is used to get the name of the specified hash.

mhash_get_hash_name() takes the hash id as an argument and returns the name of the hash or false, if the hash does not exist.

Example 1. mhash_get_hash_name example

  1 
  2 <?php
  3 $hash = MHASH_MD5;
  4 
  5 print mhash_get_hash_name($hash);
  6 ?>
  7       
The above example will print out:
  1 
  2 MD5
  3      

mhash_get_block_size

mhash_get_block_size -- 지정된 hash의 블록 크기를 구한다.

Description

int mhash_get_block_size(int hash);

mhash_get_block_size() is used to get the size of a block of the specified hash.

mhash_get_block_size() takes one argument, the hash and returns the size in bytes or false, if the hash does not exist.

mhash_count

mhash_count -- 가능한 가장 큰 hash id를 구한다.

Description

int mhash_count (void)

mhash_count() returns the highest available hash id. Hashes are numbered from 0 to this hash id.

Example 1. Traversing all hashes

  1 
  2 <?php
  3 
  4 $nr = mhash_count();
  5 
  6 for($i = 0; $i <= $nr; $i++) {
  7     echo sprintf("The blocksize of %s is %d\n", 
  8             mhash_get_hash_name($i),
  9             mhash_get_block_size($i));
 10 }
 11 ?>
 12       

mhash

mhash -- hash 값을 계산한다.

Description

string mhash(int hash, string data);

mhash() applies a hash function specified by hash to the data and returns the resulting hash (also called digest).


XXV. Functions related to HTTP

이 함수들은 HTTP protocol leve에서 데이타를 remote browser로 직접 전송할 수 있도록 해 준다.

Table of Contents
header … Send a raw HTTP header
setcookie … Send a cookie

header

header -- HTTP 헤더 데이타를 적어준 그대로 보낸다.

Description

int header(string string);

The Header() function is used at the top of an HTML file to send raw HTTP header strings. See the HTTP 1.1 Specification for more information on raw http headers. Note: Remember that the Header() function must be called before any actual output is sent either by normal HTML tags or from PHP. It is a very common error to read code with include() or with auto_prepend and have spaces or empty lines in this code that force output before header() is called.

There are two special-case header calls. The first is the "Location" header. Not only does it send this header back to the browser, it also returns a REDIRECT status code to Apache. From a script writer's point of view this should not be important, but for people who understand Apache internals it is important to understand.

  1 
  2 header ("Location: http://www.php.net"); /* Redirect browser 
  3                                             to PHP web site */
  4 exit;                 /* Make sure that code below does 
  5                          not get executed when we redirect. */
  6       

The second special-case is any header that starts with the string, "HTTP/" (case is not significant). For example, if you have your ErrorDocument 404 Apache directive pointed to a PHP script, it would be a good idea to make sure that your PHP script is actually generating a 404. The first thing you do in your script should then be:

  1 
  2 header ("http/1.0 404 Not Found");
  3       

PHP scripts often generate dynamic HTML that must not be cached by the client browser or any proxy caches between the server and the client browser. Many proxies and clients can be forced to disable caching with

  1 
  2 header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Date in the past
  3 header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
  4                                                       // always modified
  5 header ("Cache-Control: no-cache, must-revalidate");  // HTTP/1.1
  6 header ("Pragma: no-cache");                          // HTTP/1.0
  7       

setcookie

setcookie -- cookie를 설정하도록 데이타를 브라우저로 보낸다.

Description

int setcookie(string name, string value, int expire, string path, string domain, int secure);

setcookie() defines a cookie to be sent along with the rest of the header information. Cookies must be sent before any other headers are sent (this is a restriction of cookies, not PHP). This requires you to place calls to this function before any <html> or <head> tags.

All the arguments except the name argument are optional. If only the name argument is present, the cookie by that name will be deleted from the remote client. You may also replace any argument with an empty string ("") in order to skip that argument. The expire and secure arguments are integers and cannot be skipped with an empty string. Use a zero (0) instead. The expire argument is a regular Unix time integer as returned by the time() or mktime() functions. The secure indicates that the cookie should only be transmitted over a secure HTTPS connection.

Common Pitfalls:

Cookies will not become visible until the next loading of a page that the cookie should be visible for.

In PHP3, multiple calls to setcookie() in the same script will be performed in reverse order. If you are trying to delete one cookie before inserting another you should put the insert before the delete. In PHP4, multiple calls to setcookie() are performed in the order called.

Some examples follow:

Example 1. setcookie() examples

  1 
  2 setcookie ("TestCookie", "Test Value");
  3 setcookie ("TestCookie", $value,time()+3600);  /* expire in 1 hour */
  4 setcookie ("TestCookie", $value,time()+3600, "/~rasmus/", ".utoronto.ca", 1);
  5       

Note that the value portion of the cookie will automatically be urlencoded when you send the cookie, and when it is received, it is automatically decoded and assigned to a variable by the same name as the cookie name. To see the contents of our test cookie in a script, simply use one of the following examples:

  1 
  2 echo $TestCookie;
  3 echo $HTTP_COOKIE_VARS["TestCookie"];
  4       

You may also set array cookies by using array notation in the cookie name. This has the effect of setting as many cookies as you have array elements, but when the cookie is received by your script, the values are all placed in an array with the cookie's name:

  1 
  2 setcookie ("cookie[three]", "cookiethree");
  3 setcookie ("cookie[two]", "cookietwo");
  4 setcookie ("cookie[one]", "cookieone");
  5 if (isset ($cookie)) {
  6     while (list ($name, $value) = each ($cookie)) {
  7         echo "$name == $value<br>\n";
  8     }
  9 }
 10       

For more information on cookies, see Netscape's cookie specification at http://www.netscape.com/newsref/std/cookie_spec.html.

Microsoft Internet Explorer 4 with Service Pack 1 applied does not correctly deal with cookies that have their path parameter set.

Netscape Communicator 4.05 and Microsoft Internet Explorer 3.x appear to handle cookies incorrectly when the path and time are not set.


XXVI. Hyperwave functions

( 역자주 : 이부분은 번역이 무척 어려웠다. 잘못된 단어도 많았고, 의미가 명확하지 않은 부분도 많았다. 또한 역자가 사용해 보지 못한 기능이기 때문에 그 내용을 잘 알지 못하는 이유도 있다. 오역이 있을 수도 있으므로 가능하면 원문도 함께 보도록 한다.)

Introduction

Hyperwave는 Graz의 IICM에서 개발되었다. 이것은 처음에는 Hyper-G라는 이름으로 시작되었다가 상업화되면거 Hyperwave라는 이름으로 바뀌었다. (아마 기억에는 1996년인 것 같다.)

Hyperwave는 free software가 아니다. 현재 버전은 4.0이고 이 버전은 www.hyperwave.com에서 구할 수 있다. 30일간 사용해 볼 수 있는 시간 제약이 있는 버전을 받을 수 있을 것이다.

Hyperwave 는 데이터베이스와 비슷한 information 시스템(HIS, Hyperwave Information Server)이다. 이것의 초점은 문서를 보관하고 관리하는 것이다. 여기서 문서는 파일로 저장될 수 있는 모든 종류의 데이터를 의미한다. 각각의 문서는 그것의 object 레코드를 동반한다. 그 object 레코드에는 해당 문서에 대한 각종 meta data가 저장된다. 그 meta data는 사용자가 확장가능한 속성(attribute)들의 목록(list)으로 되어있다. 어떤 속성들은 Hyperwave 서버에 의해서 설정된다. 다른 속성들은 사용자가 수정해 줄 수 있다.

문서외에도 문서에 포함된 모든 hyper link까지도 object 레코드로 저장된다. 문서를 데이터베이스에 저장할 때 문서에 포함된 hyper link는 문서에서는 삭제되고 개개의 object로 저장된다. 해당 link의 object 레코드는 그 링크가 문서에서 차지하는 시작 위치와 끝나는 위치에 대한 정보를 저장하고 있게 된다. 원래의 문서를 얻기 위해서 여러분은 우선 링크가 없는 문서를 검색한 후에 링크를 리스트하고, 그것들을 끼워 넣는다. (hw_pipedocument()hw_gettext() 함수가 이를 위해 사용된다.) 문서에서 link를 분리하는 것의 장점은 명확하다. 우선 링크의 내용을 수정하는 것이 간단하다. 링크의 수정이 문서 전체에 영향을 미치지 않기 때문이다. 또한 문서를 수정하지 않고도 링크를 추가할 수도 있다.

hw_pipedocument()hw_gettext()를 사용하여 링크를 삽입하는 것은 보기보다 쉬운일이 아니다. 링크의 삽입은 문서의 명확한 계층 구조를 요구한다. 웹 서버에서 이것은 파일 시스템으로 설정한다. 그러나 Hyperwave는 해당 파일 시스템 계층 구조와는 관계없는 고유의 계층구조와 이름을 가지게 된다. 그러므로, 링크를 만들 때는 우선 Hyperwave 계층 구조와 namespace를 웹의 계층구조와 namespace로 맵핑하는 것부터 하여야 한다. Hyperwave와 웹 간의 가장 기본적인 차이는 이름의 명확한 구별성과 Hyperwave 계층구조에 있다. Hyperwave에서 이름은 object가 계층구조에서의 위치에 대한 정보는 전혀 가지고 있지 않다. 그러나 웹에서는 이름이 계층구조의 어디에 위치하는가에 대한 정보를 포함하고 있게 된다. 이로서 두가지 맵핑 방법이 가능하다. Hyperwave object의 Hyperwave 계층구조와 이름을 사용하여 URL에 반영하는 방법과 이름만을 사용하는 방법이다. 일반적으로 간단한 방법은 이름만을 사용하는 방법이다. Hyperwave 계층구조 안에 존재하는 'my_object'이라는 이름을 가진 Hyperwave object는 'http://host/my_object' 로 맵핑된다. Hyperwave 계층구조에서는 'parent/my_object' 라는 이름을 가진 object가 'my_object'의 밑에(child) 있을 수도 있다. 물론, 웹 namespace에서는 그것이 상반되는 것이며 사용자들에게 혼란을 가져다 준다. 적절한 obect 이름을 선택하는 것만이 이 혼란을 피할 수 있다.

이 결정을 내리게 되면 두분째 문제가 생긴다. 어떻게 PHP에 포함시킬 것인가? http://host/my_object의 URL로는 어떤 PHP스크립트도 호출하지 못한다. 이를 위해서는 여러분이 웹서버에 이주소를 'http://host/php3_script/my_object'같은 주소로 재설정하도록 알려주어야 하고, $PATH_INFO 변수와 Hyperwave server의 'my_object'라는 이름의 object를 검색하여 평가하는 'php3_script'라는 스크립트가 있어야 한다.

여기에는 쉽게 고칠 수 있는 결점이 하나 있다. 웹서버에서 언제나 다른 문서로의 접근이 가능한 URL을 재설정할 수 있는 것은 아니라는 것이다. Hyperwave 서버룰 검색하기 위한 PHP 스크립트는 아마 불가능할 것이다. 그러므로 여러분은 최소한 http://host/Hyperwave로 시작하는 것 같은 특정 URL은 제외시키는 두 번째 재설정 규칙을 설정할 필요가 있다. 이것이 웹의 namespace와 Hyperwave 서버를 공유하는 기본이 된다.

링크의 삽입은 위의 메카니즘하에서 이루어 진다. 만약 PHP가 module이나 CGI 스크립트가 아닌 독립 실행 프로그램이라면(예를들어 CD-ROM에 있는 Hyperwave 서버의 내용을 덤프해 본다던지 하는) 이 동작은 매우 복잡해진다. 이런 경우라면 Hyperwave 계층구조를 유지하고 이를 바탕으로 파일 시스템에 맵한다. 만약 Hyperwave 계층구조를 파일 시스템의 계층구조에 그대로 반영하고자 한다면 계층구조와 object 이름간에 모순이 생길 수 있다 ('/'이 포함된 이름의 경우). 따라서 '/'는 반드시 '_'같은 다른 글자로 대치되어야만 한다.

Hyperwave 서버와 통신하는 네트워크 프로토콜은 HG-CSP (Hyper-G Client/Server Protocol)이라고 불린다. 이것은 특정 동작(object 레코드를 일거오는 것 같은)을 시작하는 메세지에 기반한다. Hyperwave 서버의 초기 버전에는 서버와의 통신을 제공하기 위해 Harmony와 Amadeus라는 두 개의 고유한 클라이언트가 있었다. 그러나 이 두가지는 Hyperwave가 상용화되면서 사라지고, wavemaster 라는 것으로 대치되었다. wavemaster는 HTTP에서 HG-CSP로의 프로토콜 변환기(protocol converter) 같은 것이다. 이것은 데이터베이스의 관리와 문서의 표시 등 모든 것을 웹 환경에서 해결하려는 생각이다. wavemaster는 사용자가 인터페이스를 수정하는 특정 동작을 위한 일련의 placeholder들을 제공한다. 이 일련의 placeholder들을 PLACE 언어라고 부른다. PLACE는 진정한 프로그래밍 언어나 이를 위한 다른 extension에 비해서는 많은 면에서 부족하다. PLACE는 단지 placeholder 개수를 늘려주는 것 뿐이다. 따라서 Javascript의 사용이 필수적으로 요구된다.

PHP에 Hyperwave 지원을 추가함으로써, interface customisation부분에서 PHP의 프로그래밍 언어의 부족한 부분을 보충할 수 있다. 이것은 HG-CSP에 의해 정의된 모든 메시지를 구현하는 것이고, 나아가 완성된 문서를 검색하는 등의 더 강력한 명령들을 추가하였다.

Hyperwave는 정보의 특정한 단편들에 이름을 붙이기 위한 자신만의 작명법(terminology)을 가지고 있다. 이것은 광범위하게 확대되고 있다. 대부분의 함수들은 다음 데이터 타입 중에 하나에 작용한다.

object 레코드의 배열를 반환하는 몇몇 함수들을 해당 레코드들에 대한 통계적 정보를 가진 연합 배열도 함께 반환한다. 반환된 전체 object 레코드의 배열의 마지막 원소가 이 배열이다. 통계적 정보를 가진 배열에는 다음과 같은 요소들의 정보가 있다.

 
Hidden

PresentationHints 속성이 Hidden으로 설정된 object 레코드의 개수
(Number of object records with attribute PresentationHints set to Hidden.)

CollectionHead

PresentationHints 속성이 CollectionHead으로 설정된 object 레코드의 개수
(Number of object records with attribute PresentationHints set to CollectionHead.)

FullCollectionHead

PresentationHints 속성이 FullCollectionHead으로 설정된 object 레코드의 개수
(Number of object records with attribute PresentationHints set to FullCollectionHead.)

CollectionHeadNr

PresentationHints 속성이 CollectionHead으로 설정된 object 레코드 배열의 index
(Index in array of object records with attribute PresentationHints set to CollectionHead.)

FullCollectionHeadNr

PresentationHints 속성이 FullCollectionHead으로 설정된 object 레코드 배열의 index
(Index in array of object records with attribute PresentationHints set to FullCollectionHead.)

Total

object 레코드의 전체 개수
(Total number of object records.)

 


Apache와의 통합 (Integration with Apache)

Hyperwave 모듈은 PHP가 아파치 모듈로 컴파일되었을 때 가장 잘 사용될 수 있다. 이 경우에 아파치가 자신의 재작성(rewriting) 엔진을 사용하게 되면 Hyperwave 서버의 존재는 사용자가 거의 느낄 수 없게 된다. 다음의 내용들이 이것을 설명해 줄 것이다.

Hyperwave를 지원하는 아파치로 만들어진 PHP가 wavemaster기반의 독자적인 Hyperwave 솔루션을 대신하려 할 때부터, 아파치 서버가 Hyperwave 웹 인터페이스를 지원하는 유일한 서버가 되리라 당연히 추정되었다.

이것은 반드시 필요한 것은 아니지만 설정을 쉽게 해준다. 개념은 단순하다. 우선, 여러분은 PATH_INFO 변수를 평가하고 이 변수의 값을 Hyperwave object로 다룰 PHP 스크립트가 필요하다. 이제 이 스크립트의 이름을 'Hyperwave'라고 부르자. http://your.hostname/Hyperwave/name_of_object라는 URL은 아마도 'name_of_object'라는 이름을 가진 Hyperwave object를 반환할 것이다. 스크립트는 그 object의 타입에 따라서 적절히 반응한다. 만약 타입이 collection이라면 아마도 children의 리스트를 반환한다. 만약 타입이 문서(document)라면 mime 타입과 그 내용을 반환한다. 아파치 재작성 엔진 (apache rewriting engine)이 사용된다면 약간의 개선을 얻을 수 있다. http://your.hostname/name_of_object같은 형태로 URL을 사용하여 object를 반환한다면 사용자 입장에서 좀더 직관적일 수 있다. 이를 위한 재작성(rewriting) 규칙은 다음과 같이 매우 쉽다. :

  1 
  2 RewriteRule ^/(.*) /usr/local/apache/htdocs/HyperWave/$1 [L]
  3 

이제 모든 URL은 Hyperwave 서버의 object와 연결된다. 이것은 비교적 간단히 해결할 수 있는 한가지 문제를 만들어 낸다. 이로써 'Hyperwave' 스크립트 이외의 다른 스크립트(예를들어, 검색을 위한 스크립트 등)는 실행할 수 없게 된다. 이를 해결하기 위한 또다른 작성(rewriting) 규칙을 다음과 같이 작성해 준다.

  1 
  2 RewriteRule ^/hw/(.*) /usr/local/apache/htdocs/hw/$1 [L]
  3 

이것으로 추가적인 스크립트와 파일들을 위한 /usr/local/apache/htdocs/hw 디렉토리를 남겨두게 된다. 그리고 이 규칙을 위의 규칙보다 먼저 평가되도록 한다. 약간의 결점이 있는데, 'hw/'로 시작하는 이름을 가진 Hyperwave object는 접근할 수 없게 된다. 그러므로 여러분은 그런 이름은 쓰지 않도록 한다. 만약 여러분이 더 많은 디렉토리(예를들어, 이미지를 위한 디렉토리)가 필요하다면, 새로운 규칙을 첨가하거나 원하는 디렉토리들을 모두 한 디렉토리 밑에 놓으면 된다. 마지막으로, 다음과 같이하여 재작성 엔진(rewriting engine)을 켜도록 한다. :

  1 
  2 RewriteEngine on
  3 

내 경험으로 보았을 때 여러분을 다음의 스크립트들이 필요하게 될 것이다. :


Todo

아직 해야할 일은 다음과 같다. :


Table of Contents
hw_Array2Objrec … convert attributes from object array to object record
hw_Children … object ids of children
hw_ChildrenObj … object records of children
hw_Close … closes the Hyperwave connection
hw_Connect … opens a connection
hw_Cp … copies objects
hw_Deleteobject … deletes object
hw_DocByAnchor … object id object belonging to anchor
hw_DocByAnchorObj … object record object belonging to anchor
hw_DocumentAttributes … object record of hw_document
hw_DocumentBodyTag … body tag of hw_document
hw_DocumentContent … returns content of hw_document
hw_DocumentSetContent … sets/replaces content of hw_document
hw_DocumentSize … size of hw_document
hw_ErrorMsg … returns error message
hw_EditText … retrieve text document
hw_Error … error number
hw_Free_Document … frees hw_document
hw_GetParents … object ids of parents
hw_GetParentsObj … object records of parents
hw_GetChildColl … object ids of child collections
hw_GetChildCollObj … object records of child collections
hw_GetRemote … Gets a remote document
hw_GetRemoteChildren … Gets children of remote document
hw_GetSrcByDestObj … Returns anchors pointing at object
hw_GetObject … object record
hw_GetAndLock … return bject record and lock object
hw_GetText … retrieve text document
hw_GetObjectByQuery … search object
hw_GetObjectByQueryObj … search object
hw_GetObjectByQueryColl … search object in collection
hw_GetObjectByQueryCollObj … search object in collection
hw_GetChildDocColl … object ids of child documents of collection
hw_GetChildDocCollObj … object records of child documents of collection
hw_GetAnchors … object ids of anchors of document
hw_GetAnchorsObj … object records of anchors of document
hw_Mv … moves objects
hw_Identify … identifies as user
hw_InCollections … check if object ids in collections
hw_Info … info about connection
hw_InsColl … insert collection
hw_InsDoc … insert document
hw_InsertDocument … upload any document
hw_InsertObject … inserts an object record
hw_mapid … Maps global id on virtual local id
hw_Modifyobject … modifies object record
hw_New_Document … create new document
hw_Objrec2Array … convert attributes from object record to object array
hw_OutputDocument … prints hw_document
hw_pConnect … make a persistent database connection
hw_PipeDocument … retrieve any document
hw_Root … root object id
hw_Unlock … unlock object
hw_Who … List of currently logged in users
hw_Username … name of currently logged in user

hw_Array2Objrec

hw_Array2Objrec -- object array의 속성(attributes)을 object record로 변환한다.

Description

strin hw_array2objrec (array object_array)

Converts an object_array into an object record. Multiple attributes like 'Title' in different languages are treated properly.

See also hw_objrec2array().

hw_Children

hw_Children -- children의 object id들

Description

array hw_children(int connection, int objectID);

Returns an array of object ids. Each id belongs to a child of the collection with ID objectID. The array contains all children both documents and collections.

hw_ChildrenObj

hw_ChildrenObj -- children의 object record들

Description

array hw_childrenobj(int connection, int objectID);

Returns an array of object records. Each object record belongs to a child of the collection with ID objectID. The array contains all children both documents and collections.

hw_Close

hw_Close -- Hyperwave connection을 닫는다.

Description

int hw_close(int connection);

Returns false if connection is not a valid connection index, otherwise true. Closes down the connection to a Hyperwave server with the given connection index.

hw_Connect

hw_Connect -- Hyperwave connection을 연다.

Description

int hw_connect(string host, int port, string username, string password);

Opens a connection to a Hyperwave server and returns a connection index on success, or false if the connection could not be made. Each of the arguments should be a quoted string, except for the port number. The username and password arguments are optional and can be left out. In such a case no identification with the server will be done. It is similar to identify as user anonymous. This function returns a connection index that is needed by other Hyperwave functions. You can have multiple connections open at once. Keep in mind, that the password is not encrypted.

See also hw_pConnect().

hw_Cp

hw_Cp -- 지정한 object들을 복사한다.

Description

int hw_cp(int connection, array object_id_array, int destination id);

Copies the objects with object ids as specified in the second parameter to the collection with the id destination id.

The value return is the number of copied objects.

See also hw_mv().

hw_Deleteobject

hw_Deleteobject -- 특정 object를 삭제한다.

Description

int hw_deleteobject(int connection, int object_to_delete);

Deletes the the object with the given object id in the second parameter. It will delete all instances of the object.

Returns TRUE if no error occurs otherwise FALSE.

See also hw_mv().

hw_DocByAnchor

hw_DocByAnchor -- 지정된 anchor에 속하는 object의 object id

Description

int hw_docbyanchor(int connection, int anchorID);

Returns an th object id of the document to which anchorID belongs.

hw_DocByAnchorObj

hw_DocByAnchorObj -- 지정된 anchor에 속하는 object의 object record

Description

string hw_docbyanchorobj(int connection, int anchorID);

Returns an th object record of the document to which anchorID belongs.

hw_DocumentAttributes

hw_DocumentAttributes -- hw_document의 object record

Description

string hw_documentattributes(int hw_document);

Returns the object record of the document.

See also hw_DocumentBodyTag(), hw_DocumentSize().

hw_DocumentBodyTag

hw_DocumentBodyTag -- hw_document의 body tag을 반환한다.

Description

string hw_documentbodytag(int hw_document);

Returns the BODY tag of the document. If the document is an HTML document the BODY tag should be printed before the document.

See also hw_DocumentAttributes(), hw_DocumentSize().

hw_DocumentContent

hw_DocumentContent -- hw_document의 내용을 반환한다.

Description

string hw_documentcontent(int hw_document);

Returns the content of the document. If the document is an HTML document the content is everything after the BODY tag. Information from the HEAD and BODY tag is in the stored in the object record.

See also hw_DocumentAttributes(), hw_DocumentSize(), hw_DocumentSetContent().

hw_DocumentSetContent

hw_DocumentSetContent -- hw_document의 내용을 설정하거나 재지정한다.

Description

string hw_documentsetcontent(int hw_document, string content);

Sets or replaces the content of the document. If the document is an HTML document the content is everything after the BODY tag. Information from the HEAD and BODY tag is in the stored in the object record. If you provide this information in the content of the document too, the Hyperwave server will change the object record accordingly when the document is inserted. Probably not a very good idea. If this functions fails the document will retain its old content.

See also hw_DocumentAttributes(), hw_DocumentSize(), hw_DocumentContent().

hw_DocumentSize

hw_DocumentSize -- hw_document의 크기

Description

int hw_documentsize(int hw_document);

Returns the size in bytes of the document.

See also hw_DocumentBodyTag(), hw_DocumentAttributes().

hw_ErrorMsg

hw_ErrorMsg -- error message를 반환한다.

Description

string hw_errormsg(int connection);

Returns a string containing the last error message or 'No Error'. If false is returned, this function failed. The message relates to the last command.

hw_EditText

hw_EditText -- text 문서를 원래대로 복구(retrieve)한다.

Description

int hw_edittext(int connection, int hw_document);

Uploads the text document to the server. The object record of the document may not be modified while the document is edited. This function will only works for pure text documents. It will not open a special data connection and therefore blocks the control connection during the transfer.

See also hw_PipeDocument(), hw_FreeDocument(), hw_DocumentBodyTag(), hw_DocumentSize(), hw_OutputDocument(), hw_GetText().

hw_Error

hw_Error -- error 번호를 반환한다.

Description

int hw_error(int connection);

Returns the last error number. If the return value is 0 no error has occurred. The error relates to the last command.

hw_Free_Document

hw_Free_Document -- hw_document가 점유하고 있는 자원들을 풀어준다.

Description

int hw_free_document(int hw_document);

Frees the memory occupied by the Hyperwave document.

hw_GetParents

hw_GetParents -- parent들의 object id들

Description

array hw_getparentsobj(int connection, int objectID);

Returns an indexed array of object ids. Each object id belongs to a parent of the object with ID objectID.

hw_GetParentsObj

hw_GetParentsObj -- parent들의 object record들

Description

array hw_getparentsobj(int connection, int objectID);

Returns an indexed array of object records plus an associated array with statistical information about the object records. The associated array is the last entry of the returned array. Each object record belongs to a parent of the object with ID objectID.

hw_GetChildColl

hw_GetChildColl -- child collection들의 object id들

Description

array hw_getchildcoll(int connection, int objectID);

Returns an array of object ids. Each object ID belongs to a child collection of the collection with ID objectID. The function will not return child documents.

See also hw_GetChildren(), hw_GetChildDocColl().

hw_GetChildCollObj

hw_GetChildCollObj -- child collection들의 object record들

Description

array hw_getchildcollobj(int connection, int objectID);

Returns an array of object records. Each object records belongs to a child collection of the collection with ID objectID. The function will not return child documents.

See also hw_ChildrenObj(), hw_GetChildDocCollObj().

hw_GetRemote

hw_GetRemote -- remote document를 구한다.

Description

int hw_getremote(int connection, int objectID);

Returns a remote document. Remote documents in Hyperwave notation are documents retrieved from an external source. Common remote documents are for example external web pages or queries in a database. In order to be able to access external sources throught remote documents Hyperwave introduces the HGI (Hyperwave Gateway Interface) which is similar to the CGI. Currently, only ftp, http-servers and some databases can be accessed by the HGI. Calling hw_GetRemote() returns the document from the external source. If you want to use this function you should be very familiar with HGIs. You should also consider to use PHP instead of Hyperwave to access external sources. Adding database support by a Hyperwave gateway should be more difficult than doing it in PHP.

See also hw_GetRemoteChildren().

hw_GetRemoteChildren

hw_GetRemoteChildren -- remote document의 children을 구한다.

Description

int hw_getremotechildren(int connection, string object record);

Returns the children of a remote document. Children of a remote document are remote documents itself. This makes sense if a database query has to be narrowed and is explained in Hyperwave Programmers' Guide. If the number of children is 1 the function will return the document itself formated by the Hyperwave Gateway Interface (HGI). If the number of children is greater than 1 it will return an array of object record with each maybe the input value for another call to hw_GetRemoteChildren(). Those object records are virtual and do not exist in the Hyperwave server, therefore they do not have a valid object ID. How exactely such an object record looks like is up to the HGI. If you want to use this function you should be very familiar with HGIs. You should also consider to use PHP instead of Hyperwave to access external sources. Adding database support by a Hyperwave gateway should be more difficult than doing it in PHP.

See also hw_GetRemote().

hw_GetSrcByDestObj

hw_GetSrcByDestObj -- 지정된 object를 지시하는 anchor들을 반환한다.

Description

array hw_getsrcbydestobj(int connection, int objectID);

Returns the object records of all anchors pointing to the object with ID objectID. The object can either be a document or an anchor of type destination.

See also hw_GetAnchors().

hw_GetObject

hw_GetObject -- 지정한 object record를 반환한다.

Description

array hw_getobject(int connection, [int|array] objectID, string query);

Returns the object record for the object with ID objectID if the second parameter is an integer. If the second parameter is an array of integer the function will return an array of object records. In such a case the last parameter is also evaluated which is a query string.

The query string has the following syntax:

<expr> ::= "(" <expr> ")" |

"!" <expr> | /* NOT */

<expr> "||" <expr> | /* OR */

<expr> "&&" <expr> | /* AND */

<attribute> <operator> <value>

<attribute> ::= /* any attribute name (Title, Author, DocumentType ...) */

<operator> ::= "=" | /* equal */

"<" | /* less than (string compare) */

">" | /* greater than (string compare) */

"~" /* regular expression matching */

The query allows to further select certain objects from the list of given objects. Unlike the other query functions, this query may use not indexed attributes. How many object records are returned depends on the query and if access to the object is allowed.

See also hw_GetAndLock(), hw_GetObjectByQuery().

hw_GetAndLock

hw_GetAndLock -- object record를 반환하고 해당 object를 lock한다.

Description

string hw_getandlock(int connection, int objectID);

Returns the object record for the object with ID objectID. It will also lock the object, so other users cannot access it until it is unlocked.

See also hw_Unlock(), hw_GetObject().

hw_GetText

hw_GetText -- text 문서를 원래대로 복구(retrieve)한다.

Description

int hw_gettext(int connection, int objectID, mixed [rootID/prefix] );

Returns the document with object ID objectID. If the document has anchors which can be inserted, they will be inserted already. The optional parameter rootID/prefix can be a string or an integer. If it is an integer it determines how links are inserted into the document. The default is 0 and will result in links that are constructed from the name of the link's destination object. This is useful for web applications. If a link points to an object with name 'internet_movie' the HTML link will be <A HREF="/internet_movie">. The actual location of the source and destination object in the document hierachy is disregarded. You will have to set up your web browser, to rewrite that URL to for example '/my_script.php3/internet_movie'. 'my_script.php3' will have to evaluate $PATH_INFO and retrieve the document. All links will have the prefix '/my_script.php3/'. If you do not want this you can set the optional parameter rootID/prefix to any prefix which is used instead. Is this case it has to be a string.

If rootID/prefix is an integer and unequal to 0 the link is constructed from all the names starting at the object with the id rootID/prefix separated by a slash relative to the current object. If for example the above document 'internet_movie' is located at 'a-b-c-internet_movie' with '-' being the seperator between hierachy levels on the Hyperwave server and the source document is located at 'a-b-d-source' the resulting HTML link would be: <A HREF="../c/internet_movie">. This is useful if you want to download the whole server content onto disk and map the document hierachy onto the file system.

This function will only work for pure text documents. It will not open a special data connection and therefore blocks the control connection during the transfer.

See also hw_PipeDocument(), hw_FreeDocument(), hw_DocumentBodyTag(), hw_DocumentSize(), hw_OutputDocument().

hw_GetObjectByQuery

hw_GetObjectByQuery -- object를 찾는다.

Description

array hw_getobjectbyquery(int connection, string query, int max_hits);

Searches for objects on the whole server and returns an array of object ids. The maximum number of matches is limited to max_hits. If max_hits is set to -1 the maximum number of matches is unlimited.

The query will only work with indexed attributes.

See also hw_GetObjectByQueryObj().

hw_GetObjectByQueryObj

hw_GetObjectByQueryObj -- object를 찾는다.

Description

array hw_getobjectbyqueryobj(int connection, string query, int max_hits);

Searches for objects on the whole server and returns an array of object records. The maximum number of matches is limited to max_hits. If max_hits is set to -1 the maximum number of matches is unlimited.

The query will only work with indexed attributes.

See also hw_GetObjectByQuery().

hw_GetObjectByQueryColl

hw_GetObjectByQueryColl -- collection 안에서 object을 찾는다.

Description

array hw_getobjectbyquerycoll(int connection, int objectID, string query, int max_hits);

Searches for objects in collection with ID objectID and returns an array of object ids. The maximum number of matches is limited to max_hits. If max_hits is set to -1 the maximum number of matches is unlimited.

The query will only work with indexed attributes.

See also hw_GetObjectByQueryCollObj().

hw_GetObjectByQueryCollObj

hw_GetObjectByQueryCollObj -- collection 안에서 object을 찾는다.

Description

array hw_getobjectbyquerycollobj(int connection, int objectID, string query, int max_hits);

Searches for objects in collection with ID objectID and returns an array of object records. The maximum number of matches is limited to max_hits. If max_hits is set to -1 the maximum number of matches is unlimited.

The query will only work with indexed attributes.

See also hw_GetObjectByQueryColl().

hw_GetChildDocColl

hw_GetChildDocColl -- collection 안의 child 문서들의 object id를 구한다.

Description

array hw_getchilddoccoll(int connection, int objectID);

Returns array of object ids for child documents of a collection.

See also hw_GetChildren(), hw_GetChildColl().

hw_GetChildDocCollObj

hw_GetChildDocCollObj -- collection 안의 child 문서들의 object record를 구한다.

Description

array hw_getchilddoccollobj(int connection, int objectID);

Returns an array of object records for child documents of a collection.

See also hw_ChildrenObj(), hw_GetChildCollObj().

hw_GetAnchors

hw_GetAnchors -- 문서의 anchor들의 object id

Description

array hw_getanchors(int connection, int objectID);

Returns an array of object ids with anchors of the document with object ID objectID.

hw_GetAnchorsObj

hw_GetAnchorsObj -- 문서의 anchor들의 object record

Description

array hw_getanchorsobj(int connection, int objectID);

Returns an array of object records with anchors of the document with object ID objectID.

hw_Mv

hw_Mv -- object들을 옮긴다.

Description

int hw_mv(int connection, array object id array, int source id, int destination id);

Moves the objects with object ids as specified in the second parameter from the collection with id source id to the collection with the id destination id. If the destination id is 0 the objects will be unlinked from the source collection. If this is the last instance of that object it will be deleted. If you want to delete all instances at once, use hw_deleteobject().

The value return is the number of moved objects.

See also hw_cp(), hw_deleteobject().

hw_Identify

hw_Identify -- 사용자를 identify한다.

Description

int hw_identify(string username, string password);

Identifies as user with username and password. Identification is only valid for the current session. I do not thing this function will be needed very often. In most cases it will be easier to identify with the opening of the connection.

See also hw_Connect().

hw_InCollections

hw_InCollections -- object id의 object가 collection에 속하는가 검사한다.

Description

array hw_incollections(int connection, array object_id_array, array collection_id array, int return_collections);

Checks whether a set of objects (documents or collections) specified by the object_id_array is part of the collections listed in collection_id_array. When the fourth parameter return_collections is 0, the subset of object ids that is part of the collections (i.e., the documents or collections that are children of one or more collections of collection ids or their subcollections, recursively) is returned as an array. When the fourth parameter is 1, however, the set of collections that have one or more objects of this subset as children are returned as an array. This option allows a client to, e.g., highlight the part of the collection hierarchy that contains the matches of a previous query, in a graphical overview.

hw_Info

hw_Info -- connection에 대한 정보

Description

string hw_info(int connection);

Returns information about the current connection. The returned string has the following format: <Serverstring>, <Host>, <Port>, <Username>, <Port of Client>, <Byte swapping>

hw_InsColl

hw_InsColl -- collection을 삽입한다.

Description

int hw_inscoll(int connection, int objectID, array object_array);

Inserts a new collection with attributes as in object_array into collection with object ID objectID.

hw_InsDoc

hw_InsDoc -- document를 삽입한다.

Description

int hw_insdoc(int connection, int parentID, string object_record, string text);

Inserts a new document with attributes as in object_record into collection with object ID parentID. This function inserts either an object record only or an object record and a pure ascii text in text if text is given. If you want to insert a general document of any kind use hw_insertdocument() instead.

See also hw_InsertDocument(), hw_InsColl().

hw_InsertDocument

hw_InsertDocument -- 어떤 document를 collection으로 upload 한다.

Description

int hw_insertdocument(int connection, int parent_id, int hw_document);

Uploads a document into the collection with parent_id. The document has to be created before with hw_NewDocument(). Make sure that the object record of the new document contains at least the attributes: Type, DocumentType, Title and Name. Possibly you also want to set the MimeType. The functions returns the object id of the new document or false.

See also hw_PipeDocument().

hw_InsertObject

hw_InsertObject -- object record를 추가한다.

Description

int hw_insertobject(int connection, string object rec, string parameter);

Inserts an object into the server. The object can be any valid hyperwave object. See the HG-CSP documentation for a detailed information on how the parameters have to be.

Note: If you want to insert an Anchor, the attribute Position has always been set either to a start/end value or to 'invisible'. Invisible positions are needed if the annotation has no correspondig link in the annotation text.

See also hw_PipeDocument(), hw_InsertDocument(), hw_InsDoc(), hw_InsColl().

hw_mapid

(PHP3 >= 3.0.13, PHP4 >= 4.0b4)

hw_mapid -- global id 를 가상의 local id로 맵핑시킨다.

Description

int hw_mapid (int connection, int server id, int object id)

Maps a global object id on any hyperwave server, even those you did not connect to with hw_connect(), onto a virtual object id. This virtual object id can then be used as any other object id, e.g. to obtain the object record with hw_getobject(). The server id is the first part of the global object id (GOid) of the object which is actually the IP number as an integer.

Note: In order to use this function you will have to set the F_DISTRIBUTED flag, which can currently only be set at compile time in hg_comm.c. It is not set by default. Read the comment at the beginning of hg_comm.c

hw_Modifyobject

hw_Modifyobject -- object 레코드를 수정한다.

Description

int hw_modifyobject(int connection, int object_to_change, array remove, array add, int mode);

This command allows to remove, add, or modify individual attributes of an object record. The object is specified by the Object ID object_to_change. The first array remove is a list of attributes to remove. The second array add is a list of attributes to add. In order to modify an attribute one will have to remove the old one and add a new one. hw_modifyobject() will always remove the attributes before it adds attributes unless the value of the attribute to remove is not a string or array.

The last parameter determines if the modification is performed recursively. 1 means recurive modification. If some of the objects cannot be modified they will be skiped without notice. hw_error() may not indicate an error though some of the objects could not be modified.

The keys of both arrays are the attributes name. The value of each array element can either be an array, a string or anything else. If it is an array each attribute value is constructed by the key of each element plus a colon and the value of each element. If it is a string it is taken as the attribute value. An empty string will result in a complete removal of that attribute. If the value is neither a string nor an array but something else, e.g. an integer, no operation at all will be performed on the attribute. This is neccessary if you want to to add a completely new attribute not just a new value for an existing attribute. If the remove array contained an empty string for that attribute, the attribute would be tried to be removed which would fail since it doesn't exist. The following addition of a new value for that attribute would also fail. Setting the value for that attribute to e.g. 0 would not even try to remove it and the addition will work.

If you would like to change the attribute 'Name' with the current value 'books' into 'articles' you will have to create two arrays and call hw_modifyobject().

Example 1. modifying an attribute

  1 
  2        // $connect is an existing connection to the Hyperwave server
  3        // $objid is the ID of the object to modify
  4        $remarr = array("Name" => "books");
  5        $addarr = array("Name" => "articles");
  6        $hw_modifyobject($connect, $objid, $remarr, $addarr);
  7       
In order to delete/add a name=value pair from/to the object record just pass the remove/add array and set the last/third parameter to an empty array. If the attribute is the first one with that name to add, set attribute value in the remove array to an integer.

Example 2. adding a completely new attribute

  1 
  2        // $connect is an existing connection to the Hyperwave server
  3        // $objid is the ID of the object to modify
  4        $remarr = array("Name" => 0);
  5        $addarr = array("Name" => "articles");
  6        $hw_modifyobject($connect, $objid, $remarr, $addarr);
  7       

Note: Multilingual attributes, e.g. 'Title', can be modified in two ways. Either by providing the attributes value in its native form 'language':'title' or by providing an array with elements for each language as described above. The above example would than be:

Example 3. modifying Title attribute

  1 
  2        $remarr = array("Title" => "en:Books");
  3        $addarr = array("Title" => "en:Articles");
  4        $hw_modifyobject($connect, $objid, $remarr, $addarr);
  5       
or

Example 4. modifying Title attribute

  1 
  2        $remarr = array("Title" => array("en" => "Books"));
  3        $addarr = array("Title" => array("en" => "Articles", "ge"=>"Artikel"));
  4        $hw_modifyobject($connect, $objid, $remarr, $addarr);
  5       
This removes the english title 'Books' and adds the english title 'Articles' and the german title 'Artikel'.

Example 5. removing attribute

  1 
  2        $remarr = array("Title" => "");
  3        $addarr = array("Title" => "en:Articles");
  4        $hw_modifyobject($connect, $objid, $remarr, $addarr);
  5       

Note: This will remove all attributes with the name 'Title' and adds a new 'Title' attribute. This comes in handy if you want to remove attributes recursively.

Note: If you need to delete all attributes with a certain name you will have to pass an empty string as the attribute value.

Note: Only the attributes 'Title', 'Description' and 'Keyword' will properly handle the language prefix. If those attributes don't carry a language prefix, the prefix 'xx' will be assigned.

Note: The 'Name' attribute is somewhat special. In some cases it cannot be complete removed. You will get an error message 'Change of base attribute' (not clear when this happens). Therefore you will always have to add a new Name first and than remove the old one.

Note: You may not suround this function by calls to hw_getandlock() and hw_unlock(). hw_modifyobject() does this internally.

Returns TRUE if no error occurs otherwise FALSE.

hw_New_Document

hw_New_Document -- 새 document를 만든다.

Description

int hw_new_document(string object_record, string document_data, int document_size);

Returns a new Hyperwave document with document data set to document_data and object record set to object_record. The length of the document_data has to passed in document_sizeThis function does not insert the document into the Hyperwave server.

See also hw_FreeDocument(), hw_DocumentSize(), hw_DocumentBodyTag(), hw_OutputDocument(), hw_InsertDocument().

hw_Objrec2Array

hw_Objrec2Array -- object record의 속성(attributes)을 object array로 변환한다.

Description

array hw_objrec2array(string object_record);

Converts an object_record into an object array. The keys of the resulting array are the attributes names. Multiple attributes like 'Title' in different languages form its own array. The keys of this array are the left part to the colon of the attribute value. Currently only the attributes 'Title', 'Description' and 'Keyword' are treated properly.

See also hw_Array2Objrec().

hw_OutputDocument

hw_OutputDocument -- hw_document를 print한다.

Description

int hw_outputdocument(int hw_document);

Prints the document without the BODY tag.

hw_pConnect

hw_pConnect -- 영구적인(persistent) database connection을 만든다.

Description

int hw_pconnect(string host, int port, string username, string password);

Returns a connection index on success, or false if the connection could not be made. Opens a persistent connection to a Hyperwave server. Each of the arguments should be a quoted string, except for the port number. The username and password arguments are optional and can be left out. In such a case no identification with the server will be done. It is similar to identify as user anonymous. This function returns a connection index that is needed by other Hyperwave functions. You can have multiple persistent connections open at once.

See also hw_Connect().

hw_PipeDocument

hw_PipeDocument -- document를 원래대로 복구(retrieve)한다.

Description

int hw_pipedocument(int connection, int objectID);

Returns the Hyperwave document with object ID objectID. If the document has anchors which can be inserted, they will have been inserted already. The document will be transfered via a special data connection which does not block the control connection.

See also hw_GetText() for more on link insertion, hw_FreeDocument(), hw_DocumentSize(), hw_DocumentBodyTag(), hw_OutputDocument().

hw_Root

hw_Root -- root object의 object id

Description

int hw_root();

Returns the object ID of the hyperroot collection. Currently this is always 0. The child collection of the hyperroot is the root collection of the connected server.

hw_Unlock

hw_Unlock -- object를 unlock 한다.

Description

int hw_unlock(int connection, int objectID);

Unlocks a document, so other users regain access.

See also hw_GetAndLock().

hw_Who

hw_Who -- 현재 login 되어 있는 사용자들을 list한다.

Description

int hw_who(int connection);

Returns an array of users currently logged into the Hyperwave server. Each entry in this array is an array itself containing the elements id, name, system, onSinceDate, onSinceTime, TotalTime and self. 'self' is 1 if this entry belongs to the user who initianted the request.

hw_Username

hw_Username -- 현재 log in 하고 있는 user의 이름

Description

string hw_getusername(int connection);

Returns the username of the connection.


XXVII. Image functions

여러분은 여기의 함수들로 JPEG, GIF, PNG 이미지의 크기를 알아볼 수 있다. 또한 여러분이 GD library(http://www.boutell.com/gd/에 있다.)를 가지고 있다면, 여러분은 GIF 이미지를 만들거나 수정할 수 있다.

Table of Contents
GetImageSize … get the size of a GIF, JPG or PNG image
ImageArc … draw a partial ellipse
ImageChar … draw a character horizontally
ImageCharUp … draw a character vertically
ImageColorAllocate … allocate a color for an image
ImageColorDeAllocate … De-allocate a color for an image
ImageColorAt … get the index of the color of a pixel
ImageColorClosest … get the index of the closest color to the specified color
ImageColorExact … get the index of the specified color
ImageColorResolve … get the index of the specified color or its closest possible alternative
ImageGammaCorrect … Apply a gamma correction to a GD image
ImageColorSet … set the color for the specified palette index
ImageColorsForIndex … get the colors for an index
ImageColorsTotal … find out the number of colors in an image's palette
ImageColorTransparent … define a color as transparent
ImageCopy … copy part of an image
ImageCopyResized … copy and resize part of an image
ImageCreate … create a new image
ImageCreateFromGif … create a new image from file or URL
ImageCreateFromJPEG … Create a new image from file or URL
ImageCreateFromPNG … Create a new image from file or URL
ImageDashedLine … draw a dashed line
ImageDestroy … destroy an image
ImageFill … flood fill
ImageFilledPolygon … draw a filled polygon
ImageFilledRectangle … draw a filled rectangle
ImageFillToBorder … flood fill to specific color
ImageFontHeight … get font height
ImageFontWidth … get font width
ImageGif … output image to browser or file
ImagePng … Output a PNG image to either the browser or a file
ImageJPEG … Output image to browser or file
ImageInterlace … enable or disable interlace
ImageLine … draw a line
ImageLoadFont … load a new font
ImagePolygon … draw a polygon
ImagePSBBox … give the bounding box of a text rectangle using PostScript Type1 fonts
ImagePSEncodeFont … change the character encoding vector of a font
ImagePSFreeFont … free memory used by a PostScript Type 1 font
ImagePSLoadFont … load a PostScript Type 1 from file
ImagePsExtendFont … Extend or condense a font
ImagePsSlantFont … Slant a font
ImagePSText … to draw a text string over an image using PostScript Type1 fonts
ImageRectangle … draw a rectangle
ImageSetPixel … set a single pixel
ImageString … draw a string horizontally
ImageStringUp … draw a string vertically
ImageSX … get image width
ImageSY … get image height
ImageTTFBBox … give the bounding box of a text using TypeType fonts
ImageTTFText … write text to the image using a TrueType fonts

GetImageSize

GetImageSize -- GIF나 JPG, PNG 그림의 크기를 구한다.

Description

array getimagesize (string filename [, array imageinfo])

The GetImageSize() function will determine the size of any GIF, JPG or PNG image file and return the dimensions along with the file type and a height/width text string to be used inside a normal HTML IMG tag.

Returns an array with 4 elements. Index 0 contains the width of the image in pixels. Index 1 contains the height. Index 2 a flag indicating the type of the image. 1 = GIF, 2 = JPG, 3 = PNG. Index 3 is a text string with the correct "height=xxx width=xxx" string that can be used directly in an IMG tag.

Example 1. GetImageSize

  1 
  2 <?php $size = GetImageSize ("img/flag.jpg"); ?>
  3 <IMG SRC="img/flag.jpg" <?php echo $size[3]; ?>
  4       

The optional imageinfo parameter allows you to extract some extended information from the image file. Currently this will return the diffrent JPG APP markers in an associative Array. Some Programs use these APP markers to embedd text information in images. A very common one in to embed IPTC http://www.xe.net/iptc/ information in the APP13 marker. You can use the iptcparse() function to parse the binary APP13 marker into something readable.

Example 2. GetImageSize returning IPTC

  1 
  2 <?php 
  3     $size = GetImageSize ("testimg.jpg",&$info);
  4     if (isset ($info["APP13"])) {
  5         $iptc = iptcparse ($info["APP13"]);
  6         var_dump ($iptc);
  7     }
  8 ?>
  9       

ImageArc

ImageArc -- 타원 호를 그 린 다.

Description

int imagearc (int im, int cx, int cy, int w, int h, int s, int e, int col)

ImageArc() draws a partial ellipse centered at cx, cy (top left is 0, 0) in the image represented by im. W and h specifies the ellipse's width and height respectively while the start and end points are specified in degrees indicated by the s and e. arguments.

ImageChar

ImageChar -- 한 글자를 수평으로 그린다.

Description

int imagechar (int im, int font, int x, int y, string c, int col)

ImageChar() draws the first character of c in the image identified by id with its upper-left at x,y (top left is 0, 0) with the color col. If font is 1, 2, 3, 4 or 5, a built-in font is used (with higher numbers corresponding to larger fonts).

See also imageloadfont().

ImageCharUp

ImageCharUp -- 한 글자를 수직으로 그린다.

Description

int imagecharup (int im, int font, int x, int y, string c, int col)

ImageCharUp() draws the character c vertically in the image identified by im at coordinates x, y (top left is 0, 0) with the color col. If font is 1, 2, 3, 4 or 5, a built-in font is used.

See also imageloadfont().

ImageColorAllocate

ImageColorAllocate -- 그림을 위한 색깔을 할당한다.

Description

int imagecolorallocate (int im, int red, int green, int blue)

ImageColorAllocate() returns a color identifier representing the color composed of the given RGB components. The im argument is the return from the imagecreate() function. ImageColorAllocate() must be called to create each color that is to be used in the image represented by im.

  1 
  2 $white = ImageColorAllocate ($im, 255, 255, 255);
  3 $black = ImageColorAllocate ($im, 0, 0, 0);
  4       

ImageColorDeAllocate

ImageColorDeAllocate -- 그림을 위한 할당했던 색을 해제한다.

Description

int imagecolordeallocate (int im, int index)

The ImageColorDeAllocate() function de-allocates a color previously allocated with the ImageColorAllocate() function.

  1 
  2 $white = ImageColorAllocate($im, 255, 255, 255);
  3 ImageColorDeAllocate($im, $white);
  4           

ImageColorAt

ImageColorAt -- 해당 pixel 색깔의 index를 구한다.

Description

int imagecolorat (int im, int x, int y)

Returns the index of the color of the pixel at the specified location in the image.

See also imagecolorset() and imagecolorsforindex().

ImageColorClosest

ImageColorClosest -- 지정된 색과 가장 가까운 색의 index를 구한다.

Description

int imagecolorclosest (int im, int red, int green, int blue);

Returns the index of the color in the palette of the image which is "closest" to the specified RGB value.

The "distance" between the desired color and each color in the palette is calculated as if the RGB values represented points in three-dimensional space.

See also imagecolorexact().

ImageColorExact

ImageColorExact -- 지정된 색의 index를 구한다.

Description

iint imagecolorexact (int im, int red, int green, int blue);

Returns the index of the specified color in the palette of the image.

If the color does not exist in the image's palette, -1 is returned.

See also imagecolorclosest().

ImageColorResolve

ImageColorResolve -- 특정색이나 그에 가장 가까운 색의 index를 구한다.

Description

int imagecolorresolve (int im, int red, int green, int blue);

This function is guaranteed to return a color index for a requested color, either the exact color or the closest possible alternative.

See also imagecolorclosest().

ImageGammaCorrect

ImageGammaCorrect -- GD 이미지에 감마값 보정을 적용시킨다.

Description

int imagegammacorrect (int im, double inputgamma, double outputgamma)

The ImageGammaCorrect() function applies gamma correction to a gd image stream (im) given an input gamma, the parameter inputgamma and an output gamma, the parameter outputgamma.

ImageColorSet

ImageColorSet -- 지정한 색을 특정 palette index로 정한다.

Description

bool imagecolorset (int im, int index, int red, int green, int blue);

This sets the specified index in the palette to the specified color. This is useful for creating flood-fill-like effects in paletted images without the overhead of performing the actual flood-fill.

See also imagecolorat().

ImageColorsForIndex

ImageColorsForIndex -- 지정한 index의 색을 구한다.

Description

array imagecolorsforindex (int im, int index);

This returns an associative array with red, green, and blue keys that contain the appropriate values for the specified color index.

See also imagecolorat() and imagecolorexact().

ImageColorsTotal

ImageColorsTotal -- 그림의 palette에 있는 색의 개수를 구한다.

Description

int imagecolorstotal (int im);

This returns the number of colors in the specified image's palette.

See also imagecolorat() and imagecolorsforindex().

ImageColorTransparent

ImageColorTransparent -- 투명한 색깔을 지정한다.

Description

int imagecolortransparent (int im [, int col])

ImageColorTransparent() sets the transparent color in the im image to col. Im is the image identifier returned by ImageCreate() and col is a color identifier returned by ImageColorAllocate().

The identifier of the new (or current, if none is specified) transparent color is returned

ImageCopy

ImageCopy --  그림의 일부분을 복사한다.

Description

int ImageCopy (int dst_im, int src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)

Copy a part of src_im onto dst_im starting at the x,y coordinates src_x, src_y with a width of src_w and a height of src_h. The portion defined will be copied onto the x,y coordinates, dst_x and dst_y.

ImageCopyResized

ImageCopyResized -- 그림의 일부분을 복사하고 크기를 바꾼다.

Description

int imagecopyresized (int dst_im, int src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH);

ImageCopyResized() copies a rectangular portion of one image to another image. Dst_im is the destination image, src_im is the source image identifier. If the source and destination coordinates and width and heights differ, appropriate stretching or shrinking of the image fragment will be performed. The coordinates refer to the upper left corner. This function can be used to copy regions within the same image (if dst_im is the same as src_im) but if the regions overlap the results will be unpredictable.

ImageCreate

ImageCreate -- 새 image를 만든다.

Description

int imagecreate (int x_size, int y_size);

ImageCreate returns an image identifier representing a blank image of size x_size by y_size.

ImageCreateFromGif

ImageCreateFromGif -- GIF 형태의 파일이나 URL로부터 새 image를 만든다.

Description

int imagecreatefromgif (string filename)

ImageCreateFromGif() returns an image identifier representing the image obtained from the given filename.

ImageCreateFromGif() returns an empty string on failure. It also outputs an error message, which unfortunately displays as a broken link in a browser. To ease debugging the following example will produce an error GIF:

Example 1. Example to handle an error during creation (courtesy vic@zymsys.com)

  1 
  2 function LoadGif ($imgname) {
  3     $im = @imagecreatefromgif ($imgname); /* Attempt to open */
  4     if ($im == "") { /* See if it failed */
  5         $im = ImageCreate (150, 30); /* Create a blank image */
  6         $bgc = ImageColorAllocate ($im, 255, 255, 255);
  7         $tc  = ImageColorAllocate ($im, 0, 0, 0);
  8         ImageFilledRectangle ($im, 0, 0, 150, 30, $bgc); 
  9         /* Output an errmsg */
 10         ImageString($im, 1, 5, 5, "Error loading $imgname", $tc); 
 11     }
 12     return $im;
 13 }
 14       

Note: Since all GIF support was removed from the GD library in version 1.6, this function is not available if you are using that version of the GD library.

ImageCreateFromJPEG

ImageCreateFromJPEG -- JPEG 형태의 파일이나 URL로부터 새 image를 만든다.

Description

int imagecreatefromjpeg (string filename)

ImageCreateFromJPEG() returns an image identifier representing the image obtained from the given filename.

ImagecreateFromJPEG() returns an empty string on failure. It also outputs an error message, which unfortunately displays as a broken link in a browser. To ease debugging the following example will produce an error JPEG:

Example 1. Example to handle an error during creation (courtesy vic@zymsys.com )

  1 
  2 function LoadJpeg ($imgname) {
  3     $im = @imagecreatefromjpeg ($imgname); /* Attempt to open */
  4     if ($im == "") { /* See if it failed */
  5         $im = ImageCreate (150, 30); /* Create a blank image */
  6         $bgc = ImageColorAllocate ($im, 255, 255, 255);
  7         $tc  = ImageColorAllocate ($im, 0, 0, 0);
  8         ImageFilledRectangle ($im, 0, 0, 150, 30, $bgc);
  9         /* Output an errmsg */
 10         ImageString ($im, 1, 5, 5, "Error loading $imgname", $tc); 
 11     }
 12     return $im;
 13 }
 14       

ImageCreateFromPNG

ImageCreateFromPNG -- PNG 형태의 파일이나 URL로부터 새 image를 만든다.

Description

int imagecreatefrompng (string filename)

ImageCreateFromPNG() returns an image identifier representing the image obtained from the given filename.

ImageCreateFromPNG() returns an empty string on failure. It also outputs an error message, which unfortunately displays as a broken link in a browser. To ease debugging the following example will produce an error PNG:

Example 1. Example to handle an error during creation (courtesy vic@zymsys.com)

  1 
  2 function LoadPNG ($imgname) {
  3     $im = @imagecreatefrompng ($imgname); /* Attempt to open */
  4     if ($im == "") { /* See if it failed */
  5         $im = ImageCreate (150, 30); /* Create a blank image */
  6         $bgc = ImageColorAllocate ($im, 255, 255, 255);
  7         $tc  = ImageColorAllocate ($im, 0, 0, 0);
  8         ImageFilledRectangle ($im, 0, 0, 150, 30, $bgc);
  9         /* Output an errmsg */
 10         ImageString ($im, 1, 5, 5, "Error loading $imgname", $tc); 
 11     }
 12     return $im;
 13 }
 14       

ImageDashedLine

ImageDashedLine -- 점선을 그린다.

Description

int imagedashedline (int im, int x1, int y1, int x2, int y2, int col);

ImageDashedLine() draws a dashed line from x1, y1 to x2, y2 (top left is 0, 0) in image im of color col.

See also imageline().

ImageDestroy

ImageDestroy -- image를 없앤다.

Description

int imagedestroy (int im));

ImageDestroy() frees any memory associated with image im. im is the image identifier returned by the imagecreate() function.

ImageFill

ImageFill -- 색을 채운다.

Description

int imagefill (int im, int x, int y, int col)

ImageFill() performs a flood fill starting at coordinate x, y (top left is 0, 0) with color col in the image im.

ImageFilledPolygon

ImageFilledPolygon -- 색이 채워진 다각형을 그린다.

Description

int imagefilledpolygon (int im, array points, int num_points, int col)

ImageFilledPolygon() creates a filled polygon in image im. Points is a PHP array containing the polygon's vertices, ie. points[0] = x0, points[1] = y0, points[2] = x1, points[3] = y1, etc. Num_points is the total number of vertices.

ImageFilledRectangle

ImageFilledRectangle -- 색이 채워진 직사각형을 그린다.

Description

int imagefilledrectangle (int im, int x1, int y1, int x2, int y2, int col)

ImageFilledRectangle() creates a filled rectangle of color col() in image im starting at upper left coordinates x1, y1 and ending at bottom right coordinates x2, y2. 0, 0 is the top left corner of the image.

ImageFillToBorder

ImageFillToBorder -- 지정된 색으로 채운다.

Description

int imagefilltoborder (int im, int x, int y, int border, int col)

ImageFillToBorder() performs a flood fill whose border color is defined by border. The starting point for the fill is x, y (top left is 0, 0) and the region is filled with color col.

ImageFontHeight

ImageFontHeight -- 폰트의 높이를 구한다.

Description

int imagefontheight (int font)

Returns the pixel height of a character in the specified font.

See also imagefontwidth() and imageloadfont().

ImageFontWidth

ImageFontWidth -- 폰트의 넓이를 구한다.

Description

int imagefontwidth (int font)

Returns the pixel width of a character in font.

See also imagefontheight() and imageloadfont().

ImageGif

ImageGif -- 브라우저나 파일로 GIF 형태의 이미지를 출력한다.

Description

int imagegif (int im [, string filename]);

imagegif() creates the GIF file in filename from the image im. The im argument is the return from the imagecreate() function.

The image format will be GIF87a unless the image has been made transparent with imagecolortransparent(), in which case the image format will be GIF89a.

The filename argument is optional, and if left off, the raw image stream will be output directly. By sending an image/gif content-type using header(), you can create a PHP script that outputs GIF images directly.

Note: Since all GIF support was removed from the GD library in version 1.6, this function is not available if you are using that version of the GD library.

ImagePng

ImagePng -- 브라우저나 파일로 PNG 형태의 이미지를 출력한다.

Description

int imagepng (int im [, string filename])

The ImagePng() outputs a GD image stream (im) in PNG format to standard output (usually the browser) or, if a filename is given by the filename it outputs the image to the file.

  1 
  2 $im = ImageCreateFromPng("test.png");
  3 ImagePng($im);
  4           

ImageJPEG

ImageJPEG -- Output image to browser or file

Description

int imagejpeg (int im [, string filename [, int quality]])

ImageJPEG() creates the JPEG file in filename from the image im. The im argument is the return from the ImageCreate() function.

The filename argument is optional, and if left off, the raw image stream will be output directly. To skip the filename argument in order to provide a quality argument just use an empty string (''). By sending an image/jpg content-type using header(), you can create a PHP script that outputs JPEG images directly.

Note: JPEG support is only available in PHP if PHP was compiled against GD-1.8 or later.

ImageInterlace

ImageInterlace -- 그림이 섞이게 하는 interlace 설정을 켜거나 끈다.

Description

int imageinterlace (int im [, int interlace]);

ImageInterlace() turns the interlace bit on or off. If interlace is 1 the im image will be interlaced, and if interlace is 0 the interlace bit is turned off.

This functions returns whether the interlace bit is set for the image.

ImageLine

ImageLine -- 선을 그린다.

Description

int imageline (int im, int x1, int y1, int x2, int y2, int col)

ImageLine() draws a line from x1, y1 to x2, y2 (top left is 0, 0) in image im of color col.

See also imagecreate() and imagecolorallocate().

ImageLoadFont

ImageLoadFont -- 새 폰트를 load한다.

Description

int imageloadfont (string file)

ImageLoadFont() loads a user-defined bitmap font and returns an identifier for the font (that is always greater than 5, so it will not conflict with the built-in fonts).

The font file format is currently binary and architecture dependent. This means you should generate the font files on the same type of CPU as the machine you are running PHP on.

Table 1. Font file format

byte position C data type description
byte 0-3 int number of characters in the font
byte 4-7 int value of first character in the font (often 32 for space)
byte 8-11 int pixel width of each character
byte 12-15 int pixel height of each character
byte 16- char array with character data, one byte per pixel in each character, for a total of (nchars*width*height) bytes.

See also ImageFontWidth() and ImageFontHeight().

ImagePolygon

ImagePolygon -- 다각형을 그린다.

Description

int imagepolygon (int im, array points, int num_points, int col)

ImagePolygon() creates a polygon in image id. Points is a PHP array containing the polygon's vertices, ie. points[0] = x0, points[1] = y0, points[2] = x1, points[3] = y1, etc. Num_points is the total number of vertices.

See also imagecreate().

ImagePSBBox

ImagePSBBox -- PostScript Type1 폰트를 사용하여 출력할 텍스트의 경계가 되는 영역을 지정한다.

Description

array imagepsbbox (string text, int font, int size [, int space [, int tightness [, float angle]]])

Size is expressed in pixels.

Space allows you to change the default value of a space in a font. This amount is added to the normal value and can also be negative.

Tightness allows you to control the amount of white space between characters. This amount is added to the normal character width and can also be negative.

Angle is in degrees.

Parameters space and tightness are expressed in character space units, where 1 unit is 1/1000th of an em-square.

Parameters space, tightness, and angle are optional.

The bounding box is calculated using information available from character metrics, and unfortunately tends to differ slightly from the results achieved by actually rasterizing the text. If the angle is 0 degrees, you can expect the text to need 1 pixel more to every direction.

This function returns an array containing the following elements:

0 lower left x-coordinate
1 lower left y-coordinate
2 upper right x-coordinate
3 upper right y-coordinate

See also imagepstext().

ImagePSEncodeFont

ImagePSEncodeFont -- 폰트의 character encoding vector를 바꿔준다.

Description

int imagepsencodefont (string encodingfile)

Loads a character encoding vector from from a file and changes the fonts encoding vector to it. As a PostScript fonts default vector lacks most of the character positions above 127, you'll definitely want to change this if you use an other language than english. The exact format of this file is described in T1libs documentation. T1lib comes with two ready-to-use files, IsoLatin1.enc and IsoLatin2.enc.

If you find yourself using this function all the time, a much better way to define the encoding is to set ps.default_encoding in the configuration file to point to the right encoding file and all fonts you load will automatically have the right encoding

ImagePSFreeFont

ImagePSFreeFont -- PostScript Type 1 폰트에 사용된 메모리를 풀어준다.

Description

void imagepsfreefont (int fontindex);

See also imagepsloadfont().

ImagePSLoadFont

ImagePSLoadFont -- PostScript Type 1 폰트를 파일로부터 읽어온다.

Description

int imagepsloadfont (string filename)

In the case everything went right, a valid font index will be returned and can be used for further purposes. Otherwise the function returns false and prints a message describing what went wrong.

See also imagepsfreefont().

ImagePsExtendFont

ImagePsExtendFont -- 폰트를 늘이거나 줄인다.

Description

bool imagepsextendfont (int font_index, double extend)

Extend or condense a font (font_index), if the value of the extend parameter is less than one you will be condensing the font.

ImagePsSlantFont

ImagePsSlantFont --  폰트를 기울어지게 한다.

Description

bool imagepsslantfont (int font_index, double slant)

Slant a font given by the font_index parameter with a slant of the value of the slant parameter.

ImagePSText

ImagePSText -- 이미지에 PostScript Type1 폰트를 사용하여 문자열을 그린다.

Descriptiom

array imagepstext (int image, string text, int font, int size, int foreground, int background, int x, int y [, int space [, int tightness [, float angle [, int antialias_steps]]]])

Size is expressed in pixels.

Foreground is the color in which the text will be painted. Background is the color to which the text will try to fade in with antialiasing. No pixels with the color background are actually painted, so the background image does not need to be of solid color.

The coordinates given by x, y will define the origin (or reference point) of the first character (roughly the lower-left corner of the character). This is different from the ImageString(), where x, y define the upper-right corner of the first character. Refer to PostScipt documentation about fonts and their measuring system if you have trouble understanding how this works.

Space allows you to change the default value of a space in a font. This amount is added to the normal value and can also be negative.

Tightness allows you to control the amount of white space between characters. This amount is added to the normal character width and can also be negative.

Angle is in degrees.

Antialias_steps allows you to control the number of colours used for antialiasing text. Allowed values are 4 and 16. The higher value is recommended for text sizes lower than 20, where the effect in text quality is quite visible. With bigger sizes, use 4. It's less computationally intensive.

Parameters space and tightness are expressed in character space units, where 1 unit is 1/1000th of an em-square.

Parameters space, tightness, angle and antialias are optional.

This function returns an array containing the following elements:

0

lower left x-coordinate

1

lower left y-coordinate

2

upper right x-coordinate

3

upper right y-coordinate

See also imagepsbbox().

ImageRectangle

ImageRectangle -- 직사각형을 그린다.

Description

int imagerectangle (int im, int x1, int y1, int x2, int y2, int col)

ImageRectangle() creates a rectangle of color col in image im starting at upper left coordinate x1, y1 and ending at bottom right coordinate x2, y2. 0, 0 is the top left corner of the image.

ImageSetPixel

ImageSetPixel -- 지정한 색으로 점을 찍는다.

Description

int imagesetpixel (int im, int x, int y, int col)

ImageSetPixel() draws a pixel at x, y (top left is 0, 0) in image im of color col.

See also imagecreate() and imagecolorallocate().

ImageString

ImageString -- 문자열을 수평으로 그린다.

Description

int imagestring (int im, int font, int x, int y, string s, int col)

ImageString() draws the string s in the image identified by im at coordinates x, y (top left is 0, 0) in color col. If font is 1, 2, 3, 4 or 5, a built-in font is used.

See also imageloadfont().

ImageStringUp

ImageStringUp -- 문자열을 수직으로 그린다.

Description

int imagestringup (int im, int font, int x, int y, string s, int col)

ImageStringUp() draws the string s vertically in the image identified by im at coordinates x, y (top left is 0, 0) in color col. If font is 1, 2, 3, 4 or 5, a built-in font is used.

See also imageloadfont().

ImageSX

ImageSX -- 그림의 폭을 구한다.

Description

int imagesx (int im)

ImageSX() returns the width of the image identified by im.

See also imagecreate() and imagesy().

ImageSY

ImageSY -- 그림의 높이를 구한다.

Description

int imagesy (int im)

ImageSY() returns the height of the image identified by im.

See also imagecreate() and imagesx().

ImageTTFBBox

ImageTTFBBox -- TrueType font를 사용하여 문자열 쓰고, 주위의 문자 주위에 경계선을 그린다.

Description

array imagettfbbox (int size, int angle, string fontfile, string text)

This function calculates and returns the bounding box in pixels a TrueType text.

ImageTTFBBox() returns an array with 8 elements representing four points making the bounding box of the text:

0

lower left corner, X position

1

lower left corner, Y position

2

lower right corner, X position

3

lower right corner, Y position

4

upper right corner, X position

5

upper right corner, Y position

6

upper left corner, X position

7

upper left corner, Y position

The points are relative to the text regardless of the angle, so "upper left" means in the top left-hand corner seeing the text horizontallty.

This function requires both the GD library and the Freetype library.

See also ImageTTFText().

ImageTTFText

ImageTTFText -- TrueType 폰트를 사용하여 문자열을 쓴다.

Description

array imagettftext (int im, int size, int angle, int x, int y, int col, string fontfile, string text);

ImageTTFText() draws the string text in the image identified by im, starting at coordinates x, y (top left is 0, 0), at an angle of angle in color col, using the TrueType font file identified by fontfile.

The coordinates given by x, y will define the basepoint of the first character (roughly the lower-left corner of the character). This is different from the ImageString(), where x, y define the upper-right corner of the first character.

Angle is in degrees, with 0 degrees being left-to-right reading text (3 o'clock direction), and higher values representing a counter-clockwise rotation. (i.e., a value of 90 would result in bottom-to-top reading text).

Fontfile is the path to the TrueType font you wish to use.

Text is the text string which may include UTF-8 character sequences (of the form: &#123;) to access characters in a font beyond the first 255.

Col is the color index. Using the negative of a color index has the effect of turning off antialiasing.

ImageTTFText() returns an array with 8 elements representing four points making the bounding box of the text. The order of the points is upper left, upper right, lower right, lower left. The points are relative to the text regardless of the angle, so "upper left" means in the top left-hand corner when you see the text horizontallty.

This example script will produce a black GIF 400x30 pixels, with the words "Testing..." in white in the font Arial.

Example 1. ImageTTFText

  1 
  2 <?php
  3 Header ("Content-type: image/gif");
  4 $im = imagecreate (400, 30);
  5 $black = ImageColorAllocate ($im, 0, 0, 0);
  6 $white = ImageColorAllocate ($im, 255, 255, 255);
  7 ImageTTFText ($im, 20, 0, 10, 20, $white, "/path/arial.ttf", 
  8               "Testing... Omega: &#937;");
  9 ImageGif ($im);
 10 ImageDestroy ($im);
 11 ?>
 12       

This function requires both the GD library and the FreeType library.

See also ImageTTFBBox().


XXVIII. IMAP, POP3 and NNTP functions

이 함수들을 동작시키려면 PHP를 --with-imap 옵션을 주고 컴파일 하여야 한다. 또한 이것이 설치되기 위해서는 c-client library가 필요하다. 가장 최신 버전은 ftp://ftp.cac.washington.edu/imap/에 있으므로, 구하여 컴파일하면 된다. 컴파일 후 c-client/c-client.a를 /usr/local/lib나 여러분이 설정해 놓은 link path의 디렉토리로 복사하고, c-client/rfc822.h와 mail.h, linkage.h를 /usr/local/include나 여러분의 include path에 복사해 둔다.

비록 함수들의 이름이 imap_*이라도 이 함수들이 IMAP 프로토콜에 대해서만 사용할 수 있는 것은 아니다. c-client 라이브러리에 근간하고 있는 이 함수들은 NNTP와 POP3 심지어 local mailbox에 접근하는 방법도 제공한다.

이 문서는 제공되는 함수의 모든 세세한 내용을 설명하지 못하고 있다. 자세한 정보는 c-client library 소스와 같이 제공되는 문서(docs/internal.txt)와 다음의 RFC문서들을 참조하기 바란다.

David Wood 가 쓴 Programming Internet Email 이라는 책에도 비교적 잘 설명되어 있다.

Table of Contents
imap_append … Append a string message to a specified mailbox
imap_base64 … Decode BASE64 encoded text
imap_body … Read the message body
imap_check … Check current mailbox
imap_close … Close an IMAP stream
imap_createmailbox … Create a new mailbox
imap_delete … Mark a messge for deletion from current mailbox
imap_deletemailbox … Delete a mailbox
imap_expunge … Delete all messages marked for deletion
imap_fetchbody … Fetch a particular section of the body of the message
imap_fetchstructure … Read the structure of a particular message
imap_header … Read the header of the message
imap_rfc822_parse_headers … Parse mail headers from a string
imap_headers … Returns headers for all messages in a mailbox
imap_listmailbox … Read the list of mailboxes
imap_getmailboxes … Read the list of mailboxes, returning detailed information on each one
imap_listsubscribed … List all the subscribed mailboxes
imap_getsubscribed … List all the subscribed mailboxes
imap_mail_copy … Copy specified messages to a mailbox
imap_mail_move … Move specified messages to a mailbox
imap_num_msg … Gives the number of messages in the current mailbox
imap_num_recent … Gives the number of recent messages in current mailbox
imap_open … Open an IMAP stream to a mailbox
imap_ping … Check if the IMAP stream is still active
imap_renamemailbox … Rename an old mailbox to new mailbox
imap_reopen … Reopen IMAP stream to new mailbox
imap_subscribe … Subscribe to a mailbox
imap_undelete … Unmark the message which is marked deleted
imap_unsubscribe … Unsubscribe from a mailbox
imap_qprint … Convert a quoted-printable string to an 8 bit string
imap_8bit … Convert an 8bit string to a quoted-printable string.
imap_binary … Convert an 8bit string to a base64 string.
imap_scanmailbox … Read the list of mailboxes, takes a string to search for in the text of the mailbox
imap_mailboxmsginfo … Get information about the current mailbox
imap_rfc822_write_address … Returns a properly formatted email address given the mailbox, host, and personal info.
imap_rfc822_parse_adrlist … Parses an address string
imap_setflag_full … Sets flags on messages
imap_clearflag_full … Clears flags on messages
imap_sort
imap_fetchheader … Returns header for a message
imap_uid … This function returns the UID for the given message sequence number.
imap_msgno … This function returns the message sequence number for the given UID.
imap_search … This function returns an array of messages matching the given search criteria.
imap_last_error … This function returns the last IMAP error (if any) that occurred during this page request.
imap_errors … This function returns all of the IMAP errors (if any) that have occurred during this page request or since the error stack was reset.
imap_alerts … This function returns all IMAP alert messages (if any) that have occurred during this page request or since the alert stack was reset.
imap_status … This function returns status information on a mailbox other than the current one.
imap_utf7_decode … Decodes a modified UTF-7 encoded string.
imap_utf7_encode … Converts 8bit data to modified UTF-7 text.
imap_utf8 … Converts text to UTF8
imap_fetch_overview … Read an overview of the information in the headers of the given message
imap_mime_header_decode … Decode MIME header elements
imap_mail_compose … Create a MIME message based on given envelope and body sections
imap_mail … Send an email message

imap_append

imap_append -- 지정한 편지함에 문자열 메세지를 덧붙인다.

Description

int imap_append (int imap_stream, string mbox, string message [, string flags])

Returns true on sucess, false on error.

imap_append() appends a string message to the specified mailbox mbox. If the optional flags is specified, writes the flags to that mailbox also.

When talking to the Cyrus IMAP server, you must use "\r\n" as your end-of-line terminator instead of "\n" or the operation will fail.

Example 1. imap_append() example

  1 
  2 $stream = imap_open("{your.imap.host}INBOX.Drafts","username", "password");
  3 
  4 $check = imap_check($stream);
  5 print "Msg Count before append: ". $check->Nmsgs."\n";
  6 
  7 imap_append($stream,"{your.imap.host}INBOX.Drafts"
  8                    ,"From: me@my.host\r\n"
  9                    ."To: you@your.host\r\n"
 10                    ."Subject: test\r\n"
 11                    ."\r\n"
 12                    ."this is a test message, please ignore\r\n"
 13                    );
 14 
 15 $check = imap_check($stream);
 16 print "Msg Count after append : ". $check->Nmsgs."\n";
 17 
 18 imap_close($stream);
 19       

imap_base64

imap_base64 -- BASE64로 encode된 text를 decode한다.

Description

string imap_base64 (string text)

imap_base64() function decodes BASE-64 encoded text (see RFC2045, Section 6.8). The decoded message is returned as a string.

See also imap_binary().

imap_body

imap_body -- message body를 읽는다.

Description

string imap_body (int imap_stream, int msg_number [, int flags])

imap_body() returns the body of the message, numbered msg_number in the current mailbox. The optional flags are a bit mask with one or more of the following:

imap_check

imap_check -- 현 mailbox를 검사한다.

Description

object imap_check (int imap_stream)

Returns information about the current mailbox. Returns FALSE on failure.

The imap_check() function checks the current mailbox status on the server and returns the information in an object with following properties:

imap_close

imap_close -- IMAP stream을 닫는다.

Description

int imap_close (int imap_stream [, int flags])

Close the imap stream. Takes an optional flag CL_EXPUNGE, which will silently expunge the mailbox before closing, removing all messages marked for deletion.

imap_createmailbox

imap_createmailbox -- 새 편지함을 만든다.

Description

int imap_createmailbox (int imap_stream, string mbox)

imap_createmailbox() creates a new mailbox specified by mbox. Names containing international characters should be encoded by imap_utf7_encode().

Returns true on success and false on error.

See also imap_renamemailbox(), imap_deletemailbox() and imap_open() for the format of mbox names.

Example 1. imap_createmailbox() example

  1 
  2 $mbox = imap_open("{your.imap.host}","username","password",OP_HALFOPEN)
  3      || die("can't connect: ".imap_last_error());
  4 
  5 $name1 = "phpnewbox";
  6 $name2 = imap_utf7_encode("phpnewböx");
  7 
  8 $newname = $name1;
  9 
 10 echo "Newname will be '$name1'<br>\n";
 11 
 12 # we will now create a new mailbox "phptestbox" in your inbox folder,
 13 # check its status after creation and finaly remove it to restore
 14 # your inbox to its initial state 
 15 if(@imap_createmailbox($mbox,imap_utf7_encode("{your.imap.host}INBOX.$newname"))) {
 16   $status = @imap_status($mbox,"{your.imap.host}INBOX.$newname",SA_ALL);
 17   if($status) {
 18     print("your new mailbox '$name1' has the following status:<br>\n");
 19     print("Messages:   ". $status->messages   )."<br>\n";
 20     print("Recent:     ". $status->recent     )."<br>\n";
 21     print("Unseen:     ". $status->unseen     )."<br>\n";
 22     print("UIDnext:    ". $status->uidnext    )."<br>\n";
 23     print("UIDvalidity:". $status->uidvalidity)."<br>\n";
 24     
 25     if(imap_renamemailbox($mbox,"{your.imap.host}INBOX.$newname","{your.imap.host}INBOX.$name2")) {
 26       echo "renamed new mailbox from '$name1' to '$name2'<br>\n";
 27       $newname=$name2;
 28     } else {
 29       print "imap_renamemailbox on new mailbox failed: ".imap_last_error()."<br>\n";
 30     }
 31   } else {
 32     print  "imap_status on new mailbox failed: ".imap_last_error()."<br>\n";
 33   }
 34   if(@imap_deletemailbox($mbox,"{your.imap.host}INBOX.$newname")) {
 35     print "new mailbox removed to restore initial state<br>\n";
 36   } else {
 37     print  "imap_deletemailbox on new mailbox failed: ".implode("<br>\n",imap_errors())."<br>\n";
 38   }
 39   
 40 } else {
 41   print  "could not create new mailbox: ".implode("<br>\n",imap_errors())."<br>\n";
 42 }
 43 
 44 imap_close($mbox);
 45       

imap_delete

imap_delete -- 현재 편지함에서 어떤 messge에 삭제 마크를 한다.

Description

int imap_delete (int imap_stream, int msg_number [, int flags])

Returns true.

imap_delete() function marks message pointed by msg_number for deletion. The optional flags parameter only has a single option, FT_UID, which tells the function to treat the msg_number argument as a UID. Messages marked for deletion will stay in the mailbox until either imap_expunge() is called or imap_close() is called with the optional parameter CL_EXPUNGE.

imap_deletemailbox

imap_deletemailbox -- 편지함을 지운다.

Description

int imap_deletemailbox (int imap_stream, string mbox)

imap_deletemailbox() deletes the specified mailbox (see imap_open() for the format of mbox names).

Returns true on success and false on error.

See also imap_createmailbox(), imap_reanmemailbox(), and imap_open() for the format of mbox

imap_expunge

imap_expunge -- 삭제 마크가 되어 있는 모든 메세지를 지운다.

Description

int imap_expunge (int imap_stream)

imap_expunge() deletes all the messages marked for deletion by imap_delete(), imap_move_mail(), or imap_setflag_full().

Returns true.

imap_fetchbody

imap_fetchbody -- message의 body중 particular section을 가지고 온다.

Description

string imap_fetchbody (int imap_stream, int msg_number, string part_number [, flags flags])

This function causes a fetch of a particular section of the body of the specified messages as a text string and returns that text string. The section specification is a string of integers delimited by period which index into a body part list as per the IMAP4 specification. Body parts are not decoded by this function.

The options for imap_fetchbody() is a bitmask with one or more of the following:

imap_fetchstructure

imap_fetchstructure -- particular message의 구조를 읽어온다.

Description

object imap_fetchstructure (int imap_stream, int msg_number [, int flags])

This function fetches all the structured information for a given message. The optional flags parameter only has a single option, FT_UID, which tells the function to treat the msg_number argument as a UID. The returned object includes the envelope, internal date, size, flags and body structure along with a similar object for each mime attachement. The structure of the returned objects is as follows:

Table 1. Returned Objects for imap_fetchstructure()

type Primary body type
encoding Body transfer encoding
ifsubtype True if there is a subtype string
subtype MIME subtype
ifdescription True if there is a description string
description Content description string
ifid True if there is an identification string
id Identification string
lines Number of lines
bytes Number of bytes
ifdisposition True if there is a disposition string
disposition Disposition string
ifdparameters True if the dparameters array exists
dparameters Disposition parameter array
ifparameters True if the parameters array exists
parameters MIME parameters array
parts Array of objects describing each message part

  1. dparameters is an array of objects where each object has an "attribute" and a "value" property.
  2. Parameter is an array of objects where each object has an "attributte" and a "value" property.
  3. Parts is an array of objects identical in structure to the top-level object, with the limitation that it cannot contain further 'parts' objects.

Table 2. Primary body type

0 text
1 multipart
2 message
3 application
4 audio
5 image
6 video
7 other

Table 3. Transfer encodings

0 7BIT
1 8BIT
2 BINARY
3 BASE64
4 QUOTED-PRINTABLE
5 OTHER

imap_header

imap_header -- message의 header를 읽어온다.

Description

object imap_header (int imap_stream, int msg_number [, int fromlength [, int subjectlength [, string defaulthost]]])

This function returns an object of various header elements.


       remail, date, Date, subject, Subject, in_reply_to, message_id,
       newsgroups, followup_to, references

message flags:
   Recent -  'R' if recent and seen, 
             'N' if recent and not seen, 
             ' ' if not recent
   Unseen -  'U' if not seen AND not recent, 
             ' ' if seen OR not seen and recent
   Answered -'A' if answered, 
             ' ' if unanswered
   Deleted - 'D' if deleted, 
             ' ' if not deleted
   Draft -   'X' if draft, 
             ' ' if not draft
   Flagged - 'F' if flagged, 
             ' ' if not flagged

NOTE that the Recent/Unseen behavior is a little odd. If you want to
know if a message is Unseen, you must check for

Unseen == 'U' || Recent == 'N'

toaddress (full to: line, up to 1024 characters)

to[] (returns an array of objects from the To line, containing):
   personal
   adl
   mailbox
   host

fromaddress (full from: line, up to 1024 characters)

from[] (returns an array of objects from the From line, containing):
   personal
   adl
   mailbox
   host

ccaddress (full cc: line, up to 1024 characters)
cc[] (returns an array of objects from the Cc line, containing):
   personal
   adl
   mailbox
   host

bccaddress (full bcc line, up to 1024 characters)
bcc[] (returns an array of objects from the Bcc line, containing):
   personal
   adl
   mailbox
   host

reply_toaddress (full reply_to: line, up to 1024 characters)
reply_to[] (returns an array of objects from the Reply_to line,
containing):
   personal
   adl
   mailbox
   host

senderaddress (full sender: line, up to 1024 characters)
sender[] (returns an array of objects from the sender line, containing):
   personal
   adl
   mailbox
   host

return_path (full return-path: line, up to 1024 characters)
return_path[] (returns an array of objects from the return_path line,
containing):
   personal
   adl
   mailbox
   host

udate (mail message date in unix time)

fetchfrom (from line formatted to fit fromlength 
characters)

fetchsubject (subject line formatted to fit subjectlength characters)

imap_rfc822_parse_headers

(PHP4 >= 4.0RC1)

imap_rfc822_parse_headers -- 주어진 문자열내의 메일 헤더에 대한 정보를 분석한다.

Description

object imap_rfc822_parse_headers (string headers [, string defaulthost])

This function returns an object of various header elements, similar to imap_header(), except without the flags and other elements that come from the IMAP server

imap_headers

imap_headers -- 한 편지함의 모든 message들의 header를 읽어온다.

Description

array imap_headers (int imap_stream)

Returns an array of string formatted with header info. One element per mail message.

imap_listmailbox

imap_listmailbox -- 편지함의 목록을 읽어 온다.

Description

array imap_listmailbox (int imap_stream, string ref, string pattern)

Returns an array containing the names of the mailboxes. See imap_getmailboxes() for a description of ref and pattern.

Example 1. imap_listmailbox() example

  1 
  2 $mbox = imap_open("{your.imap.host}","username","password",OP_HALFOPEN)
  3       || die("can't connect: ".imap_last_error());
  4  
  5 $list = imap_listmailbox($mbox,"{your.imap.host}","*");
  6 if(is_array($list)) {
  7   reset($list);
  8   while (list($key, $val) = each($list))
  9     print imap_utf7_decode($val)."<br>\n";
 10 } else
 11   print "imap_listmailbox failed: ".imap_last_error()."\n";
 12  
 13 imap_close($mbox);                                                                
 14       

imap_getmailboxes

(PHP3 >= 3.0.12, PHP4 >= 4.0b4)

imap_getmailboxes -- 편지함들의 목록을 읽고, 각각에 대한 자세한 정보를 반환한다.

Description

array imap_getmailboxes (int imap_stream, string ref, string pattern)

Returns an array of objects containing mailbox information. Each object has the attributes name, specifying the full name of the mailbox; delimiter, which is the hierarchy delimiter for the part of the hierarchy this mailbox is in; and attributes. Attributes is a bitmask that can be tested against:

Mailbox names containing international Characters outside the printable ASCII range will be encoded and may be decoded by imap_utf7_decode().

ref should normally be just the server specification as described in imap_open(), and pattern specifies where in the mailbox hierarchy to start searching. If you want all mailboxes, pass '*' for pattern.

There are two special characters you can pass as part of the pattern: '*' and '%'. '*' means to return all mailboxes. If you pass pattern as '*', you will get a list of the entire mailbox hierarchy. '%' means to return the current level only. '%' as the pattern parameter will return only the top level mailboxes; '~/mail/%' on UW_IMAPD will return every mailbox in the ~/mail directory, but none in subfolders of that directory.

Example 1. imap_getmailboxes() example

  1 
  2 $mbox = imap_open("{your.imap.host}","username","password",OP_HALFOPEN)
  3       || die("can't connect: ".imap_last_error());
  4  
  5 $list = imap_getmailboxes($mbox,"{your.imap.host}","*");
  6 if(is_array($list)) {
  7   reset($list);
  8   while (list($key, $val) = each($list))
  9   {
 10     print "($key) ";
 11     print imap_utf7_decode($val->name).",";
 12     print "'".$val->delimiter."',";
 13     print $val->attributes."<br>\n";
 14   }
 15 } else
 16   print "imap_getmailboxes failed: ".imap_last_error()."\n";
 17  
 18 imap_close($mbox);                                                                
 19       

imap_listsubscribed

imap_listsubscribed -- 모든 subscribed 편지함의 목록을 읽어 온다.

Description

array imap_listsubscribed (int imap_stream, string ref, string pattern)

Returns an array of all the mailboxes that you have subscribed. This is almost identical to imap_listmailbox(), but will only return mailboxes the user you logged in as has subscribed.

imap_getsubscribed

imap_getsubscribed -- 모든 subscribed 편지함들의 목록을 반환한다.

Description

array imap_getsubscribed (int imap_stream, string ref, string pattern)

This function is identical to imap_getmailboxes(), except that it only returns mailboxes that the user is subscribed to.

imap_mail_copy

imap_mail_copy -- 특정 message들을 다른 편지함으로 복사한다.

Description

int imap_mail_copy (int imap_stream, string msglist, string mbox [, int flags])

Returns true on success and false on error.

Copies mail messages specified by msglist to specified mailbox. msglist is a range not just message numbers (as described in RFC2060).

Flags is a bitmask of one or more of

imap_mail_move

imap_mail_move -- 특정 message들을 다른 편지함으로 옮긴다.

Description

int imap_mail_move (int imap_stream, string msglist, string mbox [, int flags])

Moves mail messages specified by msglist to specified mailbox. msglist is a range not just message numbers (as described in RFC2060).

Flags is a bitmask and may contain the single option

Returns true on success and false on error.

imap_num_msg

imap_num_msg -- 현재 편지함의 메세지 개수를 구한다.

Description

int imap_num_msg (int imap_stream)

Return the number of messages in the current mailbox.

imap_num_recent

imap_num_recent -- 현재 편지함의 최근 메세지 개수를 구한다.

Description

int imap_num_recent (int imap_stream)

Returns the number of recent messages in the current mailbox.

imap_open

imap_open -- 한 편지함에 대해 IMAP stream을 연다.

Description

int imap_open (string mailbox, string username, string password [, int flags])

Returns an IMAP stream on success and false on error. This function can also be used to open streams to POP3 and NNTP servers, but some functions and features are not available on IMAP servers.

A mailbox name consists of a server part and a mailbox path on this server. The special name INBOX stands for the current users personal mailbox. The server part, which is enclosed in '{' and '}', consists of the servers name or ip address, a protocol secification (beginning with '/') and an optional port specifier beginnung with ':'. The server part is mandatory in all mailbox parameters. Mailbos names that contain international characters besides those in the printable ASCII space have to be encoded with imap_utf7_encode().

The options are a bit mask with one or more of the following:

To connect to an IMAP server running on port 143 on the local machine, do the following:

  1  
  2 $mbox = imap_open ("{localhost:143}INBOX", "user_id", "password");
  3       

To connect to a POP3 server on port 110 on the local server, use:

  1 
  2 $mbox = imap_open ("{localhost/pop3:110}INBOX", "user_id", "password");
  3       

To connect to an NNTP server on port 119 on the local server, use:

  1 
  2 $nntp = imap_open ("{localhost/nntp:119}comp.test", "", "");
  3       

To connect to a remote server replace "localhost" with the name or the IP address of the server you want to connect to.

Example 1. imap_open() example

  1 
  2 $mbox = imap_open ("{your.imap.host:143}", "username", "password");
  3 
  4 echo "<p><h1>Mailboxes</h1>\n";
  5 $folders = imap_listmailbox ($mbox, "{your.imap.host:143}", "*");
  6 
  7 if ($folders == false) {
  8     echo "Call failed<br>\n";
  9 } else {
 10     while (list ($key, $val) = each ($folders)) {
 11         echo $val."<br>\n";
 12     }
 13 }
 14 
 15 echo "<p><h1>Headers in INBOX</h1>\n";
 16 $headers = imap_headers ($mbox);
 17 
 18 if ($headers == false) {
 19     echo "Call failed<br>\n";
 20 } else {
 21     while (list ($key,$val) = each ($headers)) {
 22         echo $val."<br>\n";
 23     }
 24 }
 25 
 26 imap_close($mbox);
 27       

imap_ping

imap_ping -- IMAP stream이 여전히 active인지 검사한다.

Description

int imap_ping (int imap_stream)

Returns true if the stream is still alive, false otherwise.

imap_ping() function pings the stream to see it is still active. It may discover new mail; this is the preferred method for a periodic "new mail check" as well as a "keep alive" for servers which have inactivity timeout. (As PHP scripts do not tend to run that long, i can hardly imagine that this function will be usefull to anyone.)

imap_renamemailbox

imap_renamemailbox -- 편지함의 이름을 바꾼다.

Description

int imap_renamemailbox (int imap_stream, string old_mbox, string new_mbox)

This function renames on old mailbox to new mailbox (see imap_open() for the format of mbox names).

Returns true on success and false on error.

See also imap_createmailbox(), imap_deletemailbox(), and imap_open() for the format of mbox.

imap_reopen

imap_reopen -- 기존에 열려있는 IMAP stream을 새 편지함으로 연다.

Description

int imap_reopen (string imap_stream, string mailbox [, string flags])

This function reopens the specified stream to a new mailbox on an IMAP or NNTP server.

The options are a bit mask with one or more of the following:

Returns true on success and false on error.

imap_subscribe

imap_subscribe -- 새 편지함을 subscribe한다.

Description

int imap_subscribe (int imap_stream, string mbox)

Subscribe to a new mailbox.

Returns true on success and false on error.

imap_undelete

imap_undelete -- 삭제 표시된 message의 삭제 표시를 지운다 .

Description

int imap_undelete (int imap_stream, int msg_number)

This function removes the deletion flag for a specified message, which is set by imap_delete() or imap_mail_move().

Returns true on success and false on error.

imap_unsubscribe

imap_unsubscribe -- 편지함을 unsubscribe한다.

Description

int imap_unsubscribe (int imap_stream, string mbox)

Unsubscribe from a specified mailbox.

Returns true on success and false on error.

imap_qprint

imap_qprint -- quoted-printable 문자열을 8 bit 문자열로 바꾼다.

Description

string imap_qprint (string string)

Convert a quoted-printable string to an 8 bit string (according to RFC2045, section 6.7).

Returns an 8 bit (binary) string.

See also imap_8bit().

imap_8bit

imap_8bit -- 8 bit 문자열을 quoted-printable 문자열로 바꾼다.

Description

string imap_8bit (string string)

Convert an 8bit string to a quoted-printable string (according to RFC2045, section 6.7).

Returns a quoted-printable string.

See also imap_qprint().

imap_binary

imap_binary -- 8bit 문자열을 base64 문자열로 바꾼다.

Description

string imap_binary (string string)

Convert an 8bit string to a base64 string (according to RFC2045, Section 6.8).

Returns a base64 string.

See also imap_base64().

imap_scanmailbox

imap_scanmailbox -- mailbox들의 list를 읽고, 검색할 문자열을 mailbox의 text에서 취한다.

Description

array imap_scanmailbox (int imap_stream, string content)

Returns an array containing the names of the mailboxes that have string in the text of the mailbox. This function is simmilar to imap_listmailbox(), but it will additionally check for the presence of the string content inside the mailbox data.

imap_mailboxmsginfo

imap_mailboxmsginfo -- 현재 mailbox에 대한 정보를 구한다.

Description

object imap_mailboxmsginfo (int imap_stream)

Returns information about the current mailbox. Returns FALSE on failure.

The imap_mailboxmsginfo() function checks the current mailbox status on the server. It is similar to imap_status(), but will additionally sum up the size of all messages in the mailbox, which will take some additional time to execute. It returns the information in an object with following properties.

Table 1. Mailbox properties

Date date of last change
Driver driver
Mailbox name of the mailbox
Nmsgs number of messages
Recent number of recent messages
Unread number of unread messages

Size

mailbox size

 

Example 1. imap_mailboxmsginfo() example

  1 
  2 $mbox = imap_open("{your.imap.host}INBOX","username", "password")
  3       || die("can't connect: ".imap_last_error());
  4  
  5 $check = imap_mailboxmsginfo($mbox);
  6  
  7 if($check) {
  8   print "Date: "    . $check->Date    ."<br>\n" ;
  9   print "Driver: "  . $check->Driver  ."<br>\n" ;
 10   print "Mailbox: " . $check->Mailbox ."<br>\n" ;
 11   print "Messages: ". $check->Nmsgs   ."<br>\n" ;
 12   print "Recent: "  . $check->Recent  ."<br>\n" ;
 13   print "Size: "    . $check->Size    ."<br>\n" ;
 14 } else
 15   print "imap_check() failed: ".imap_lasterror(). "<br>\n";
 16  
 17 imap_close($mbox);
 18       

imap_rfc822_write_address

imap_rfc822_write_address -- 주어진 mailbox와 host, personal info로 적합한 모양의 email address를 만들어 낸다.

Description

string imap_rfc822_write_address (string mailbox, string host, string personal)

Returns a properly formatted email address as defined in RFC822 given the mailbox, host, and personal info.

Example 1. imap_rfc822_write_address() example

  1 
  2 print imap_rfc822_write_address("hartmut","cvs.php.net","Hartmut Holzgraefe")."\n";      
  3       

imap_rfc822_parse_adrlist

imap_rfc822_parse_adrlist -- address 문자열을 parsing한다.

Description

array imap_rfc822_parse_adrlist (string address, string default_host)

This function parses the address string as defined in RFC822 and for each address, returns an array of objects. The objects properties are:

 

Example 1. imap_rfc822_parse_adrlist() example

  1 
  2 $address_string = "Hartmut Holzgraefe <hartmut@cvs.php.net>, postmaster@somedomain.net, root";
  3 $address_array  = imap_rfc822_parse_adrlist($address_string,"somedomain.net");
  4 if(! is_array($address_array)) die("somethings wrong\n");
  5  
  6 reset($address_array);
  7 while(list($key,$val)=each($address_array)){
  8   print "mailbox : ".$val->mailbox."<br>\n";
  9   print "host    : ".$val->host."<br>\n";
 10   print "personal: ".$val->personal."<br>\n";
 11   print "adl     : ".$val->adl."<p>\n";
 12 } 
 13       

imap_setflag_full

imap_setflag_full -- message들의 여러 flag를 설정(set)한다.

Description

string imap_setflag_full (int stream, string sequence, string flag, string options)

This function causes a store to add the specified flag to the flags set for the messages in the specified sequence.

The flags which you can set are "\\Seen", "\\Answered", "\\Flagged", "\\Deleted", "\\Draft", and "\\Recent" (as defined by RFC2060).

The options are a bit mask with one or more of the following:

 

Example 1. imap_setflag_full() example

  1 
  2 $mbox = imap_open("{your.imap.host:143}","username","password")
  3      || die("can't connect: ".imap_last_error());
  4  
  5 $status = imap_setflag_full($mbox,"2,5","\\Seen \\Flagged");
  6  
  7 print gettype($status)."\n";
  8 print $status."\n";
  9  
 10 imap_close($mbox);
 11       

imap_clearflag_full

imap_clearflag_full -- message들의 여러 flag를 clear 한다.

Description

string imap_clearflag_full (int stream, string sequence, string flag, string options)

This function causes a store to delete the specified flag to the flags set for the messages in the specified sequence. The flags which you can unset are "\\Seen", "\\Answered", "\\Flagged", "\\Deleted", "\\Draft", and "\\Recent" (as defined by RFC2060).

The options are a bit mask with one or more of the following:

imap_sort

imap_sort -- 메시지들을 주어진 방식대로 정렬한 메시지 번호의 배열을 구한다.

Description

string imap_sort (int stream, int criteria, int reverse, int options)

Returns an array of message numbers sorted by the given parameters.

Reverse is 1 for reverse-sorting.

Criteria can be one (and only one) of the following:

The flags are a bitmask of one or more of the following:

imap_fetchheader

imap_fetchheader -- message의 헤더를 반환한다.

Description

string imap_fetchheader (int imap_stream, int msgno, int flags)

This function causes a fetch of the complete, unfiltered RFC822 format header of the specified message as a text string and returns that text string.

The options are:

  • FT_INTERNAL  The return string is in "internal" format, without any attempt to canonicalize to CRLF newlines
  • FT_PREFETCHTEXT The RFC822.TEXT should be pre-fetched at the same time. 
                         This avoids an extra RTT on an IMAP connection if a full message text is desired (e.g. in a "save to local file" operation)
  • imap_uid

    imap_uid -- 선택한 message의 일련 번호(sequence number)인 UID를 반환한다.

    Description

    int imap_uid (int imap_stream, int msgno)

    This function returns the UID for the given message sequence number. An UID is an unique identifier that will not change over time while a message sequence number may change whenever the content of the mailbox changes. This function is the inverse of imap_msgno().

    imap_msgno

    imap_msgno -- 주어진 UID에 해당하는 메세지 순서 번호를 반환한다.

    Description

    int imap_msgno (int imap_stream, int uid)

    This function returns the message sequence number for the given UID. It is the inverse of imap_uid().

    imap_search

    imap_search -- 주어진 검색 기준에 맞는 메세지들의 배열을 반환한다.

    Description

    array imap_search (int imap_stream, string criteria, int flags)

    This function performs a search on the mailbox currently opened in the given imap stream. criteria is a string, delimited by spaces, in which the following keywords are allowed. Any multi-word arguments (eg. FROM "joey smith") must be quoted.

    For example, to match all unanswered messages sent by Mom, you'd use: "UNANSWERED FROM mom". Searches appear to be case insensitive. This list of criteria is from a reading of the UW c-client source code and may be uncomplete or inaccurate (see also RFC2060, section 6.4.4).

    Valid values for flags are SE_UID, which causes the returned array to contain UIDs instead of messages sequence numbers.

    imap_last_error

    imap_last_error -- 요구된 현재 페이지에서 IMAP 에러중 가장 최근에 발생한 것을 반환한다.

    Description

    string imap_last_error (void)

    This function returns the full text of the last IMAP error message that occurred on the current page. The error stack is untouched; calling imap_last_error() subsequently, with no intervening errors, will return the same error.

    imap_errors

    imap_errors -- 요구된 현재 페이지에서 처음부터, 혹은 에러 스택이 reset된 적이 있다면 그 이후에 발생한 모든 IMAP 에러를 반환한다.

    Description

    array imap_errors (void)

    This function returns an array of all of the IMAP error messages generated since the last imap_errors() call, or the beginning of the page. When imap_errors() is called, the error stack is subsequently cleared.

    imap_alerts

    imap_alerts -- 요구된 현재 페이지에서 처음부터, 혹은 에러 스택이 reset된 적이 있다면 그 이후에 발생한 모든 IMAP 주의(alert) 메세지를 반환한다.

    Description

    array imap_alerts (void)

    This function returns an array of all of the IMAP alert messages generated since the last imap_alerts() call, or the beginning of the page. When imap_alerts() is called, the alert stack is subsequently cleared. The IMAP specification requires that these messages be passed to the user.

    imap_status

    imap_status -- 현재의 편지함이외의 다른 편지함의 상태 정보를 반환한다.

    Description

    object imap_status (int imap_stream, string mailbox, int options)

    This function returns an object containing status information. Valid flags are:

    status->flags is also set, which contains a bitmask which can be checked against any of the above constants.

    Example 1. imap_status() example

      1 
      2 $mbox = imap_open("{your.imap.host}","username","password",OP_HALFOPEN)
      3       || die("can't connect: ".imap_last_error());
      4  
      5 $status = imap_status($mbox,"{your.imap.host}INBOX",SA_ALL);
      6 if($status) {
      7   print("Messages:   ". $status->messages   )."<br>\n";
      8   print("Recent:     ". $status->recent     )."<br>\n";
      9   print("Unseen:     ". $status->unseen     )."<br>\n";
     10   print("UIDnext:    ". $status->uidnext    )."<br>\n";
     11   print("UIDvalidity:". $status->uidvalidity)."<br>\n"; 
     12 } else
     13   print "imap_status failed: ".imap_lasterror()."\n";
     14  
     15 imap_close($mbox);
     16       

    imap_utf7_decode

    (PHP3 >= 3.0.15, PHP4 >= 4.0b4)

    imap_utf7_decode -- modified UTF-7 으로 엔코딩된 문자열을 디코드한다.

    Description

    string imap_utf7_decode (string text)

    Decodes modified UTF-7 text into 8bit data.

    Returns the decoded 8bit data, or false if the input string was not valid modified UTF-7. This function is needed to decode mailbox names that contain international characters outside of the printable ASCII range. The modified UTF-7 encoding is defined in RFC 2060, section 5.1.3 (original UTF-7 was defned in RFC1642).

    imap_utf7_encode

    (PHP3 >= 3.0.15, PHP4 >= 4.0b4)

    imap_utf7_encode --  8bit 데이터를 modified UTF-7 문자열로 변환한다.

    Description

    string imap_utf7_encode (string data)

    Converts 8bit data to modified UTF-7 text. This is needed to encode mailbox names that contain international characters outside of the printable ASCII range. The modified UTF-7 encoding is defined in RFC 2060, section 5.1.3 (original UTF-7 was defned in RFC1642).

    Returns the modified UTF-7 text.

    imap_utf8

    (PHP3 >= 3.0.13, PHP4 >= 4.0RC1)

    imap_utf8 --  텍스트를 UTF8 형태로 변환한다.

    Description

    string imap_utf8 (string text)

    Converts the given text to UTF8 (as defined in RFC2044).

    imap_fetch_overview

    (PHP3 >= 3.0.4, PHP4 )

    imap_fetch_overview -- 주어진 메시지의 헤더에 있는 정보를 전체적으로 읽어온다.

    Description

    array imap_fetch_overview (int imap_stream, string sequence [, int flags])

    This function fetches mail headers for the given sequence and returns an overview of their contents. sequence will contain a sequence of message indices or UIDs, if flags contains FT_UID. The returned value is an array of objects describing one message header each:

     

    Example 1. imap_fetch_overview() example

      1 
      2 $mbox = imap_open("{your.imap.host:143}","username","password")
      3      || die("can't connect: ".imap_last_error());
      4  
      5 $overview = imap_fetch_overview($mbox,"2,4:6",0);
      6  
      7 if(is_array($overview)) {
      8         reset($overview);
      9         while( list($key,$val) = each($overview)) {
     10                 print     $val->msgno
     11                 . " - " . $val->date
     12                 . " - " . $val->subject
     13                 . "\n";
     14         }
     15 }
     16  
     17 imap_close($mbox);
     18       

    imap_mime_header_decode

    (PHP3 CVS only, PHP4 >= 4.0RC1)

    imap_mime_header_decode -- MIME 헤더 요소를 디코드한다.

    Description

    array imap_header_decode (string text)

    imap_mime_header_decode() function decodes MIME message header extensions that are non ASCII text (see RFC2047) The decoded elements are returned in an array of objects, where each object has two properties, "charset" & "text". If the element hasn't been encoded, and in other words is in plain US-ASCII,the "charset" property of that element is set to "default".

    Example 1. imap_mime_header_decode() example

      1 
      2 $text="=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>";
      3 
      4 $elements=imap_mime_header_decode($text);
      5 for($i=0;$i<count($elements);$i++) {
      6 	echo "Charset: {$elements[$i]->charset}\n";
      7 	echo "Text: {$elements[$i]->text}\n\n";
      8 }
      9 
     10       

    imap_mail_compose

    (PHP3 >= 3.0.5, PHP4 )

    imap_mail_compose -- 주어진 envelope 와 body 부분을 가지고 MIME 메시지를 만들어낸다.

    Description

    string imap_mail_compose (array envelope, array body)

    imap_mail

    (PHP3 >= 3.0.14, PHP4 >= 4.0b4)

    imap_mail --  email 메시지를 보낸다.

    Description

    string imap_mail (string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])

    This function is currently only available in PHP3.


    XXIX. Informix functions

    Informix (IDS) 7.x, SE 7.x, Universal Server (IUS) 9.x and IDS 2000 를 위한 드라이버는 informix extension 디렉토리의 "ifx.ec"와 "php3_ifx.h"에 구현되어 있다. IDS 7.x 에 대한 지원은, BYTE and TEXT 칼럼에 대한 완전한 지원을 포함하여, 충분한 정도로(fairly) 완성되었다. IUS 9.x에 대한 지원은 부분적으로만 완료되었다. 새로운 데이터 타입들은 완료되었으나, SLOB와 CLOB에 대한 지원은 아직 진행중이다.

    설정시 주의 사항 (Configuration notes) :

    PHP Informix 드라이버를 컴파일하려면 ESQL/C 버전이 필요하다. 7.2x 이후의 ESQL/C 버전이면 문제 없다. ESQL/C는 이제 Informix Client SDK의 한 부분이 되어있다.

    "configure" 스크립트를실행하기 전에, 반드시 "INFORMIXDIR" 환경 변수를 설정해 놓아야 하고, $INFORMIXDIR/bin 디렉토리가 여러분의 PATH 에 포함되어 있어야 한다.

    이렇게 해 놓고 "configure --with_informix=yes"로 스크립트 파일을 실행하면, configure 스크립트는 라이브러리와 include가 있는 디렉토리를 자동으로 찾는다. 만약 여러분이 손으로 설정 내용을 지정하고 싶다면 "IFX_LIBDIR", "IFX_LIBS", "IFX_INCDIR"의 환경변수에 원하는 값을 지정하면 된다. 또한, configure 스크립트는 여러분이 사용중인 Informix의 버전을 체크한다. 만약 여러분이 Informix 버전이 9.00이상이라면 이 값이 "HAVE_IFX_IUS" 라는 conditional compilation variable에 설정한다.

    BLOB 사용시 주의 사항 (Some notes on the use of BLOBs(TEXT and BYTE columns)) :

    현재 버전(September 18, 1998)은 select/insert/update에서 BLOB 컬럼을 완벽하게 지원한다.

    BLOB는 보통 정수값인 BLOB identifier를 사용하여 주소화(addressed)된다. Select 질의는 모든 BYTE와 TEXT 컬럼에 대한 "blob id"를 반환한다. 여러분이 "ifx_blobinfile(0);"를 사용하여 BLOB를 메모리에서 가져오기로 결정해 두었다면, 여러분은 "string_var = ifx_get_blob($blob_id);" 같은 명령을 사용하여 그 내용을 얻어올 수 있다. 만약, "ifx_blobinfile(1);"를 사용하여 파일에 있는 BLOB 컬럼의 내용을 자져오기로 하였다면, "ifx_get_blob($blob_id);"를 사용하여 해당 파일 이름을 얻을 수 있다. 이때 얻은 파일 이름은 일반적인 파일 I/O 방식을 사용하여 그 내용을 읽어올 수 있다.

    insert/update 질의의 경우 여러분은 "ifx_create_blob(..);"를 사용하여 "blob id(들)"를 손수 만들어 주어야 한다. 만든 blob id들은 배열에 저장한 후에, blob 컬럼은 질의 문자열의 물음표(?)로 바꾼다. updates/inserts를 위해서 여러분은 ifx_update_blob(...)를 사용하여 blob의 내용을 설정하여야 한다.

    BLOB 컬럼에 대한 동작은 다음과 같은 설정 변수(configuration variables)에 따라 달라진다. 이 설정 변수(configuration variables)은 실행중에도 변경할 수 있다. :

    설정변수(configuration variable) :

    실행 함수(runtime functions) :

    설정변수(configuration variable) :

    실행 함수(runtime functions) :

    만약 여러분이 ifx_text/byteasvarchar를 1로 설정하면, 여러분은 select 질의에서 TEXT와 BYTE 컬럼을 일반적인 (그러나 보다 긴) VARCHAR 필드처럼 사용할 수 있다. PHP에서 모든 문자열이 계산("counted") 되어지는 한, 이것은 "binary safe"한 상태로 있게 된다. 이것을 올바르게 사용하는 것은 여러분에게 달려있다. 돌려받을 데이터는 여러분이 그 내용에 대해 책임질 수 있다면, 어떤 내용도 포함할 수 있다.

    만약 여러분이 ifx_blobinfile을 1로 설정하면, blob의 내용을 가져오기 위해 ifx_get_blob(..)를 사용하여 반환 받은 파일명을 사용하여야 한다. 이 경우에 어떤 row를 가져오게(fetch) 되면 여러분은 INFORMIX가 만든 임시 파일들을 지워줄 책임이 있다. Informix는 새 row fetch때 마다 모든 BYTE 컬럼에 하나씩 새 임시 파일을 만든다.

    임시 파일이 있는 디렉토리는 환경변수인 "blobdir"에 설정된 된 값을 사용한다. 기본값은 현재 디렉토리인 "." 이다. putenv(blobdir=tmpblob"); 같이 사용하면 남겨진 ("blb"로 시작하는 이름을 가진) 임시 파일들을 쉽게 청소할 수 있다.

    자동 공백 제거 (Automatically trimming "char" <SQLCHAR and SQLNCHAR> data) :

    이 기능은 다음 설정 변수(configuration variable)로 설정할 수 있다.

    ifx.charasvarchar : 1로 설정되어있으면 뒤에 붙은 공백문자를 자동으로 제거한다.


    Table of Contents
    ifx_connect … Open Informix server connection
    ifx_pconnect … Open persistent Informix connection
    ifx_close … Close Informix connection
    ifx_query … Send Informix query
    ifx_prepare … Prepare an SQL-statement for execution
    ifx_do … Execute a previously prepared SQL-statement
    ifx_error … Returns error code of last Informix call
    ifx_errormsg … Returns error message of last Informix call
    ifx_affected_rows … Get number of rows affected by a query
    ifx_getsqlca … Get the contents of sqlca.sqlerrd[0..5] after a query
    ifx_fetch_row … Get row as enumerated array
    ifx_htmltbl_result … Formats all rows of a query into a HTML table
    ifx_fieldtypes … List of Informix SQL fields
    ifx_fieldproperties … List of SQL fieldproperties
    ifx_num_fields … Returns the number of columns in the query
    ifx_num_rows … Count the rows already fetched a query
    ifx_free_result … Releases resources for the query
    ifx_create_char … Creates an char object
    ifx_free_char … Deletes the char object
    ifx_update_char … Updates the content of the char object
    ifx_get_char … Return the content of the char object
    ifx_create_blob … Creates an blob object
    ifx_copy_blob … Duplicates the given blob object
    ifx_free_blob … Deletes the blob object
    ifx_get_blob … Return the content of a blob object
    ifx_update_blob … Updates the content of the blob object
    ifx_blobinfile_mode … Set the default blob mode for all select queries
    ifx_textasvarchar … Set the default text mode
    ifx_byteasvarchar … Set the default byte mode
    ifx_nullformat … Sets the default return value on a fetch row
    ifxus_create_slob … Creates an slob object and opens it
    ifx_free_slob … Deletes the slob object
    ifxus_close_slob … Deletes the slob object
    ifxus_open_slob … Opens an slob object
    ifxus_tell_slob … Returns the current file or seek position
    ifxus_seek_slob … Sets the current file or seek position
    ifxus_read_slob … Reads nbytes of the slob object
    ifxus_write_slob … Writes a string into the slob object

    ifx_connect

    ifx_connect -- Informix 서버 connection을 연다.

    Description

    int ifx_connect (string [database] , string [userid] , string [password] );

    Returns an connection identifier on success, or FALSE on error.

    ifx_connect() establishes a connection to an Informix server. All of the arguments are optional, and if they're missing, defaults are taken from values supplied in php3.ini (ifx.default_host for the host (Informix libraries will use $INFORMIXSERVER environment value if not defined), ifx.default_user for user, ifx.default_password for the password (none if not defined).

    In case a second call is made to ifx_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned.

    The link to the server will be closed as soon as the execution of the script ends, unless it's closed earlier by explicitly calling ifx_close().

    See also ifx_pconnect(), and ifx_close().

    Example 1. Connect to a Informix database

      1 
      2 $conn_id = ifx_pconnect ("mydb@ol_srv1", "imyself", "mypassword");
      3       

    ifx_pconnect

    ifx_pconnect -- 영구적인(persistent) Informix 서버 connection을 연다.

    Description

    int ifx_pconnect (string [database] , string [userid] , string [password] );

    Returns: A positive Informix persistent link identifier on success, or false on error

    ifx_pconnect() acts very much like ifx_connect() with two major differences.

    This function behaves exactly like ifx_connect() when PHP is not running as an Apache module. First, when connecting, the function would first try to find a (persistent) link that's already open with the same host, username and password. If one is found, an identifier for it will be returned instead of opening a new connection.

    Second, the connection to the SQL server will not be closed when the execution of the script ends. Instead, the link will remain open for future use (ifx_close() will not close links established by ifx_pconnect()).

    This type of links is therefore called 'persistent'.

    See also: ifx_connect().

    ifx_close

    ifx_close -- Informix connection을 닫는다.

    Description

    int ifx_close (int [link_identifier] );

    Returns: always true.

    ifx_close() closes the link to an Informix database that's associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed.

    Note that this isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution.

    ifx_close() will not close persistent links generated by ifx_pconnect().

    See also: ifx_connect(), and ifx_pconnect().

    Example 1. Closing a Informix connection

      1 
      2 $conn_id = ifx_connect ("mydb@ol_srv", "itsme", "mypassword");
      3 ... some queries and stuff ...
      4 ifx_close($conn_id);
      5       

    ifx_query

    ifx_query -- Informix 질의를 전송한다.

    Description

    int ifx_query (string query, int [link_identifier] , int [cursor_type] , mixed [blobidarray] );

    Returns: A positive Informix result identifier on success, or false on error.

    An integer "result_id" used by other functions to retrieve the query results. Sets "affected_rows" for retrieval by the ifx_affected_rows() function.

    ifx_query() sends a query to the currently active database on the server that's associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed. If no link is open, the function tries to establish a link as if ifx_connect() was called, and use it.

    Executes query on connection conn_id. For "select-type" queries a cursor is declared and opened. The optional cursor_type parameter allows you to make this a "scroll" and/or "hold" cursor. It's a mask and can be either IFX_SCROLL, IFX_HOLD, or both or'ed together. Non-select queries are "execute immediate".

    For either query type the number of (estimated or real) affected rows is saved for retrieval by ifx_affected_rows().

    If you have BLOB (BYTE or TEXT) columns in an update query, you can add a blobidarray parameter containing the corresponding "blob ids", and you should replace those columns with a "?" in the query text.

    If the contents of the TEXT (or BYTE) column allow it, you can also use "ifx_textasvarchar(1)" and "ifx_byteasvarchar(1)". This allows you to treat TEXT (or BYTE) columns just as if they were ordinary (but long) VARCHAR columns for select queries, and you don't need to bother with blob id's.

    With ifx_textasvarchar(0) or ifx_byteasvarchar(0) (the default situation), select queries will return BLOB columns as blob id's (integer value). You can get the value of the blob as a string or file with the blob functions (see below).

    See also: ifx_connect().

    Example 1. Show all rows of the "orders" table as a html table

      1 
      2 ifx_textasvarchar(1);      // use "text mode" for blobs
      3 $res_id = ifx_query("select * from orders", $conn_id);
      4 if (! $res_id) {
      5     printf("Can't select orders : %s\n<br>%s<br>\n", ifx_error());
      6     ifx_errormsg();
      7     die;
      8 }
      9 ifx_htmltbl_result($res_id, "border=\"1\"");
     10 ifx_free_result($res_id);
     11       

    Example 2. Insert some values into the "catalog" table

      1 
      2                       // create blob id's for a byte and text column
      3 $textid = ifx_create_blob(0, 0, "Text column in memory");
      4 $byteid = ifx_create_blob(1, 0, "Byte column in memory");
      5                       // store blob id's in a blobid array
      6 $blobidarray[] = $textid;
      7 $blobidarray[] = $byteid;
      8                       // launch query
      9 $query = "insert into catalog (stock_num, manu_code, " .
     10          "cat_descr,cat_picture) values(1,'HRO',?,?)";
     11 $res_id = ifx_query($query, $conn_id, $blobidarray);
     12 if (! $res_id) {
     13   ... error ...
     14 }
     15                      // free result id
     16 ifx_free_result($res_id);
     17       

    ifx_prepare

    ifx_prepare -- 실행을 위한 SQL문을 준비한다.

    Description

    int ifx_prepare (string query, int conn_id [, int cursor_def, mixed blobidarray])

    Returns a integer result_id for use by ifx_do(). Sets affected_rows for retrieval by the ifx_affected_rows() function.

    Prepares query on connection conn_id. For "select-type" queries a cursor is declared and opened. The optional cursor_type parameter allows you to make this a "scroll" and/or "hold" cursor. It's a mask and can be either IFX_SCROLL, IFX_HOLD, or both or'ed together.

    For either query type the estimated number of affected rows is saved for retrieval by ifx_affected_rows().

    If you have BLOB (BYTE or TEXT) columns in the query, you can add a blobidarray parameter containing the corresponding "blob ids", and you should replace those columns with a "?" in the query text.

    If the contents of the TEXT (or BYTE) column allow it, you can also use "ifx_textasvarchar(1)" and "ifx_byteasvarchar(1)". This allows you to treat TEXT (or BYTE) columns just as if they were ordinary (but long) VARCHAR columns for select queries, and you don't need to bother with blob id's.

    With ifx_textasvarchar(0) or ifx_byteasvarchar(0) (the default situation), select queries will return BLOB columns as blob id's (integer value). You can get the value of the blob as a string or file with the blob functions (see below).

    See also: ifx_do().

    ifx_do

    ifx_do -- 이전에 준비된 SQL문을 실행한다.

    Description

    int ifx_do (int result_id);

    Returns TRUE on success, FALSE on error.

    Executes a previously prepared query or opens a cursor for it.

    Does NOT free result_id on error.

    Also sets the real number of ifx_affected_rows() for non-select statements for retrieval by ifx_affected_rows()

    See also: ifx_prepare(). There is a example.

    ifx_error

    ifx_error -- 마지막에 수행한 Informix 명령의 에러 코드를 돌려준다.

    Description

    string ifx_error (void);

    The Informix error codes (SQLSTATE & SQLCODE) formatted as follows :

    x [SQLSTATE = aa bbb SQLCODE=cccc]

    If the "x" character is anything other than space, SQLSTATE and SQLCODE describe the error in more detail.

    See the Informix manual for the description of SQLSTATE and SQLCODE

    Returns in a string one character describing the general results of a statement and both SQLSTATE and SQLCODE associated with the most recent SQL statement executed. The format of the string is "(char) [SQLSTATE=(two digits) (three digits) SQLCODE=(one digit)]". The first character can be ' ' (space) (success), 'W' (the statement caused some warning), 'E' (an error happened when executing the statement) or 'N' (the statement didn't return any data).

    See also: ifx_errormsg()

    ifx_errormsg

    ifx_errormsg -- 마지막에 수행한 Informix 명령의 에러 메세지를 돌려준다.

    Description

    string ifx_errormsg (int [errorcode]);

    Returns the Informix error message associated with the most recent Informix error, or, when the optional "errorcode" param is present, the error message corresponding to "errorcode".

    See also: ifx_error()

      1 
      2 printf("%s\n<br>", ifx_errormsg(-201));
      3      

    ifx_affected_rows

    ifx_affected_rows -- 질의에 영향을 받는 row의 개수를 구한다.

    Description

    int ifx_affected_rows (int result_id)

    result_id is a valid result id returned by ifx_query() or ifx_prepare().

    Returns the number of rows affected by a query associated with result_id.

    For inserts, updates and deletes the number is the real number (sqlerrd[2]) of affected rows. For selects it is an estimate (sqlerrd[0]). Don't rely on it.

    Useful after ifx_prepare() to limit queries to reasonable result sets.

    See also: ifx_num_rows()

    Example 1. Informix affected rows

      1 
      2 $rid = ifx_prepare ("select * from emp 
      3                      where name like " . $name, $connid);
      4 if (! $rid) {
      5     ... error ...
      6 }
      7 $rowcount = ifx_affected_rows ($rid);
      8 if ($rowcount > 1000) {
      9     printf ("Too many rows in result set (%d)\n<br>", $rowcount);
     10     die ("Please restrict your query<br>\n");
     11 }
     12      

    ifx_getsqlca

    ifx_getsqlca -- 질의 후 sqlca.sqlerrd[0..5]의 내용을 구한다.

    Description

    array ifx_getsqlca (int result_id);

    result_id is a valid result id returned by ifx_query() or ifx_prepare().

    Returns a pseudo-row (assiociative arry) with sqlca.sqlerrd[0] to sqlca.sqlerrd[5] after the query associated with result_id.

    For inserts, updates and deletes the values returned are those as set by the server after executing the query. This gives access to the number of affected rows and the serial insert value. For selects the values are those saved after the prepare statement. This gives access to the estimated number of affected rows. The use of this function saves the overhead of executing a "select dbinfo('sqlca.sqlerrdx')" query, as it retrieves the values that were saved by the ifx driver at the appropriate moment.

    Example 1. Retrieve Informix sqlca.sqlerrd[x] values

      1 
      2 /* assume the first column of 'sometable' is a serial */
      3 $qid = ifx_query("insert into sometable 
      4                   values (0, '2nd column', 'another column' ", $connid);
      5 if (! $qid) {
      6     ... error ...
      7 }
      8 $sqlca = ifx_getsqlca ($qid);
      9 $serial_value = $sqlca["sqlerrd1"];
     10 echo "The serial value of the inserted row is : " . $serial_value<br>\n"; 
     11      

    ifx_fetch_row

    ifx_fetch_row -- row를 배열(enumerated array)로 가져온다.

    Description

    array ifx_fetch_row (int result_id [, mixed position])

    Returns an associative array that corresponds to the fetched row, or false if there are no more rows.

    Blob columns are returned as integer blob id values for use in ifx_get_blob() unless you have used ifx_textasvarchar(1) or ifx_byteasvarchar(1), in which case blobs are returned as string values. Returns FALSE on error

    result_id is a valid resultid returned by ifx_query() or ifx_prepare() (select type queries only!).

    [position] is an optional parameter for a "fetch" operation on "scroll" cursors: "NEXT", "PREVIOUS", "CURRENT", "FIRST", "LAST" or a number. If you specify a number, an "absolute" row fetch is executed. This parameter is optional, and only valid for scrollcursors.

    ifx_fetch_row() fetches one row of data from the result associated with the specified result identifier. The row is returned as an array. Each result column is stored in an array offset, starting at offset 0.

    Subsequent call to ifx_fetch_row() would return the next row in the result set, or false if there are no more rows.

    Example 1. Informix fetch rows

      1 
      2 $rid = ifx_prepare ("select * from emp where name like " . $name,
      3                      $connid, IFX_SCROLL);
      4 if (! $rid) {
      5     ... error ...
      6 }
      7 $rowcount = ifx_affected_rows($rid);
      8 if ($rowcount > 1000) {
      9     printf ("Too many rows in result set (%d)\n<br>", $rowcount);
     10     die ("Please restrict your query<br>\n");
     11 }
     12 if (! ifx_do ($rid)) {
     13    ... error ...
     14 }
     15 $row = ifx_fetch_row ($rid, "NEXT");
     16 while (is_array($row)) {
     17     for(reset($row); $fieldname=key($row); next($row)) {
     18         $fieldvalue = $row[$fieldname];
     19         printf ("%s = %s,", $fieldname, $fieldvalue);
     20     }
     21     printf("\n<br>");
     22     $row = ifx_fetch_row ($rid, "NEXT");
     23 }
     24 ifx_free_result ($rid);
     25      

    ifx_htmltbl_result

    ifx_htmltbl_result -- 질의의 모든 결과 row를 HTML table 모양으로 출력한다.

    Description

    int ifx_htmltbl_result (int result_id [, string html_table_options])

    Returns the number of rows fetched or FALSE on error.

    Formats all rows of the result_id query into a html table. The optional second argument is a string of <table> tag options

    Example 1. Informix results as HTML table

      1 
      2 $rid = ifx_prepare ("select * from emp where name like " . $name,
      3                      $connid, IFX_SCROLL);
      4 if (! $rid) {
      5    ... error ...
      6 }
      7 $rowcount = ifx_affected_rows ($rid);
      8 if ($rowcount > 1000) {
      9     printf ("Too many rows in result set (%d)\n<br>", $rowcount);
     10     die ("Please restrict your query<br>\n");
     11 }
     12 if (! ifx_do($rid) {
     13   ... error ...
     14 }
     15 
     16 ifx_htmltbl_result ($rid, "border=\"2\"");
     17 
     18 ifx_free_result($rid);
     19      

    ifx_fieldtypes

    ifx_fieldtypes -- Informix SQL 필드들을 list한다.

    Description

    array ifx_fieldtypes (int result_id)

    Returns an associative array with fieldnames as key and the SQL fieldtypes as data for query with result_id. Returns FALSE on error.

    Example 1. Fielnames and SQL fieldtypes

      1 
      2 $types = ifx_fieldtypes ($resultid);
      3 if (! isset ($types)) {
      4   ... error ...
      5 }
      6 for ($i = 0; $i < count($types); $i++) {
      7     $fname = key($types);
      8     printf("%s :\t type =  %s\n", $fname, $types[$fname]);
      9     next($types);
     10 }
     11      

    ifx_fieldproperties

    ifx_fieldproperties -- SQL 필드 특성을 list 한다.

    Description

    array ifx_fieldproperties (int result_id)

    Returns an associative array with fieldnames as key and the SQL fieldproperties as data for a query with result_id. Returns FALSE on error.

    Returns the Informix SQL fieldproperies of every field in the query as an associative array. Properties are encoded as: "SQLTYPE;length;precision;scale;ISNULLABLE" where SQLTYPE = the Informix type like "SQLVCHAR" etc. and ISNULLABLE = "Y" or "N".

    Example 1. Informix SQL fieldproperties

      1 
      2 $properties = ifx_fieldtypes ($resultid);
      3 if (! isset($properties)) {
      4   ... error ...
      5 }
      6 for ($i = 0; $i < count($properties); $i++) {
      7     $fname = key ($properties);
      8     printf ("%s:\t type =  %s\n", $fname, $properties[$fname]);
      9     next ($properties);
     10 }
     11      

    ifx_num_fields

    ifx_num_fields -- 질의의 컬럼 개수를 구한다.

    Description

    int ifx_num_fields (int result_id);

    Returns the number of columns in query for result_id or FALSE on error

    After preparing or executing a query, this call gives you the number of columns in the query.

    ifx_num_rows

    ifx_num_rows -- 질의 결과의 row 개수

    Description

    int ifx_num_rows (int result_id);

    Gives the number of rows fetched so far for a query with result_id after a ifx_query() or ifx_do() query.

    ifx_free_result

    ifx_free_result -- 질의에 사용된 자원을 풀어준다.

    Description

    int ifx_free_result (int result_id);

    Releases resources for the query associated with result_id. Returns FALSE on error.

    ifx_create_char

    ifx_create_char -- char object를 만든다.

    Description

    int ifx_create_char (string param);

    Creates an char object. param should be the char content.

    ifx_free_char

    ifx_free_char -- char object를 삭제한다.

    Description

    int ifx_free_char (int bid);

    Deletes the charobject for the given char object-id bid. Returns FALSE on error otherwise TRUE.

    ifx_update_char

    ifx_update_char -- char object의 내용을 수정한다.

    Description

    int ifx_update_char (int bid, string content);

    Updates the content of the char object for the given char object bid. content is a string with new data. Returns FALSE on error otherwise TRUE.

    ifx_get_char

    ifx_get_char -- char object의 내용을 반환한다.

    Description

    int ifx_get_char (int bid);

    Returns the content of the char object for the given char object-id bid.

    ifx_create_blob

    ifx_create_blob -- blob object를 만든다.

    Description

    int ifx_create_blob (int type, int mode, string param);

    Creates an blob object.

    type: 1 = TEXT, 0 = BYTE

    mode: 0 = blob-object holds the content in memory, 1 = blob-object holds the content in file.

    param: if mode = 0: pointer to the content, if mode = 1: pointer to the filestring.

    Return FALSE on error, otherwise the new blob object-id.

    ifx_copy_blob

    ifx_copy_blob -- 주어진 blob object의 사본을 만든다.

    Description

    int ifx_copy_blob (int bid);

    Duplicates the given blob object. bid is the ID of the blob object.

    Returns FALSE on error otherwise the new blob object-id.

    ifx_free_blob

    ifx_free_blob -- blob object를 삭제한다.

    Description

    int ifx_free_blob (int bid);

    Deletes the blobobject for the given blob object-id bid. Returns FALSE on error otherwise TRUE.

    ifx_get_blob

    ifx_get_blob -- blob object의 내용을 반환한다.

    Description

    int ifx_get_blob (int bid);

    Returns the content of the blob object for the given blob object-id bid.

    ifx_update_blob

    ifx_update_blob -- blob object의 내용을 수정한다.

    Description

    ifx_update_blob (int bid, string content);

    Updates the content of the blob object for the given blob object bid. content is a string with new data. Returns FALSE on error otherwise TRUE.

    ifx_blobinfile_mode

    ifx_blobinfile_mode -- select 질의에서 사용되는 기본(default) blob mode를 설정한다.

    Description

    void ifx_blobinfile_mode (int mode);

    Set the default blob mode for all select queries. Mode "0" means save Byte-Blobs in memory, and mode "1" means save Byte-Blobs in a file.

    ifx_textasvarchar

    ifx_textasvarchar -- select 질의에서 사용되는 기본(default) text mode를 설정한다.

    Description

    void ifx_textasvarchar (int mode);

    Sets the default text mode for all select-queries. Mode "0" will return a blob id, and mode "1" will return a varchar with text content.

    ifx_byteasvarchar

    ifx_byteasvarchar -- select 질의에서 사용되는 기본(default) byte mode를 설정한다.

    Description

    void ifx_byteasvarchar (int mode);

    Sets the default byte mode for all select-queries. Mode "0" will return a blob id, and mode "1" will return a varchar with text content.

    ifx_nullformat

    ifx_nullformat -- row를 가져올 때 사용할 결과값의 기본 형태를 정한다.

    Description

    void ifx_nullformat (int mode);

    Sets the default return value of a NULL-value on a fetch row. Mode "0" returns "", and mode "1" returns "NULL".

    ifxus_create_slob

    ifxus_create_slob -- slob object를 만들고, 그것을 연다.

    Description

    int ifxus_create_slob (int mode);

    Creates an slob object and opens it. Modes: 1 = LO_RDONLY, 2 = LO_WRONLY, 4 = LO_APPEND, 8 = LO_RDWR, 16 = LO_BUFFER, 32 = LO_NOBUFFER -> or-mask. You can also use constants named IFX_LO_RDONLY, IFX_LO_WRONLY etc. Return FALSE on error otherwise the new slob object-id.

    ifx_free_slob

    ifx_free_slob -- slob object를 삭제한다.

    Description

    int ifxus_free_slob (int bid);

    Deletes the slob object. bid is the Id of the slob object. Returns FALSE on error otherwise TRUE.

    ifxus_close_slob

    ifxus_close_slob -- slob object를 삭제한다.

    Description

    int ifxus_close_slob (int bid);

    Deletes the slob object on the given slob object-id bid. Return FALSE on error otherwise TRUE.

    ifxus_open_slob

    ifxus_open_slob -- slob object를 연다.

    Description

    int ifxus_open_slob (long bid, int mode);

    Opens an slob object. bid should be an existing slob id. Modes: 1 = LO_RDONLY, 2 = LO_WRONLY, 4 = LO_APPEND, 8 = LO_RDWR, 16 = LO_BUFFER, 32 = LO_NOBUFFER -> or-mask. Returns FALSE on error otherwise the new slob object-id.

    ifxus_tell_slob

    ifxus_tell_slob -- 현재 파일이나 seek 위치를 반환한다.

    Description

    int ifxus_tell_slob (long bid);

    Returns the current file or seek position of an open slob object bid should be an existing slob id. Return FALSE on error otherwise the seek position.

    ifxus_seek_slob

    ifxus_seek_slob -- 현재 파일이나 seek 위치를 설정한다.

    Description

    int ifxus_seek_slob (long bid, int mode, long offset);

    Sets the current file or seek position of an open slob object. bid should be an existing slob id. Modes: 0 = LO_SEEK_SET, 1 = LO_SEEK_CUR, 2 = LO_SEEK_END and offset is an byte offset. Return FALSE on error otherwise the seek position.

    ifxus_read_slob

    ifxus_read_slob -- slob object의 nbytes를 읽는다.of the

    Description

    int ifxus_read_slob (long bid, long nbytes);

    Reads nbytes of the slob object. bid is a existing slob id and nbytes is the number of bytes zu read. Return FALSE on error otherwise the string.

    ifxus_write_slob

    ifxus_write_slob -- slob object에 문자열을 써 넣는다.

    Description

    int ifxus_write_slob (long bid, string content);

    Writes a string into the slob object. bid is a existing slob id and content the content to write. Return FALSE on error otherwise bytes written.


    XXX. InterBase functions

    InterBase는 Borland/Inprise에서 출시된 대중적인 데이터베이스이다. InterBase에 대한 자세한 정보는 http://www.interbase.com/에서 찾아보기바란다. 참고로 InterBase는 오픈 소스 운동에 참여하고 있다.

    Note: PHP4에서는 InterBase 6 에 대한 완전한 지원이 추가되었다.

    Table of Contents
    ibase_connect … Open a connection to an InterBase database
    ibase_pconnect … Open a connection to an InterBase database
    ibase_close … Close a connection to an InterBase database
    ibase_query … Execute a query on an InterBase database
    ibase_fetch_row … Fetch a row from an InterBase database
    ibase_fetch_object … Get an object from a InterBase database
    ibase_free_result … Free a result set
    ibase_prepare … Prepare a query for later binding of parameter placeholders and execution
    ibase_execute … Execute a previously prepared query
    ibase_free_query … Free memory allocated by a prepared query
    ibase_timefmt … Sets the format of timestamp, date and time type columns returned from queries
    ibase_num_fields … Get the number of fields in a result set

    ibase_connect

    ibase_connect -- InterBase 데이터베이스로의 연결을 연다.

    Description

    int ibase_connect (string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])

    Establishes a connection to an InterBase server. The database argument has to be a valid path to database file on the server it resides on. If the server is not local, it must be prefixed with either 'hostname:' (TCP/IP), '//hostname/' (NetBEUI) or 'hostname@' (IPX/SPX), depending on the connection protocol used. username and password can also be specified with PHP configuration directives ibase.default_user and ibase.default_password. charset is the default character set for a database. buffers is the number of database buffers to allocate for the server-side cache. If 0 or omitted, server chooses its own default. dialect selects the default SQL dialect for any statement executed within a connection, and it defaults to the highest one supported by client libraries.

    In case a second call is made to ibase_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned. The link to the server will be closed as soon as the execution of the script ends, unless it's closed earlier by explicitly calling ibase_close().

    Example 1. Ibase_connect() example

      1 
      2 <?php
      3     $dbh = ibase_connect ($host, $username, $password);
      4     $stmt = 'SELECT * FROM tblname';
      5     $sth = ibase_query ($dbh, $stmt);
      6     while ($row = ibase_fetch_object ($sth)) {
      7         print $row->email . "\n";
      8     }
      9     ibase_close ($dbh);
     10 ?>
     11       

    Note: buffers was added in PHP4-RC2.

    Note: dialect was added in PHP4-RC2. It is functional only with InterBase 6 and versions higher than that.

    Note: role was added in PHP4-RC2. It is functional only with InterBase 5 and versions higher than that.

    See also: ibase_pconnect().

    ibase_pconnect

    ibase_pconnect -- InterBase 데이터베이스로의 영구적인(persistent) 연결을 연다.

    Description

    int ibase_connect (string database [, string username [, string password [, string charset [, string role]]]])

    ibase_pconnect() acts very much like ibase_connect() with two major differences. First, when connecting, the function will first try to find a (persistent) link that's already opened with the same parameters. If one is found, an identifier for it will be returned instead of opening a new connection. Second, the connection to the InterBase server will not be closed when the execution of the script ends. Instead, the link will remain open for future use (ibase_close() will not close links established by ibase_pconnect()). This type of link is therefore called 'persistent'.

    See also ibase_connect() for the meaning of parameters passed to this function. They are exactly the same.

    ibase_close

    ibase_close -- InterBase 데이터베이스와의 연결을 닫는다.

    Description

    int ibase_close ([int connection_id])

    Closes the link to an InterBase database that's associated with a connection id returned from ibase_connect(). If the connection id is omitted, the last opened link is assumed. Default transaction on link is committed, other transactions are rolled back.

    ibase_query

    ibase_query -- InterBase 데이터베이스의 질의를 수행한다.

    Description

    int ibase_query ([int link_identifier, string query [, int bind_args]])

    Performs a query on an InterBase database, returning a result identifier for use with ibase_fetch_row(), ibase_fetch_object(), ibase_free_result() and ibase_free_query().

    Note: Although this function supports variable binding to parameter placeholders, there is not very much meaning using this capability with it. For real life use and an example, see ibase_prepare() and ibase_execute().

    ibase_fetch_row

    ibase_fetch_row -- InterBase 데이터베이스로부터 한 레코드(row)를 가져온다.

    Description

    array ibase_fetch_row (int result_identifier)

    Returns the next row specified by the result identifier obtained using the ibase_query().

    ibase_fetch_object

    (PHP3 >= 3.0.7, PHP4 >= 4.0RC1)

    ibase_fetch_object -- Get an object from a InterBase database

    Description

    object ibase_fetch_object (int result_id)

    Fetches a row as a pseudo-object from a result_id obtained either by ibase_query() or ibase_execute().

      1 
      2 <php
      3     $dbh = ibase_connect ($host, $username, $password);
      4     $stmt = 'SELECT * FROM tblname';
      5     $sth = ibase_query ($dbh, $stmt);
      6     while ($row = ibase_fetch_object ($sth)) {
      7         print $row->email . "\n";
      8     }
      9     ibase_close ($dbh);
     10 ?>
     11       

    See also ibase_fetch_row().

    ibase_free_result

    ibase_free_result -- result set을 해제한다.

    Description

    int ibase_free_result (int result_identifier)

    Free's a result set the has been created by ibase_query().

    ibase_prepare

    ibase_prepare -- 파라메터를 바인딩하고 실행하기 위한 질의를 준비한다.

    Description

    int ibase_prepare ([int link_identifier, string query])

    Prepare a query for later binding of parameter placeholders and execution (via ibase_execute()).

    ibase_execute

    ibase_execute -- 미리 준비된 질의를 수행한다.

    Description

    int ibase_execute (int query [, int bind_args])

    Execute a query prepared by ibase_prepare(). This is a lot more effective than using ibase_query() if you are repeating a same kind of query several times with only some parameters changing.

      1 
      2 <?php
      3     $updates = array(
      4         1 => 'Eric',
      5         5 => 'Filip',
      6         7 => 'Larry'
      7     );
      8 
      9     $query = ibase_prepare("UPDATE FOO SET BAR = ? WHERE BAZ = ?");
     10 
     11     while (list($baz, $bar) = each($updates)) {
     12         ibase_execute($query, $bar, $baz);
     13     }
     14 ?>
     15       

    ibase_free_query

    ibase_free_query -- 질의를 준비하는데 사용된 메모리를 해제한다.

    Description

    int ibase_free_query (int query)

    Free a query prepared by ibase_prepare().

    ibase_timefmt

    ibase_timefmt -- 질의 결과중 timestamp나 날짜와 시간 형태의 칼럼이 출력될 형태를 정한다.

    Description

    int ibase_timefmt (string format [, int columntype])

    Sets the format of timestamp, date or time type columns returned from queries. Internally, the columns are formatted by c-function strftime(), so refer to it's documentation regarding to the format of the string. columntype is one of the constants IBASE_TIMESTAMP, IBASE_DATE and IBASE_TIME. If omitted, defaults to IBASE_TIMESTAMP for backwards compatibility.

      1 
      2 <?php
      3     // InterBase 6 TIME-type columns will be returned in
      4     // the form '05 hours 37 minutes'. 
      5     ibase_timefmt("%H hours %M minutes", IBASE_TIME);
      6 ?>
      7       

    You can also set defaults for these formats with PHP configuration directives ibase.timestampformat, ibase.dateformat and ibase.timeformat.

    Note: columntype was added in PHP 4.0. It has any meaning only with InterBase version 6 and higher.

    Note: A backwards incompatible change happened in PHP 4.0 when PHP configuration directive ibase.timeformat was renamed to ibase.timestampformat and directives ibase.dateformat and ibase.timeformat were added, so that the names would match better their functionality.

    ibase_num_fields

    (PHP3 >= 3.0.7, PHP4 >= 4.0RC1)

    ibase_num_fields -- 질의 결과(result set)의 필드 개수를 구한다.

    Description

    int ibase_num_fields (int result_id)

    Returns an integer containing the number of fields in a result set.

      1 
      2 <?php
      3     $dbh = ibase_connect ($host, $username, $password);
      4     $stmt = 'SELECT * FROM tblname';
      5     $sth = ibase_query ($dbh, $stmt);
      6 
      7     if (ibase_num_fields($sth) > 0) {
      8         while ($row = ibase_fetch_object ($sth)) {
      9             print $row->email . "\n";
     10         }
     11     } else {
     12         die ("No Results were found for your query");
     13     }
     14 
     15     ibase_close ($dbh);
     16 ?>
     17       

    See also: ibase_field_info().

    Note: Ibase_num_fields() is currently not functional in PHP4.


    XXXI. LDAP functions

    Introduction to LDAP

    LDAP은 Lightweight Directory Access Protocol의 약자로, "Directory Servers"에 접근하는데 사용되는 프로토콜이다. Directory 라는 것은 트리 구조를 가지고 정보를 저장하는 특별한 종류의 Database라고 할 수 있다.

    기본 개념은 하드디스크의 디렉토리 구조와 비슷하다. 다른 점은 root 디렉토리가 "world(지구 전체)"이고, 첫 번째 레벨이 "국가들", 그 이하의 레벨이 회사나, 각종 조직, 장소 등이 된다는 점이다. 그 이하로 계속 내려가다 보면 특정인이나 설비, 문서 등의 항목까지도 내려갈 수 있다.

    하드디스크의 subdirectory에 있는 파일을 참조할 때 보통 다음과 같이 사용한다. :

    이 파일 레퍼런스의 각부분은 슬래시(/) 기호로 구분되고, 읽는 순서는 왼쪽에서 오른쪽으로 읽어나간다.

    LDAP에서 파일 레퍼런스와 같은 것은 보통 "dn"으로 표시되는 "distinguished name"이다. dn의 예는 다음과 같다. :

    레퍼런스의 각 부분은 쉼표(,)로 구분되고, 오른쪽에서 왼쪽의 순서로 읽는다. 여러분은 이 dn을 다음과 같은 의미로 읽는다. :

    하드디스크에서 여러분이 디렉토리 구성을 어떻게 하는가에 대한 특별한 규칙이 없듯이, 디렉토리 서버의 관리도 목적에 따라 의미있게 구성된다면 어떤 모습을 하고 있어도 상관없다. 하지만, 사용되고 있는 약간의 관습이 있다. 그 메시지는 여러분이 데이타베이스에 어떤 정보가 사용가능한지 알지 못한다면 그 데이터베이스를 사용할 수 없듯이, 여러분이 디렉토리 구조에 대해 알지 못한다면 여러분은 그 디렉토리 서버에 접근하기 위한 코드를 만들 수 없다는 것이다.


    예제 (Complete code example)

    디렉토리 서버에서 "S"로 시작하는 성을 가진 항목에 대한 정보를 검색하고, 이름과 email 주소를 출력한다.

    Example 1. LDAP search example

      1 
      2 <?php
      3 // basic sequence with LDAP is connect, bind, search, interpret search
      4 // result, close connection
      5 
      6 echo "<h3>LDAP query test</h3>";
      7 echo "Connecting ...";
      8 $ds=ldap_connect("localhost");  // must be a valid LDAP server!
      9 echo "connect result is ".$ds."<p>";
     10 
     11 if ($ds) { 
     12     echo "Binding ..."; 
     13     $r=ldap_bind($ds);     // this is an "anonymous" bind, typically
     14                            // read-only access echo "Bind result is
     15     echo "Bind result is ".$r."<p>";
     16 
     17     echo "Searching for (sn=S*) ...";
     18     // Search surname entry
     19     $sr=ldap_search($ds,"o=My Company, c=US", "sn=S*");  
     20     echo "Search result is ".$sr."<p>";
     21 
     22     echo "Number of entires returned is ".ldap_count_entries($ds,$sr)."<p>";
     23 
     24     echo "Getting entries ...<p>";
     25     $info = ldap_get_entries($ds, $sr);
     26     echo "Data for ".$info["count"]." items returned:<p>";
     27 
     28     for ($i=0; $i<$info["count"]; $i++) {
     29         echo "dn is: ". $info[$i]["dn"] ."<br>";
     30         echo "first cn entry is: ". $info[$i]["cn"][0] ."<br>";
     31         echo "first email entry is: ". $info[$i]["mail"][0] ."<p>";
     32     }
     33 
     34     echo "Closing connection";
     35     ldap_close($ds);
     36 
     37 } else {
     38     echo "<h4>Unable to connect to LDAP server</h4>";
     39 }
     40 ?>
     41 


    PHP에서 LDAP 호출 사용하기 (Using the PHP LDAP calls)

    여러분은 University of Michigan ldap-3.3 package나 Netscape Directory SDK같은 LDAP client libraries를 얻어서 컴파일할 필요하 있다. 또한 PHP를 LDAP지원으로 다시 컴파일할 필요가 있다.

    LDAP 호출을 사용하기 전에 여러분은 다음과 같은 것을 알고 있어야 한다.

    여러분이 application을 작성할 때 사용할 전형적인 LDAP 호출은 다음의 형식을 따른다. :

      ldap_connect()    // 서버에 connection을 만든다.
         |
      ldap_bind()       // 익명(anonymous)이나 인증된 "login"
         |
      디렉토리의 검색이나 수정 같은 작업을 하고 결과를 출력한다.
         |
      ldap_close()      // "logout"


    More Information

    LDAP에 관한 자세한 자료는 다음 사이트에 가 보자.

    Netscape SDK에는 Programmer's Guide가 .html 형태로 있습니다.


    Table of Contents
    ldap_add … Add entries to LDAP directory
    ldap_mod_add … Add attribute values to current attributes
    ldap_mod_del … Delete attribute values from current attributes
    ldap_mod_replace … Replace attribute values with new ones
    ldap_bind … Bind to LDAP directory
    ldap_close … Close link to LDAP server
    ldap_connect … Connect to an LDAP server
    ldap_count_entries … Count the number of entries in a search
    ldap_delete … Delete an entry from a directory
    ldap_dn2ufn … Convert DN to User Friendly Naming format
    ldap_explode_dn … Splits DN into its component parts
    ldap_first_attribute … Return first attribute
    ldap_first_entry … Return first result id
    ldap_free_result … Free result memory
    ldap_get_attributes … Get attributes from a search result entry
    ldap_get_dn … Get the DN of a result entry
    ldap_get_entries … Get all result entries
    ldap_get_values … Get all values from a result entry
    ldap_get_values_len … Get all binary values from a result entry
    ldap_list … Single-level search
    ldap_modify … Modify an LDAP entry
    ldap_next_attribute … Get the next attribute in result
    ldap_next_entry … Get next result entry
    ldap_read … Read an entry
    ldap_search … Search LDAP tree
    ldap_unbind … Unbind from LDAP directory
    ldap_err2str … Convert LDAP error number into string error message
    ldap_errno … Return the LDAP error number of the last LDAP command
    ldap_error … Return the LDAP error message of the last LDAP command

    ldap_add

    ldap_add -- LDAP directory에 entry를 추가한다.

    Description

    int ldap_add (int link_identifier, string dn, array entry)

    returns true on success and false on error.

    The ldap_add() function is used to add entries in the LDAP directory. The DN of the entry to be added is specified by dn. Array entry specifies the information about the entry. The values in the entries are indexed by individual attributes. In case of multiple values for an attribute, they are indexed using integers starting with 0.

        entry["attribute1"] = value
        entry["attribute2"][0] = value1
        entry["attribute2"][1] = value2

    Example 1. Complete example with authenticated bind

      1 
      2 <?php
      3 $ds=ldap_connect("localhost");  // assuming the LDAP server is on this host
      4 
      5 if ($ds) {
      6     // bind with appropriate dn to give update access
      7     $r=ldap_bind($ds,"cn=root, o=My Company, c=US", "secret");
      8 
      9     // prepare data
     10     $info["cn"]="John Jones";
     11     $info["sn"]="Jones";
     12     $info["mail"]="jonj@here.and.now";
     13     $info["objectclass"]="person";
     14 
     15     // add data to directory
     16     $r=ldap_add($ds, "cn=John Jones, o=My Company, c=US", $info);
     17 
     18     ldap_close($ds);
     19 } else {
     20     echo "Unable to connect to LDAP server"; 
     21 }
     22 ?>
     23 

    ldap_mod_add

    ldap_mod_add -- 현재 속성에 특정 속성값을 더한다.

    Description

    int ldap_mod_add (int link_identifier, string dn, array entry);

    returns true on success and false on error.

    This function adds attribute(s) to the specified dn. It performs the modification at the attribute level as opposed to the object level. Object-level additions are done by the ldap_add() function.

    ldap_mod_del

    ldap_mod_del -- 현재 속성에 특정 속성값을 뺀다.

    Description

    int ldap_mod_del (int link_identifier, string dn, array entry);

    returns true on success and false on error.

    This function removes attribute(s) from the specified dn. It performs the modification at the attribute level as opposed to the object level. Object-level deletions are done by the ldap_del() function.

    ldap_mod_replace

    ldap_mod_replace -- 현재 속성값들을 새로운 값으로 바꾼다.

    Description

    int ldap_mod_replace (int link_identifier, string dn, array entry);

    returns true on success and false on error.

    This function replaces attribute(s) from the specified dn. It performs the modification at the attribute level as opposed to the object level. Object-level modifications are done by the ldap_modify() function.

    ldap_bind

    ldap_bind -- LDAP directory에 bind 한다.

    Description

    int ldap_bind (int link_identifier, string [bind_rdn], string [bind_password]);

    Binds to the LDAP directory with specified RDN and password. Returns true on success and false on error.

    ldap_bind() does a bind operation on the directory. bind_rdn and bind_password are optional. If not specified, anonymous bind is attempted.

    ldap_close

    ldap_close -- LDAP server와의 연결을 닫는다.

    Description

    int ldap_close (int link_identifier);

    Returns true on success, false on error.

    ldap_close() closes the link to the LDAP server that's associated with the specified link_identifier.

    This call is internally identical to ldap_unbind(). The LDAP API uses the call ldap_unbind(), so perhaps you should use this in preference to ldap_close().

    ldap_connect

    ldap_connect -- LDAP server와 연결한다.

    Description

    int ldap_connect ([string hostname [, int port]])

    Returns a positive LDAP link identifier on success, or false on error.

    ldap_connect() establishes a connection to a LDAP server on a specified hostname and port. Both the arguments are optional. If no arguments are specified then the link identifier of the already opened link will be returned. If only hostname is specified, then the port defaults to 389.

    ldap_count_entries

    ldap_count_entries -- 탐색 범위 안에 있는 entry의 개수

    Description

    int ldap_count_entries (int link_identifier, int result_identifier)

    Returns number of entries in the result or false on error.

    ldap_count_entries() returns the number of entries stored in the result of previous search operations. result_identifier identifies the internal ldap result.

    ldap_delete

    ldap_delete -- directory안의 한 entry를 삭제한다..

    Description

    int ldap_delete (int link_identifier, string dn)

    Returns true on success and false on error.

    ldap_delete() function delete a particular entry in LDAP directory specified by dn.

    ldap_dn2ufn

    ldap_dn2ufn -- DN을 User Friendly Naming 형식으로 변환한다.

    Description

    int ldap_delete (int link_identifier, string dn)

    Returns true on success and false on error.

    ldap_delete() function delete a particular entry in LDAP directory specified by dn.

    ldap_explode_dn

    ldap_explode_dn -- DN을 그것의 구성 부분으로 나눈다.

    Description

    array ldap_explode_dn (string dn, int with_attrib)

    ldap_explode_dn() function is used to split the a DN returned by ldap_get_dn() and breaks it up into its component parts. Each part is known as Relative Distinguished Name, or RDN. ldap_explode_dn() returns an array of all those components. with_attrib is used to request if the RDNs are returned with only values or their attributes as well. To get RDNs with the attributes (i.e. in attribute=value format) set with_attrib to 0 and to get only values set it to 1.

    ldap_first_attribute

    ldap_first_attribute -- 첫번째 속성을 반환한다.

    Description

    string ldap_first_attribute (int link_identifier, int result_entry_identifier, int ber_identifier)

    Returns the first attribute in the entry on success and false on error.

    Similar to reading entries, attributes are also read one by one from a particular entry. ldap_first_attribute() returns the first attribute in the entry pointed by the entry identifier. Remaining attributes are retrieved by calling ldap_next_attribute() successively. ber_identifier is the identifier to internal memory location pointer. It is passed by reference. The same ber_identifier is passed to the ldap_next_attribute() function, which modifies that pointer.

    see also ldap_get_attributes()

    ldap_first_entry

    ldap_first_entry -- 첫번째 result id를 반환한다.

    Description

    int ldap_first_entry (int link_identifier, int result_identifier)

    Returns the result entry identifier for the first entry on success and false on error.

    Entries in the LDAP result are read sequentially using the ldap_first_entry() and ldap_next_entry() functions. ldap_first_entry() returns the entry identifier for first entry in the result. This entry identifier is then supplied to lap_next_entry() routine to get successive entries from the result.

    see also ldap_get_entries().

    ldap_free_result

    ldap_free_result -- result memory를 풀어준다.

    Description

    int ldap_free_result (int result_identifier)

    Returns true on success and false on error.

    ldap_free_result() frees up the memory allocated internally to store the result and pointed by the result_identifier. All result memory will be automatically freed when the script terminates.

    Typically all the memory allocated for the ldap result gets freed at the end of the script. In case the script is making successive searches which return large result sets, ldap_free_result() could be called to keep the runtime memory usage by the script low.

    ldap_get_attributes

    ldap_get_attributes -- search result entry로부터 속성을 구한다.

    Description

    array ldap_get_attributes (int link_identifier, int result_entry_identifier)

    Returns a complete entry information in a multi-dimensional array on success and false on error.

    ldap_get_attributes() function is used to simplify reading the attributes and values from an entry in the search result. The return value is a multi-dimensional array of attributes and values.

    Having located a specific entry in the directory, you can find out what information is held for that entry by using this call. You would use this call for an application which "browses" directory entries and/or where you do not know the structure of the directory entries. In many applications you will be searching for a specific attribute such as an email address or a surname, and won't care what other data is held.

    return_value["count"] = number of attributes in the entry
    return_value[0] = first attribute
    return_value[n] = nth attribute

    return_value["attribute"]["count"] = number of values for attribute
    return_value["attribute"][0] = first value of the attribute
    return_value["attribute"][i] = ith value of the attribute

    Example 1. Show the list of attributes held for a particular directory entry

      1 
      2 // $ds is the link identifier for the directory
      3 
      4 // $sr is a valid search result from a prior call to
      5 // one of the ldap directory search calls
      6 
      7 $entry = ldap_first_entry($ds, $sr);
      8 
      9 $attrs = ldap_get_attributes($ds, $entry);
     10 
     11 echo $attrs["count"]." attributes held for this entry:<p>";
     12 
     13 for ($i=0; $i<$attrs["count"]; $i++)
     14     echo $attrs[$i]."<br>";
     15 

    see also ldap_first_attribute() and ldap_next_attribute()

    ldap_get_dn

    ldap_get_dn -- result entry의 DN을 구한다.

    Description

    string ldap_get_dn (int link_identifier, int result_entry_identifier)

    Returns the DN of the result entry and false on error.

    ldap_get_dn() function is used to find out the DN of an entry in the result.

    ldap_get_entries

    ldap_get_entries -- 모든 result entry들을 구한다.

    Description

    array ldap_get_entries (int link_identifier, int result_identifier)

    Returns a complete result information in a multi-dimenasional array on success and false on error.

    ldap_get_entries() function is used to simplify reading multiple entries from the result and then reading the attributes and multiple values. The entire information is returned by one function call in a multi-dimensional array. The structure of the array is as follows.

    The attribute index is converted to lowercase. (Attributes are case-insensitive for directory servers, but not when used as array indices)

    return_value["count"] = number of entries in the result
    return_value[0] : refers to the details of first entry

    return_value[i]["dn"] =  DN of the ith entry in the result

    return_value[i]["count"] = number of attributes in ith entry
    return_value[i][j] = jth attribute in the ith entry in the result

    return_value[i]["attribute"]["count"] = number of values for attribute in ith entry
    return_value[i]["attribute"][j] = jth value of attribute in ith entry

    see also ldap_first_entry() and ldap_next_entry()

    ldap_get_values

    ldap_get_values -- result entry로 부터 모든 값을 구한다.

    Description

    array ldap_get_values (int link_identifier, int result_entry_identifier, string attribute)

    Returns an array of values for the attribute on success and false on error.

    ldap_get_values() function is used to read all the values of the attribute in the entry in the result. entry is specified by the result_entry_identifier. The number of values can be found by indexing "count" in the resultant array. Individual values are accessed by integer index in the array. The first index is 0.

    This call needs a result_entry_identifier, so needs to be preceded by one of the ldap search calls and one of the calls to get an individual entry.

    You application will either be hard coded to look for certain attributes (such as "surname" or "mail") or you will have to use the ldap_get_attributes() call to work out what attributes exist for a given entry.

    LDAP allows more than one entry for an attribute, so it can, for example, store a number of email addresses for one person's directory entry all labeled with the attribute "mail"

    return_value["count"] = number of values for attribute
    return_value[0] = first value of attribute
    return_value[i] = ith value of attribute

    Example 1. List all values of the "mail" attribute for a directory entry

      1 
      2 // $ds is a valid link identifier for a directory server
      3 
      4 // $sr is a valid search result from a prior call to
      5 //     one of the ldap directory search calls
      6 
      7 // $entry is a valid entry identifier from a prior call to
      8 //        one of the calls that returns a directory entry
      9 
     10 $values = ldap_get_values($ds, $entry,"mail");
     11 
     12 echo $values["count"]." email addresses for this entry.<p>";
     13 
     14 for ($i=0; $i < $values["count"]; $i++)
     15     echo $values[$i]."<br>";
     16 

    ldap_get_values_len

    (PHP3 >= 3.0.13, PHP4 >= 4.0RC2)

    ldap_get_values_len -- result entry로 부터 모든 binary 값을 구한다.

    Description

    array ldap_get_values_len (int link_identifier, int result_entry_identifier, string attribute)

    Returns an array of values for the attribute on success and false on error.

    ldap_get_values_len() function is used to read all the values of the attribute in the entry in the result. entry is specified by the result_entry_identifier. The number of values can be found by indexing "count" in the resultant array. Individual values are accessed by integer index in the array. The first index is 0.

    This function is used exactly like ldap_get_values() except that it handles binary data and not string data.

    Note: This function was added in 4.0.

    ldap_list

    ldap_list -- Single-level 검색 (search)

    Description

    int ldap_list (int link_identifier, string base_dn, string filter [, array attributes])

    Returns a search result identifier or false on error.

    ldap_list() performs the search for a specified filter on the directory with the scope LDAP_SCOPE_ONELEVEL.

    LDAP_SCOPE_ONELEVEL means that the search should only return information that is at the level immediately below the base dn given in the call. (Equivalent to typing "ls" and getting a list of files and folders in the current working directory.)

    This call takes an optional fourth parameter which is an array of the attributes required. See ldap_search() notes.

    Example 1. Produce a list of all organizational units of an organization

      1 
      2 // $ds is a valid link identifier for a directory server
      3 
      4 $basedn = "o=My Company, c=US";
      5 $justthese = array("ou");
      6 
      7 $sr=ldap_list($ds, $basedn, "ou=*", $justthese);
      8 
      9 $info = ldap_get_entries($ds, $sr);
     10 
     11 for ($i=0; $i<$info["count"]; $i++)
     12     echo $info[$i]["ou"][0] ;
     13 

    ldap_modify

    ldap_modify -- LDAP entry를 수정한다.

    Description

    int ldap_modify (int link_identifier, string dn, array entry)

    Returns true on success and false on error.

    ldap_modify() function is used to modify the existing entries in the LDAP directory. The structure of the entry is same as in ldap_add().

    ldap_next_attribute

    ldap_next_attribute -- result의 다음 속성을 구한다.

    Description

    string ldap_next_attribute (int link_identifier, int result_entry_identifier, int ber_identifier)

    Returns the next attribute in an entry on success and false on error.

    ldap_next_attribute() is called to retrieve the attributes in an entry. The internal state of the pointer is maintained by the ber_identifier. It is passed by reference to the function. The first call to ldap_next_attribute() is made with the result_entry_identifier returned from ldap_first_attribute().

    see also ldap_get_attributes()

    ldap_next_entry

    ldap_next_entry -- 다음 result entry를 구한다.

    Description

    int ldap_next_entry (int link_identifier, int result_entry_identifier)

    Returns entry identifier for the next entry in the result whose entries are being read starting with ldap_first_entry(). If there are no more entries in the result then it returns false.

    ldap_next_entry() function is used to retrieve the entries stored in the result. Successive calls to the ldap_next_entry() return entries one by one till there are no more entries. The first call to ldap_next_entry() is made after the call to ldap_first_entry() with the result_identifier as returned from the ldap_first_entry().

    see also ldap_get_entries()

    ldap_read

    ldap_read -- entry를 읽는다.

    Description

    int ldap_read (int link_identifier, string base_dn, string filter, array [attributes]);

    Returns a search result identifier or false on error.

    ldap_read() performs the search for a specified filter on the directory with the scope LDAP_SCOPE_BASE. So it is equivalent to reading an entry from the directory.

    An empty filter is not allowed. If you want to retrieve absolutely all information for this entry, use a filter of "objectClass=*". If you know which entry types are used on the directory server, you might use an appropriate filter such as "objectClass=inetOrgPerson".

    This call takes an optional fourth parameter which is an array of the attributes required. See ldap_search() notes.

    ldap_search

    ldap_search -- LDAP tree를 검색한다.

    Description

    int ldap_search (int link_identifier, string base_dn, string filter [, array attributes])

    Returns a search result identifier or false on error.

    ldap_search() performs the search for a specified filter on the directory with the scope of LDAP_SCOPE_SUBTREE. This is equivalent to searching the entire directory. base_dn specifies the base DN for the directory.

    There is a optional fourth parameter, that can be added to restrict the attributes and values returned by the server to just those required. This is much more efficient than the default action (which is to return all attributes and their associated values). The use of the fourth parameter should therefore be considered good practice.

    The fourth parameter is a standard PHP string array of the required attributes, eg array("mail","sn","cn") Note that the "dn" is always returned irrespective of which attributes types are requested.

    Note too that some directory server hosts will be configured to return no more than a preset number of entries. If this occurs, the server will indicate that it has only returned a partial results set.

    The search filter can be simple or advanced, using boolean operators in the format described in the LDAP doumentation (see the Netscape Directory SDK for full information on filters).

    The example below retrieves the organizational unit, surname, given name and email address for all people in "My Company" where the surname or given name contains the substring $person. This example uses a boolean filter to tell the server to look for information in more than one attribute.

    Example 1. LDAP search

      1 
      2 // $ds is a valid link identifier for a directory server
      3 
      4 // $person is all or part of a person's name, eg "Jo"
      5 
      6 $dn = "o=My Company, c=US";
      7 $filter="(|(sn=$person*)(givenname=$person*))";
      8 $justthese = array( "ou", "sn", "givenname", "mail");
      9 
     10 $sr=ldap_search($ds, $dn, $filter, $justthese);
     11 
     12 $info = ldap_get_entries($ds, $sr);
     13 
     14 print $info["count"]." entries returned<p>";
     15 

    ldap_unbind

    ldap_unbind -- LDAP directory로부터 unbind한다.

    Description

    int ldap_unbind (int link_identifier)

    Returns true on success and false on error.

    ldap_unbind() function unbinds from the LDAP directory.

    ldap_err2str

    (PHP3 >= 3.0.13, PHP4 >= 4.0RC2)

    ldap_err2str --  LDAP 에러번호를 에러 메시지 문자열로 변환한다.

    Description

    string ldap_err2str (int errno)

    returns string error message.

    This function returns the string error message explaining the error number errno. While LDAP errno numbers are standardized, different libraries return different or even localized textual error messages. Never check for a specific error message text, but always use an error number to check.

    See also ldap_errno() and ldap_error().

    Example 1. Enumerating all LDAP error messages

      1 
      2 <?php
      3   for($i=0; $i<100; $i++) {
      4     printf("Error $i: %s<br>\n", ldap_str2err($i));
      5   }
      6 ?>
      7 

    ldap_errno

    (PHP3 >= 3.0.12, PHP4 >= 4.0RC2)

    ldap_errno -- 최근에 사용한 LDAP 명령에 대한 LDAP 에러 번호를 반환한다.

    Description

    int ldap_errno (int link_id)

    return the LDAP error number of the last LDAP command for this link.

    This function returns the standardized error number returned by the last LDAP command for the given link identifier. This number can be converted into a textual error message using ldap_err2str().

    Unless you lower your warning level in your php3.ini sufficiently or prefix your LDAP commands with @ (at) characters to suppress warning output, the errors generated will also show up in your HTML output.

    Example 1. Generating and catching an error

      1 
      2 <?php
      3 // This example contains an error, which we will catch.
      4 $ld = ldap_connect("localhost");
      5 $bind = ldap_bind($ld);
      6 // syntax error in filter expression (errno 87),
      7 // must be "objectclass=*" to work.
      8 $res =  @ldap_search($ld, "o=Myorg, c=DE", "objectclass");
      9 if (!$res) {
     10     printf("LDAP-Errno: %s<br>\n", ldap_errno($ld));
     11     printf("LDAP-Error: %s<br>\n", ldap_error($ld));
     12     die("Argh!<br>\n");
     13 }
     14 $info = ldap_get_entries($ld, $res);
     15 printf("%d matching entries.<br>\n", $info["count"]);
     16 ?>
     17 

    ldap_error

    (PHP3 >= 3.0.12, PHP4 >= 4.0RC2)

    ldap_error --  최근에 사용한 LDAP 명령에 대한 LDAP 에러 메세지를 반환한다.

    Description

    string ldap_error (int link_id)

    returns string error message.

    This function returns the string error message explaining the error generated by the last LDAP command for the given link identifier. While LDAP errno numbers are standardized, different libraries return different or even localized textual error messages. Never check for a specific error message text, but always use an error number to check.

    Unless you lower your warning level in your php3.ini sufficiently or prefix your LDAP commands with @ (at) characters to suppress warning output, the errors generated will also show up in your HTML output.

    see also ldap_err2str() and ldap_errno().


    XXXII. Mail functions

    mail() 함수는 편지를 보낼 수 있게 해 준다.

    Table of Contents
    mail … send mail

    mail

    mail -- 편지를 보낸다.

    Description

    bool mail (string to, string subject, string message [, string additional_headers])

    Mail() automatically mails the message specified in message to the receiver specified in to. Multiple recipients can be specified by putting a comma between each address in to.

    Example 1. Sending mail.

      1 
      2 mail("rasmus@lerdorf.on.ca", "My Subject", "Line 1\nLine 2\nLine 3");
      3       

    If a fourth string argument is passed, this string is inserted at the end of the header. This is typically used to add extra headers. Multiple extra headers are separated with a newline.

    Example 2. Sending mail with extra headers.

      1 
      2 mail("nobody@aol.com", "the subject", $message,
      3      "From: webmaster@$SERVER_NAME\nReply-To: webmaster@$SERVER_NAME\nX-Mailer: PHP/" . phpversion());
      4       


    XXXII. Mathematical functions

    Introduction

    이 수학 함수들은 여러분의 컴퓨터의 long과 double 형태로만 사용됩니다. 만약 여러분이 이 이상의 숫자를 다루어야한다면 arbitrary precision math functions를 사용하도록한다.


    Math constants

    PHP의 수학 함수 확장에서 다음값이 상수로 지정되어있다. :

    Table 1. Math constants

    Constant Value Description
    M_PI 3.14159265358979323846 Der Wert π (Pi)
    M_E 2.7182818284590452354 e
    M_LOG2E 1.4426950408889634074 log_2 e
    M_LOG10E 0.43429448190325182765 log_10 e
    M_LN2 0.69314718055994530942 log_e 2
    M_LN10 2.30258509299404568402 log_e 10
    M_PI_2 1.57079632679489661923 pi/2
    M_PI_4 0.78539816339744830962 pi/4
    M_1_PI 0.31830988618379067154 1/pi
    M_2_PI 0.63661977236758134308 2/pi
    M_2_SQRTPI 1.12837916709551257390 2/sqrt(pi)
    M_SQRT2 1.41421356237309504880 sqrt(2)
    M_SQRT1_2 0.70710678118654752440 1/sqrt(2)
    PHP4RC1과 그 이전 버전에서는 M_PI 만이 상수로 제공되었다. 다른 상수들은 PHP4.0부터 지원된다.
    Table of Contents
    Abs … absolute value
    Acos … arc cosine
    Asin … arc sine
    Atan … arc tangent
    Atan2 … arc tangent of two variables
    base_convert … convert a number between arbitrary bases
    BinDec … binary to decimal
    Ceil … round fractions up
    Cos … cosine
    DecBin … decimal to binary
    DecHex … decimal to hexadecimal
    DecOct … decimal to octal
    deg2rad … Converts the number in degrees to the radian equivalent
    Exp … e to the power of...
    Floor … round fractions down
    getrandmax … show largest possible random value
    HexDec … hexadecimal to decimal
    Log … natural logarithm
    Log10 … base-10 logarithm
    max … find highest value
    min … find lowest value
    mt_rand … generate a better random value
    mt_srand … seed the better random number generator
    mt_getrandmax … show largest possible random value
    number_format … format a number with grouped thousands
    OctDec … octal to decimal
    pi … get value of pi
    pow … exponential expression
    rad2deg … Converts the radian number to the equivalent number in degrees
    rand … generate a random value
    round … Rounds a float.
    Sin … sine
    Sqrt … square root
    srand … seed the random number generator
    Tan … tangent

    Abs

    Abs -- 절대값

    Description

    mixed abs(mixed number);

    Returns the absolute value of number. If the argument number is float, return type is also float, otherwise it is int.

    Acos

    Acos -- arc cosine

    Description

    float acos(float arg);

    Returns the arc cosine of arg in radians.

    See also asin() and atan().

    Asin

    Asin -- arc sine

    Description

    float asin(float arg);

    Returns the arc sine of arg in radians.

    See also acos() and atan().

    Atan

    Atan -- arc tangent

    Description

    float atan(float arg);

    Returns the arc tangent of arg in radians.

    See also acos() and atan().

    Atan2

    Atan2 -- arc tangent of two variables

    Description

    float atan2(float y, float x);

    This function calculates the arc tangent of the two variables x and y. It is similar to calculating the arc tangent of y / x, except that the signs of both arguments are used to determine the quadrant of the result.

    The function returns the result in radians, which is between -PI and PI (inclusive).

    See also acos() and atan().

    base_convert

    base_convert -- 숫자를 진법간에 변환한다.

    Description

    strin base_convert (string number, int frombase, int tobase)

    Returns a string containing number represented in base tobase. The base in which number is given is specified in frombase. Both frombase and tobase have to be between 2 and 36, inclusive. Digits in numbers with a base higher than 10 will be represented with the letters a-z, with a meaning 10, b meaning 11 and z meaning 36.

    Example 1. base_convert()

      1 
      2 $binary = base_convert($hexadecimal, 16, 2);
      3 

    BinDec

    BinDec -- 2진수를 10진수로 바꾼다.

    Description

    int bindec(string binary_string);

    Returns the decimal equivalent of the binary number represented by the binary_string argument.

    BinDec converts a binary number to a decimal number. The largest number that can be converted is 31 bits of 1's or 2147483647 in decimal.

    See also the decbin() function.

    Ceil

    Ceil -- 올림을 한 값

    Description

    int ceil(float number);

    Returns the next highest integer value from number. Using ceil() on integers is absolutely a waste of time.

    NOTE: PHP/FI 2's ceil() returned a float. Use: $new = (double)ceil($number); to get the old behaviour.

    See also floor() and round().

    Cos

    Cos -- cosine

    Description

    float cos(float arg);

    Returns the cosine of arg in radians.

    See also sin() and tan().

    DecBin

    DecBin -- 10진수를 2진수로 바꾼다.

    Description

    string decbin(int number);

    Returns a string containing a binary representation of the given number argument. The largest number that can be converted is 2147483647 in decimal resulting to a string of 31 1's.

    See also the bindec() function.

    DecHex

    DecHex -- 십진수를 16진수로

    Description

    string dechex(int number);

    Returns a string containing a hexadecimal representation of the given number argument. The largest number that can be converted is 2147483647 in decimal resulting to "7fffffff".

    See also the hexdec() function.

    DecOct

    DecOct -- 십진수를 8진수로 바꾼다

    Description

    string decoct(int number);

    Returns a string containing an octal representation of the given number argument. The largest number that can be converted is 2147483647 in decimal resulting to "17777777777". See also octdec().

    deg2rad

    (PHP3 >= 3.0.4, PHP4 )

    deg2rad -- degrees 각도 값을 radian 각도값으로 변환한다.

    Description

    double deg2rad (double number)

    This function converts number from degrees to the radian equivalent.

    See also rad2deg().

    Exp

    Exp -- 자연대수 e의 n 제곱값

    Description

    float exp(float arg);

    Returns e raised to the power of arg.

    See also pow().

    Floor

    Floor -- 내림을 한 값

    Description

    int floor(float number);

    Returns the next lowest integer value from number. Using floor() on integers is absolutely a waste of time.

    NOTE: PHP/FI 2's floor() returned a float. Use: $new = (double)floor($number); to get the old behaviour.

    See also ceil() and round().

    getrandmax

    getrandmax -- 가능한 난수의 최대값

    Description

    int getrandmax(void );

    Returns the maximum value that can be returned by a call to rand().

    See also rand(), srand(), mt-rand() ,mt_srand() and mt_getrandmax(),

    HexDec

    HexDec -- 16진수를 10진수로

    Description

    int hexdec(string hex_string);

    Returns the decimal equivalent of the hexadecimal number represented by the hex_string argument. HexDec converts a hexadecimal string to a decimal number. The largest number that can be converted is 7fffffff or 2147483647 in decimal.

    See also the dechex() function.

    Log

    Log -- 자연 로그

    Description

    float log(float arg);

    Returns the natural logarithm of arg.

    Log10

    Log10 -- 상용 로그

    Description

    float log10(float arg);

    Returns the base-10 logarithm of arg.

    max

    max -- 가장 큰 값을 찾는다.

    Description

    mixed max(mixed arg1, mixed arg2, mixed argn);

    max() returns the numerically highest of the parameter values.

    If the first parameter is an array, max() returns the highest value in that array. If the first parameter is an integer, string or double, you need at least two parameters and max() returns the biggest of these values. You can compare an unlimited number of values.

    If one or more of the values is a double, all the values will be treated as doubles, and a double is returned. If none of the values is a double, all of them will be treated as integers, and an integer is returned.

    min

    min -- 가장 작은 값을 찾는다.

    Description

    mixed min(mixed arg1, mixed arg2, mixed argn);

    min() returns the numerically lowest of the parameter values.

    If the first parameter is an array, min() returns the lowest value in that array. If the first parameter is an integer, string or double, you need at least two parameters and min() returns the lowest of these values. You can compare an unlimited number of values.

    If one or more of the values is a double, all the values will be treated as doubles, and a double is returned. If none of the values is a double, all of them will be treated as integers, and an integer is returned.

    mt_rand

    mt_rand -- 더 좋은 난수 값을 만들어 낸다.

    Description

    int mt_rand([int min], [int max]);

    Many random number generators of older libcs have dubious or unknown characteristics and are slow. By default, PHP uses the libc random number generator with the rand() function. mt_rand() function is a drop-in replacement for this. It uses a random number generator with known characteristics, the Mersenne Twister, which will produce random numbers that should be suitable for cryptographic purposes and is four times faster than what the average libc provides. The Homepage of the Mersenne Twister can be found at http://www.math.keio.ac.jp/~matumoto/emt.html, and an optimized version of the MT source is available from http://www.scp.syr.edu/~marc/hawk/twister.html.

    If called without the optional min,max arguments mt_rand() returns a pseudo-random value between 0 and RAND_MAX. If you want a random number between 5 and 15 (inclusive), for example, use mt_rand(5,15).

    Remember to seed the random number generator before use with mt_srand().

    See also mt_srand(), mt_getrandmax(), srand(), rand() and getrandmax().

    mt_srand

    mt_srand -- 더 좋은 난수 발생기에 초기값을 정한다.

    Description

    void mt_srand(int seed);

    Seeds the random number generator with seed.

    // seed with microseconds since last "whole" second
    mt_srand((double)microtime()*1000000);
    $randval = mt_rand();

    See also mt_rand(), mt_getrandmax(), srand(), rand() and getrandmax().

    mt_getrandmax

    mt_getrandmax -- 가능한 가장 큰 난수값

    Description

    int mt_getrandmax(void );

    Returns the maximum value that can be returned by a call to mt_rand().

    See also mt_rand(), mt_srand(), rand(), srand() and getrandmax().

    number_format

    number_format -- 숫자를 1000단위와 소수점에 ,와 .등을 찍어준다.

    Description

    string number_format(float number, int decimals, string dec_point, string thousands_sep);

    number_format() returns a formatted version of number. This function accepts either one, two or four parameters (not three):

    If only one parameter is given, number will be formatted without decimals, but with a comma (",") between every group of thousands.

    If two parameters are given, number will be formatted with decimals decimals with a dot (".") in front, and a comma (",") between every group of thousands.

    If all four parameters are given, number will be formatted with decimals decimals, dec_point instead of a dot (".") before the decimals and thousands_sep instead of a comma (",") between every group of thousands.

    OctDec

    OctDec -- 8진수를 10진수로

    Description

    int octdec(string octal_string);

    Returns the decimal equivalent of the octal number represented by the octal_string argument. OctDec converts an octal string to a decimal number. The largest number that can be converted is 17777777777 or 2147483647 in decimal.

    See also decoct().

    pi

    pi -- 파이 값

    Description

    double pi(void);

    Returns an approximation of pi.

    pow

    pow -- 지수 표현식(x의 y승)

    Description

    float pow(float base, float exp);

    Returns base raised to the power of exp.

    See also exp().

    rad2deg

    (PHP3 >= 3.0.4, PHP4 )

    rad2deg -- radian 각도 값을 degrees 각도값으로 변환한다.

    Description

    double rad2deg (double number)

    This function converts number from radian to degrees.

    See also deg2rad().

    rand

    rand -- 난수의 발생

    Description

    int rand([int min], [int max]);

    If called without the optional min,max arguments rand() returns a pseudo-random value between 0 and RAND_MAX. If you want a random number between 5 and 15 (inclusive), for example, use rand(5,15).

    Remember to seed the random number generator before use with srand().

    See also srand(), getrandmax(), mt-rand() ,mt_srand() and mt_getrandmax(),

    round

    round -- 반올림 한 값

    Description

    double round(double val);

    Returns the rounded value of val.

    $foo = round( 3.4 );   // $foo == 3.0
    $foo = round( 3.5 );   // $foo == 4.0
    $foo = round( 3.6 );   // $foo == 4.0
          

    See also ceil() and floor().

    Sin

    Sin -- sine

    Description

    float sin(float arg);

    Returns the sine of arg in radians.

    See also cos() and tan().

    Sqrt

    Sqrt -- 제곱근

    Description

    float sqrt(float arg);

    Returns the square root of arg.

    srand

    srand -- 난수 발생시 사용하는 seed 값

    Description

    void srand(int seed);

    Seeds the random number generator with seed.

    // seed with microseconds since last "whole" second
    srand((double)microtime()*1000000);
    $randval = rand();
          

    See also rand(), getrandmax(), mt-rand() ,mt_srand() and mt_getrandmax(),

    Tan

    Tan -- tangent

    Description

    float tan(float arg);

    Returns the tangent of arg in radians.

    See also sin() and cos().


    XXXIV. MCAL functions

    MCAL은 Modular Calendar Access Library의 줄임말이다.

    Libmcal은 일정관리(calandar)를 하는 C 라이브러리이다. 이것은 추가/삭제가 가능한 드라이버들로 잘 모듈화되어 있다. IMAP 모듈이 메일박스에 대해 모듈화 되어 있는 것과 같이 MCAL은 일정관리에 모듈화 되어 있다.

    IMAP에서의 mailbox stream같이 mcal에서는 일정 stream이 열릴 수 있다. 일정관리 내용은 지역파일로 저장될 수도 있고, 원격 ICAP 서버에 저장될 수도 있으며, mcal 라이브러리가 지원하는 다른 형태로 저장될 수도 있다.

    개개의 일정(event)은 서버에서 가져올 수 있고, 검색할 수 있고, 저장되기도 한다. 또한 알람기능을 하는 날짜 트리거(triggers)를 지원하고 반복적인 일정도 지원한다.

    libmcal은 중앙 집중 일정 서버를 사용하여 특정 데이터베이스나 로컬 파일을 직접 다루어야 하는 필요를 없앨 수 있다.

    이 함수들을 동작시키려면, PHP를 --with-mcal 옵션을 주고 컴파일 하여야 한다. 그리고, 당연히 mcal 라이브러리는 미리 설치되어 있어야 한다. http://mcal.chek.com/ 에서 최신 버전을 받아다 컴파일하여 설치하면 된다.

    MCAL 모듈이 사용될 수 있다면 다음과 같은 함수가 미리 정의되어 있다. : MCAL_SUNDAY, MCAL_MONDAY, MCAL_TUESDAY, MCAL_WEDNESDAY, MCAL_THURSDAY, MCAL_FRIDAY, MCAL_SATURDAY, MCAL_RECUR_NONE, MCAL_RECUR_DAILY, MCAL_RECUR_WEEKLY, MCAL_RECUR_MONTHLY_MDAY, MCAL_RECUR_MONTHLY_WDAY, MCAL_RECUR_YEARLY, MCAL_JANUARY, MCAL_FEBRUARY, MCAL_MARCH, MCAL_APRIL, MCAL_MAY, MCAL_JUNE, MCAL_JULY, MCAL_AUGUGT, MCAL_SEPTEMBER, MCAL_OCTOBER, MCAL_NOVEMBER, MCAL_DECEMBER. 대부분의 함수는 각각의 스트림에 대해 하나씩 설정되어 있는 내부적인 일정 구조체(internal event structure)를 사용한다. 이것은 함수들간에 크기가 큰 객체를 전달하기 수월하게 한다. 여기에서는 일정 구조체 (event structure)의 값을 설정하고, 초기화하고, 조회하는데 사용하기 쉬운 함수들을 제공한다.

    Table of Contents
    mcal_open … Opens up an MCAL connection
    mcal_close … Close an MCAL stream
    mcal_fetch_event … Fetches an event from the calendar stream
    mcal_list_events … Return a list of events between two given datetimes
    mcal_append_event … Store a new event into an MCAL calendar
    mcal_store_event … Modify an existing event in an MCAL calendar
    mcal_delete_event … Delete an event from an MCAL calendar
    mcal_snooze … Turn off an alarm for an event
    mcal_list_alarms … Return a list of events that has an alarm triggered at the given datetime
    mcal_event_init … Initializes a streams global event structure
    mcal_event_set_category … Sets the category of the streams global event structure
    mcal_event_set_title … Sets the title of the streams global event structure
    mcal_event_set_description … Sets the description of the streams global event structure
    mcal_event_set_start … Sets the start date and time of the streams global event structure
    mcal_event_set_end … Sets the end date and time of the streams global event structure
    mcal_event_set_alarm … Sets the alarm of the streams global event structure
    mcal_event_set_class … Sets the class of the streams global event structure
    mcal_is_leap_year … Returns if the given year is a leap year or not
    mcal_days_in_month … Returns the number of days in the given month
    mcal_date_valid … Returns true if the given year, month, day is a valid date
    mcal_time_valid … Returns true if the given year, month, day is a valid time
    mcal_day_of_week … Returns the day of the week of the given date
    mcal_day_of_year … Returns the day of the year of the given date
    mcal_date_compare … Compares two dates
    mcal_next_recurrence … Returns the next recurrence of the event
    mcal_event_set_recur_none … Sets the recurrence of the streams global event structure
    mcal_event_set_recur_daily … Sets the recurrence of the streams global event structure
    mcal_event_set_recur_weekly … Sets the recurrence of the streams global event structure
    mcal_event_set_recur_monthly_mday … Sets the recurrence of the streams global event structure
    mcal_event_set_recur_monthly_wday … Sets the recurrence of the streams global event structure
    mcal_event_set_recur_yearly … Sets the recurrence of the streams global event structure
    mcal_fetch_current_stream_event … Returns an object containing the current streams event structure

    mcal_open

    mcal_open -- MCAL 연결을 연다.

    Description

    int mcal_open(string calendar, string username, string password, string options);

    Returns an MCAL stream on success, false on error.

    mcal_open() opens up an MCAL connection to the specified calendar store. If the optional options is specified, passes the options to that mailbox also. The streams internal event structure is also initialized upon connection.

    mcal_close

    mcal_close -- MCAL stream을 닫는다.

    Description

    int mcal_close(int mcal_stream, int flags);

    Closes the given mcal stream.

    mcal_fetch_event

    mcal_fetch_event -- calendar stream 에서 event 를 가져온다.

    Description

    object mcal_fetch_event(int mcal_stream, int event_id, int [options]);

    mcal_fetch_event() fetches an event from the calendar stream specified by id.

    Returns an event object consisting of:

    All datetime entries consist of an object that contains:

    mcal_list_events

    mcal_list_events -- 두 개의 시간 사이에 있는 일정들(events)의 목록을 반환한다.

    Description

    array mcal_list_events(int mcal_stream, int [begin_year] , int [begin_month] , int [begin_day] , int [end_year] , int [end_month] , int [end_day] );

    Returns an array of event ID's that are between the start and end dates, or if just a stream is given, uses the start and end dates in the global event structure.

    mcal_list_events() function takes in an optional beginning date and an end date for a calendar stream. An array of event id's that are between the given dates or the internal event dates are returned.

    mcal_append_event

    mcal_append_event -- MCAL calendar에 새로운 일정(event)를 저장한다.

    Description

    int mcal_append_event(int mcal_stream);

    mcal_append_event() Stores the global event into an MCAL calendar for the given stream.

    Returns the uid of the newly inserted event.

    mcal_store_event

    mcal_store_event -- MCAL calendar의 기존 일정(event)를 수정한다.

    Description

    int mcal_store_event(int mcal_stream);

    mcal_store_event() Stores the modifications to the current global event for the given stream.

    Returns true on success and false on error.

    mcal_delete_event

    mcal_delete_event -- MCAL calendar의 어떤 일정(event)를 삭제한다.

    Delete an event from an MCAL calendar

    Description

    int mcal_delete_event(int uid);

    mcal_delete_event() deletes the calendar event specified by the uid.

    Returns true.

    mcal_snooze

    mcal_snooze -- 한 일정(event)에 대한 알람을 끈다.

    Turn off an alarm for an event

    Description

    int mcal_snooze(int uid);

    mcal_snooze() turns off an alarm for a calendar event specified by the uid.

    Returns true.

    mcal_list_alarms

    mcal_list_alarms -- 주어진 시간(datetime)에 알람이 실행하도록(triggered) 맞춰져 있는 일정의 목록을 반환한다.

    Description

    array mcal_list_events(int mcal_stream, int [begin_year] , int [begin_month] , int [begin_day] , int [end_year] , int [end_month] , int [end_day] );

    Returns an array of event ID's that has an alarm going off between the start and end dates, or if just a stream is given, uses the start and end dates in the global event structure.

    mcal_list_events() function takes in an optional beginning date and an end date for a calendar stream. An array of event id's that are between the given dates or the internal event dates are returned.

    mcal_event_init

    mcal_event_init -- streams의 global event structure를 초기화 한다.

    Description

    int mcal_event_init(int stream);

    mcal_event_init() initializes a streams global event structure. this effectively sets all elements of the structure to 0, or the default settings.

    Returns true.

    mcal_event_set_category

    mcal_event_set_category -- streams의 global event structure의 category를 설정한다.

    Description

    int mcal_event_set_category(int stream, string category);

    mcal_event_set_category() sets the streams global event structure's category to the given string.

    Returns true.

    mcal_event_set_title

    mcal_event_set_title -- streams의 global event structure의 제목(title)을 설정한다.

    Description

    int mcal_event_set_title(int stream, string title);

    mcal_event_set_title() sets the streams global event structure's title to the given string.

    Returns true.

    mcal_event_set_description

    mcal_event_set_description -- streams의 global event structure의 설명(description)을 설정한다.

    Description

    int mcal_event_set_description (int stream, string description);

    mcal_event_set_description() sets the streams global event structure's description to the given string.

    Returns true.

    mcal_event_set_start

    mcal_event_set_start -- streams의 global event structure의 시작 시각(start date and time)을 설정한다.

    Description

    int mcal_event_set_start(int stream, int year, int month, int [day] , int [hour] , int [min] , int [sec] );

    mcal_event_set_start() sets the streams global event structure's start date and time to the given values.

    Returns true.

    mcal_event_set_end

    mcal_event_set_end -- streams의 global event structure의 종료 시각(end date and time)을 설정한다.

    Description

    int mcal_event_set_end(int stream, int year, int month, int [day] , int [hour] , int [min] , int [sec] );

    mcal_event_set_end() sets the streams global event structure's end date and time to the given values.

    Returns true.

    mcal_event_set_alarm

    mcal_event_set_alarm -- streams의 global event structure의 알람(alarm)을 설정한다.

    Description

    int mcal_event_set_alarm(int stream, int alarm);

    mcal_event_set_alarm() sets the streams global event structure's alarm to the given minutes before the event.

    Returns true.

    mcal_event_set_class

    mcal_event_set_class -- streams의 global event structure의 class를 설정한다.

    Description

    int mcal_event_set_class(int stream, int class);

    mcal_event_set_class() sets the streams global event structure's class to the given value. The class is either 0 for public, or 1 for private.

    Returns true.

    mcal_is_leap_year

    mcal_is_leap_year -- 주어진 연도가 윤년인가 아닌가 반환한다.

    Description

    int mcal_is_leap_year(int year);

    mcal_is_leap_year() returns 1 if the given year is a leap year, 1 if not. (역자주: 원본이 좀 이상한데, 아마 윤년이 아니면 0을 반환할 것이다)

    mcal_days_in_month

    mcal_days_in_month -- 주어진 월의 날짜를 반환한다.

    Description

    int mcal_days_in_month(int month, int leap year);

    mcal_days_in_month() Returns the number of days in the given month, taking into account if the given year is a leap year or not.

    mcal_date_valid

    mcal_date_valid -- 주어진 연, 월, 일이 날짜로 변환에 문제 없으면 true를 반환한다.

    Description

    int mcal_date_valid(int year, int month, int day);

    mcal_date_valid() Returns true if the given year, month and day is a valid date, false if not.

    mcal_time_valid

    mcal_time_valid -- 주어진 시, 분, 초가 날짜로 변환에 문제 없으면 true를 반환한다.

    Description

    int mcal_time_valid(int hour, int minutes, int seconds);

    mcal_time_valid() Returns true if the given hour, minutes and seconds is a valid time, false if not.

    mcal_day_of_week

    mcal_day_of_week -- 주어진 날짜의 요일을 반환한다.

    Description

    int mcal_(int year, int month, int day);

    mcal_day_of_week() returns the day of the week of the given date

    mcal_day_of_year

    mcal_day_of_year -- 주어진 날짜가 해당 연도의 몇 번째 날인지 반환한다.

    Description

    int mcal_(int year, int month, int day);

    mcal_day_of_year() returns the day of the year of the given date.

    mcal_date_compare

    mcal_date_compare -- 두 날짜를 비교한다.

    Description

    int mcal_date_compare(int a_year, int a_month, int a_day, int b_year, int b_month, int b_day);

    mcal_date_compare() Compares the two given dates, returns <0, 0, >0 if a<b, a==b, a>b respectively

    mcal_next_recurrence

    mcal_next_recurrence -- 다음에 재현할(recurrence) 일정을 반환한다.

    Description

    int mcal_next_recurrence(int stream, int weekstart, array next);

    mcal_next_recurrence() returns an object filled with the next date the event occurs, on or after the supplied date. Returns empty date field if event does not occur or something is invalid. Uses weekstart to determine what day is considered the beginning of the week.

    mcal_event_set_recur_none

    mcal_event_set_recur_none -- streams의 global event structure의 recurrence를 설정한다.

    Description

    int mcal_event_set_recur_none (int stream);

    mcal_event_set_recur_none() sets the streams global event structure to not recur (event->recur_type is set to MCAL_RECUR_NONE).

    mcal_event_set_recur_daily

    mcal_event_set_recur_daily -- streams의 global event structure의 recurrence를 설정한다.

    Description

    int mcal_event_set_recur_daily (int stream, int year, int month, int day, int interval);

    mcal_event_set_recur_daily() sets the streams global event structure's recurrence to the given value to be reoccuring on a daily basis, ending at the given date.

    mcal_event_set_recur_weekly

    mcal_event_set_recur_weekly -- streams의 global event structure의 recurrence를 설정한다.

    Description

    int mcal_event_set_recur_weekly (int stream, int year, int month, int day, int interval, int weekdays);

    mcal_event_set_recur_weekly() sets the streams global event structure's recurrence to the given value to be reoccuring on a weekly basis, ending at the given date.

    mcal_event_set_recur_monthly_mday

    mcal_event_set_recur_monthly_mday -- streams의 global event structure의 recurrence를 설정한다.

    Description

    int mcal_event_set_recur_monthly_mday (int stream, int year, int month, int day, int interval);

    mcal_event_set_recur_monthly_mday() sets the streams global event structure's recurrence to the given value to be reoccuring on a monthly by month day basis, ending at the given date.

    mcal_event_set_recur_monthly_wday

    mcal_event_set_recur_monthly_wday -- streams의 global event structure의 recurrence를 설정한다.

    Description

    int mcal_event_set_recur_monthly_wday (int stream, int year, int month, int day, int interval);

    mcal_event_set_recur_monthly_wday() sets the streams global event structure's recurrence to the given value to be reoccuring on a monthly by week basis, ending at the given date.

    mcal_event_set_recur_yearly

    mcal_event_set_recur_yearly -- streams의 global event structure의 recurrence를 설정한다.

    Description

    int mcal_event_set_recur_yearly (int stream, int year, int month, int day, int interval);

    mcal_event_set_recur_yearly() sets the streams global event structure's recurrence to the given value to be reoccuring on a yearly basis,ending at the given date .

    mcal_fetch_current_stream_event

    mcal_fetch_current_stream_event -- 현재 streams event structure를 가지고 있는 객체를 반환한다.

    Description

    int mcal_fetch_current_stream_event (int stream);

    mcal_event_fetch_current_stream_event() returns the current stream's event structure as an object containing:

    All datetime entries consist of an object that contains:


    XXXV. Microsoft SQL Server functions

    Table of Contents
    mssql_close … close MS SQL Server connection
    mssql_connect … open MS SQL server connection
    mssql_data_seek … move internal row pointer
    mssql_fetch_array … fetch row as array
    mssql_fetch_field … get field information
    mssql_fetch_object … fetch row as object
    mssql_fetch_row … get row as enumerated array
    mssql_field_length … Get the length of a field
    mssql_field_name … Get the name of a field
    mssql_field_seek … set field offset
    mssql_field_type … Get the type of a field
    mssql_free_result … free result memory
    mssql_get_last_message … Returns the last message from server (over min_message_severity?)
    mssql_min_error_severity … Sets the lower error severity
    mssql_min_message_severity … Sets the lower
    mssql_num_fields … get number of fields in result
    mssql_num_rows … get number of rows in result
    mssql_pconnect … open persistent MS SQL connection
    mssql_query … send MS SQL query
    mssql_result … get result data
    mssql_select_db … select MS SQL database

    mssql_close

    mssql_close -- MS SQL Server connection을 닫는다.

    Description

    int mssql_close ([int link_identifier])r);

    Returns: true on success, false on error

    mssql_close() closes the link to a MS SQL Server database that's associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed.

    Note that this isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution.

    mssql_close() will not close persistent links generated by mssql_pconnect().

    See also: mssql_connect(), mssql_pconnect().

    mssql_connect

    mssql_connect -- MS SQL server connection을 연다.

    Description

    int mssql_connect ([string servername [, string username [, string password]]])

    Returns: A positive MS SQL link identifier on success, or false on error.

    mssql_connect() establishes a connection to a MS SQL server. The servername argument has to be a valid servername that is defined in the 'interfaces' file.

    In case a second call is made to mssql_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned.

    The link to the server will be closed as soon as the execution of the script ends, unless it's closed earlier by explicitly calling mssql_close().

    See also mssql_pconnect(), mssql_close().

    mssql_data_seek

    mssql_data_seek -- internal row pointer를 옮긴다.

    Description

    int mssql_data_seek (int result_identifier, int row_number)

    Returns: true on success, false on failure

    mssql_data_seek() moves the internal row pointer of the MS SQL result associated with the specified result identifier to pointer to the specifyed row number. The next call to mssql_fetch_row() would return that row.

    See also: mssql_data_seek().

    mssql_fetch_array

    mssql_fetch_array -- row를 배열로 가져온다.

    Description

    int mssql_fetch_array (int result)

    Returns: An array that corresponds to the fetched row, or false if there are no more rows.

    mssql_fetch_array() is an extended version of mssql_fetch_row(). In addition to storing the data in the numeric indices of the result array, it also stores the data in associative indices, using the field names as keys.

    An important thing to note is that using mssql_fetch_array() is NOT significantly slower than using mssql_fetch_row(), while it provides a significant added value.

    For further details, also see mssql_fetch_row()

    mssql_fetch_field

    mssql_fetch_field -- 필드의 정보를 구한다.

    Description

    object mssql_fetch_field (int result [, int field_offset])

    Returns an object containing field information.

    mssql_fetch_field() can be used in order to obtain information about fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retreived by mssql_fetch_field() is retreived.

    The properties of the object are:

    See also mssql_field_seek()

    mssql_fetch_object

    mssql_fetch_object -- row를 object로 가져온다.

    Description

    int mssql_fetch_object (int result)

    Returns: An object with properties that correspond to the fetched row, or false if there are no more rows.

    mssql_fetch_object() is similar to mssql_fetch_array(), with one difference - an object is returned, instead of an array. Indirectly, that means that you can only access the data by the field names, and not by their offsets (numbers are illegal property names).

    Speed-wise, the function is identical to mssql_fetch_array(), and almost as quick as mssql_fetch_row() (the difference is insignificant).

    See also: mssql_fetch-array() and mssql_fetch-row().

    mssql_fetch_row

    mssql_fetch_row -- row를 배열(enumerated array)로 가져온다.

    Description

    array mssql_fetch_row (int result)

    Returns: An array that corresponds to the fetched row, or false if there are no more rows.

    Mssql_fetch_row() fetches one row of data from the result associated with the specified result identifier. The row is returned as an array. Each result column is stored in an array offset, starting at offset 0.

    Subsequent call to mssql_fetch_rows() would return the next row in the result set, or false if there are no more rows.

    See also: mssql_fetch_array(), mssql_fetch_object(), mssql_data_seek(), mssql_fetch_lengths(), and mssql_result().

    mssql_field_length

    (PHP3 >= 3.0.3, PHP4 >= 4.0b4)

    mssql_field_length -- 필드의 길이를 구한다.

    Description

    int mssql_field_length (int result [, int offset])

    mssql_field_name

    (PHP3 >= 3.0.3, PHP4 >= 4.0b4)

    mssql_field_name -- 필드의 이름을 구한다.

    Description

    int mssql_field_name (int result [, int offset])

    mssql_field_seek

    mssql_field_seek -- 필드의 offset을 설정한다.

    Description

    int mssql_field_seek (int result, int field_offset);

    Seeks to the specified field offset. If the next call to mssql_fetch_field() won't include a field offset, this field would be returned.

    See also: mssql_fetch_field().

    mssql_field_type

    (PHP3 >= 3.0.3, PHP4 >= 4.0b4)

    mssql_field_type -- 필드의 타입을 구한다.

    Description

    string mssql_field_type (int result [, int offset])

    mssql_free_result

    mssql_free_result -- result memory를 풀어준다.

    Description

    int mssql_free_result (int result)

    mssql_free_result() only needs to be called if you are worried about using too much memory while your script is running. All result memory will automatically be freed when the script, you may call mssql_free_result() with the result identifier as an argument and the associated result memory will be freed.

    mssql_get_last_message

    mssql_get_last_message -- 서버로부터 가장 최근에 온 메시지를 반환한다 (over min_message_severity?)

    Description

    string mssql_get_last_message (void )

    mssql_min_error_severity

    mssql_min_error_severity -- 저수준 에러의 엄격한 정도(lower error severity)를 설정한다.

    Description

    void mssql_min_error_severity (int severity)

    mssql_min_message_severity

    mssql_min_message_severity -- 저수준 메제지의 엄격한 정도(lower message severity)를 설정한다.

    Description

    void mssql_min_message_severity (int severity)

    mssql_num_fields

    mssql_num_fields -- result의 field 개수를 구한다.

    Description

    int mssql_num_fields (int result)

    Mssql_num_fields() returns the number of fields in a result set.

    See also: mssql_db_query(), mssql_query(), mssql_fetch_field(), mssql_num_rows().

    mssql_num_rows

    mssql_num_rows -- result의 row 개수를 구한다.

    Description

    int mssql_num_rows (string result);

    mssql_num_rows() returns the number of rows in a result set.

    See also: mssql_db_query(), mssql_query() and, mssql_fetch_row().

    mssql_pconnect

    mssql_pconnect -- 영구적인(persistent) MS SQL connection을 연다.

    Description

    int mssql_pconnect (string servername, string username, string password);

    Returns: A positive MS SQL persistent link identifier on success, or false on error

    mssql_pconnect() acts very much like mssql_connect() with two major differences.

    First, when connecting, the function would first try to find a (persistent) link that's already open with the same host, username and password. If one is found, an identifier for it will be returned instead of opening a new connection.

    Second, the connection to the SQL server will not be closed when the execution of the script ends. Instead, the link will remain open for future use (mssql_close() will not close links established by mssql_pconnect()).

    This type of links is therefore called 'persistent'.

    mssql_query

    mssql_query -- MS SQL 질의를 전송한다.

    Description

    int mssql_query (string query, int link_identifier);

    Returns: A positive MS SQL result identifier on success, or false on error.

    mssql_query() sends a query to the currently active database on the server that's associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed. If no link is open, the function tries to establish a link as if mssql_connect() was called, and use it.

    See also: mssql_db_query(), mssql_select_db(), and mssql_connect().

    mssql_result

    mssql_result -- result data를 구한다.

    Description

    int mssql_result (int result, int i, mixed field);

    Returns: The contents of the cell at the row and offset in the specified MS SQL result set.

    mssql_result() returns the contents of one cell from a MS SQL result set. The field argument can be the field's offset, or the field's name, or the field's table dot field's name (fieldname.tablename). If the column name has been aliased ('select foo as bar from...'), use the alias instead of the column name.

    When working on large result sets, you should consider using one of the functions that fetch an entire row (specified below). As these functions return the contents of multiple cells in one function call, they're MUCH quicker than mssql_result(). Also, note that specifying a numeric offset for the field argument is much quicker than specifying a fieldname or tablename.fieldname argument.

    Recommended high-performance alternatives: mssql_fetch_row(), mssql_fetch_array(), and mssql_fetch_object().

    mssql_select_db

    mssql_select_db -- 사용할 MS SQL database를 선택한다.

    Description

    int mssql_select_db (string database_name, int link_identifier);

    Returns: true on success, false on error

    mssql_select_db() sets the current active database on the server that's associated with the specified link identifier. If no link identifier is specified, the last opened link is assumed. If no link is open, the function will try to establish a link as if mssql_connect() was called, and use it.

    Every subsequent call to mssql_query() will be made on the active database.

    See also: mssql_connect(), mssql_pconnect(), and mssql_query()


    XXX. Miscellaneous functions

    이 함수들은 기존 범주에 포함시키기 곤란한 것들이다.

    Table of Contents
    connection_aborted … Return true if client disconnected
    connection_status … Returns connection status bitfield
    connection_timeout … Return true if script timed out
    define … Defines a named constant.
    defined … Checks whether a given named constant exists
    die … Output a message and terminate the current script
    eval … Evaluate a string as PHP code
    exit … Terminate current script
    func_get_arg … Return an item from the argument list
    func_get_args … Returns an array comprising a function's argument list
    func_num_args … Returns the number of arguments passed to the function
    function_exists … Return true if the given function has been defined
    get_browser … Tells what the user's browser is capable of
    ignore_user_abort … Set whether a client disconnect should abort script execution
    iptcparse … Parse a binary IPTC http://www.xe.net/iptc/ block into single tags.
    leak … Leak memory
    pack … pack data into binary string
    register_shutdown_function … Register a function for execution on shutdown.
    serialize … generates a storable representation of a value
    sleep … Delay execution
    uniqid … generate a unique id
    unpack … unpack data from binary string
    unserialize … creates a PHP value from a stored representation
    usleep … Delay execution in microseconds

    connection_aborted

    (PHP3 >= 3.0.7, PHP4 >= 4.0b4)

    connection_aborted -- 클라이언트가 접속을 끊었다면 true를 반환한다.

    Description

    int connection_aborted (void )

    Returns true if client disconnected. See the Connection Handling description in the Feature chapter for a complete explanation.

    connection_status

    (PHP3 >= 3.0.7, PHP4 >= 4.0b4)

    connection_status -- 연결 상태를 bit단위의 값으로 반환한다.

    Description

    int connection_status (void )

    Returns the connection status bitfield. See the Connection Handling description in the Feature chapter for a complete explanation.

    connection_timeout

    (PHP3 >= 3.0.7, PHP4 >= 4.0b4)

    connection_timeout -- 스크립트가 설정된 시간을 초과하여 timed out되었으면 true를 반환한다.

    Description

    int connection_timeout (void )

    Returns true if script timed out. See the Connection Handling description in the Feature chapter for a complete explanation.

    define

    (PHP3 , PHP4 )

    define -- 상수를 선언한다.

    Description

    int define (string name, mixed value [, int case_insensitive])

    Defines a named constant, which is similar to a variable except:

    The name of the constant is given by name; the value is given by value.

    The optional third parameter case_insensitive is also available. If the value 1 is given, then the constant will be defined case-insensitive. The default behaviour is case-sensitive; i.e. CONSTANT and Constant represent different values.

    Example 1. Defining Constants

      1 
      2 <?php
      3 define ("CONSTANT", "Hello world.");
      4 echo CONSTANT; // outputs "Hello world."
      5 ?>
      6       

    Define() returns TRUE on success and FALSE if an error occurs.

    See also defined() and the section on Constants.

    defined

    (PHP3 , PHP4 )

    defined -- 주어진 이름의 상수가 선언되어 있는가 검사한다.

    Description

    int defined (string name)

    Returns true if the named constant given by name has been defined, false otherwise.

    See also define() and the section on Constants.

    die

    die -- 메시지를 출력하고 현재 스크립트의 실행을 중단한다.

    Description

    void die (string message)

    This language construct outputs a message and terminates parsing of the script. It does not return anything.

    Example 1. die example

      1 
      2 <?php
      3 $filename = '/path/to/data-file';
      4 $file = fopen ($filename, 'r')
      5     or die("unable to open file ($filename)");
      6 ?>
      7       

    See also exit().

    eval

    eval -- PHP 코드를 가진 문자열을 실행한다.

    Description

    void eval (string code_str)

    eval() evaluates the string given in code_str as PHP code. Among other things, this can be useful for storing code in a database text field for later execution.

    There are some factors to keep in mind when using eval(). Remember that the string passed must be valid PHP code, including things like terminating statements with a semicolon so the parser doesn't die on the line after the eval(), and properly escaping things in code_str.

    Also remember that variables given values under eval() will retain these values in the main script afterwards.

    Example 1. Eval() example - simple text merge

      1 
      2 <?php
      3 $string = 'cup';
      4 $name = 'coffee';
      5 $str = 'This is a $string with my $name in it.<br>';
      6 echo $str;
      7 eval ("\$str = \"$str\";");
      8 echo $str;
      9 ?>
     10       

    exit

    exit -- 현재 스크립트의 실행을 중단한다.

    Description

    void exit(void);

    This language construct terminates parsing of the script. It does not return.

    See also die().

    func_get_arg

    (PHP4 >= 4.0b4)

    func_get_arg -- 함수의 파라메터로 넘어온 아이템을 구한다.

    Description

    int func_get_arg (int arg_num)

    Returns the argument which is at the arg_num'th offset into a user-defined function's argument list. Function arguments are counted starting from zero. Func_get_arg() will generate a warning if called from outside of a function definition.

    If arg_num is greater than the number of arguments actually passed, a warning will be generated and func_get_arg() will return FALSE.

      1 
      2 <?php
      3 function foo() {
      4      $numargs = func_num_args();
      5      echo "Number of arguments: $numargs<br>\n";
      6      if ($numargs >= 2) {
      7          echo "Second argument is: " . func_get_arg (1) . "<br>\n";
      8      }
      9 } 
     10 
     11 foo (1, 2, 3);
     12 ?>
     13       

    Func_get_arg() may be used in conjunction with func_num_args() and func_get_args() to allow user-defined functions to accept variable-length argument lists.

    Note: This function was added in PHP 4.

    func_get_args

    (PHP4 >= 4.0b4)

    func_get_args -- 함수의 파라메터로 넘어온 argument들을 배열로 반환한다.

    Description

    int func_get_args (void )

    Returns an array in which each element is the corresponding member of the current user-defined function's argument list. Func_get_args() will generate a warning if called from outside of a function definition.

      1 
      2 <?php
      3 function foo() {
      4     $numargs = func_num_args();
      5     echo "Number of arguments: $numargs<br>\n";
      6     if ($numargs >= 2) {
      7         echo "Second argument is: " . func_get_arg (1) . "<br>\n";
      8     }
      9     $arg_list = func_get_args();
     10     for ($i = 0; $i < $numargs; $i++) {
     11         echo "Argument $i is: " . $arg_list[$i] . "<br>\n";
     12     }
     13 } 
     14 
     15 foo (1, 2, 3);
     16 ?>
     17       

    Func_get_args() may be used in conjunction with func_num_args() and func_get_arg() to allow user-defined functions to accept variable-length argument lists.

    Note: This function was added in PHP 4.

    func_num_args

    (PHP4 >= 4.0b4)

    func_num_args -- 함수로 넘어온 파라메터의 갯수를 구한다.

    Description

    int func_num_args (void )

    Returns the number of arguments passed into the current user-defined function. Func_num_args() will generate a warning if called from outside of a function definition.

      1 
      2 <?php
      3 function foo() {
      4     $numargs = func_num_args();
      5     echo "Number of arguments: $numargs\n";
      6 } 
      7 
      8 foo (1, 2, 3);  // Prints 'Number of arguments: 3'
      9 ?>
     10       

    Func_num_args() may be used in conjunction with func_get_arg() and func_get_args() to allow user-defined functions to accept variable-length argument lists.

    Note: This function was added in PHP 4.

    function_exists

    function_exists -- 주어진 이름의 함수가 정의되어 있다면 true를 반환한다.

    Description

    int function_exists (string function_name)

    Checks the list of defined functions for function_name. Returns true if the given function name was found, false otherwise.

    get_browser

    (PHP3 , PHP4 )

    get_browser -- 사용자의 브라우저가 어떤 기능을 가지고 있는가를 말해준다.

    Description

    object get_browser ([string user_agent])

    get_browser() attempts to determine the capabilities of the user's browser. This is done by looking up the browser's information in the browscap.ini file. By default, the value of $HTTP_USER_AGENT is used; however, you can alter this (i.e., look up another browser's info) by passing the optional user_agent parameter to get_browser().

    The information is returned in an object, which will contain various data elements representing, for instance, the browser's major and minor version numbers and ID string; true/false values for features such as frames, JavaScript, and cookies; and so forth.

    While browscap.ini contains information on many browsers, it relies on user updates to keep the database current. The format of the file is fairly self-explanatory.

    The following example shows how one might list all available information retrieved about the user's browser.

    Example 1. Get_browser() example

      1 
      2 <?php
      3 function list_array ($array) {
      4     while (list ($key, $value) = each ($array)) {
      5         $str .= "<b>$key:</b> $value<br>\n";
      6     }
      7     return $str;
      8 }
      9 echo "$HTTP_USER_AGENT<hr>\n";
     10 $browser = get_browser();
     11 echo list_array ((array) $browser);
     12 ?>
     13       

    The output of the above script would look something like this:

      1 
      2 Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)<hr>
      3 <b>browser_name_pattern:</b> Mozilla/4\.5.*<br>
      4 <b>parent:</b> Netscape 4.0<br>
      5 <b>platform:</b> Unknown<br>
      6 <b>majorver:</b> 4<br>
      7 <b>minorver:</b> 5<br>
      8 <b>browser:</b> Netscape<br>
      9 <b>version:</b> 4<br>
     10 <b>frames:</b> 1<br>
     11 <b>tables:</b> 1<br>
     12 <b>cookies:</b> 1<br>
     13 <b>backgroundsounds:</b> <br>
     14 <b>vbscript:</b> <br>
     15 <b>javascript:</b> 1<br>
     16 <b>javaapplets:</b> 1<br>
     17 <b>activexcontrols:</b> <br>
     18 <b>beta:</b> <br>
     19 <b>crawler:</b> <br>
     20 <b>authenticodeupdate:</b> <br>
     21 <b>msn:</b> <br>
     22     

    In order for this to work, your browscap configuration file setting must point to the correct location of the browscap.ini file.

    For more information (including locations from which you may obtain a browscap.ini file), check the PHP FAQ at http://www.php.net/FAQ.php3.

    Note: Browscap support was added to PHP in version 3.0b2.

    ignore_user_abort

    ignore_user_abort -- 클라이언트가 접속을 끊었을 때 스크립트의 수행을 중단하는가를 정한다.

    Description

    int ignore_user_abort (int [setting]);

    This function sets whether a client disconnect should cause a script to be aborted. It will return the previous setting and can be called without an argument to not change the current setting and only return the current setting. See the Connection Handling section in the Features chapter for a complete description of connection handling in PHP.

    iptcparse

    iptcparse -- binary IPTC http://www.xe.net/iptc/ block을 하나의 택으로 parse한다.

    Description

    array iptcparse (string iptcblock);

    This function parses a binary IPTC block into its single tags. It returns an array using the tagmarker as an index and the value as the value. It returns false on error or if no IPTC data was found. See GetImageSize() for a sample.

    leak

    leak -- 메모리를 누설(Leak) 한다.

    Description

    void leak (int bytes)

    Leak() leaks the specified amount of memory.

    This is useful when debugging the memory manager, which automatically cleans up "leaked" memory when each request is completed.

    pack

    pack -- data를 binary 문자열로 pack한다.

    Description

    string pack (string format [, mixed args ...])

    Pack given arguments into binary string according to format. Returns binary string containing data.

    The idea to this function was taken from Perl and all formatting codes work the same as there. The format string consists of format codes followed by an optional repeater argument. The repeater argument can be either an integer value or * for repeating to the end of the input data. For a, A, h, H the repeat count specifies how many characters of one data argument are taken, for @ it is the absolute position where to put the next data, for everything else the repeat count specifies how many data arguments are consumed and packed into the resulting binary string. Currently implemented are

    Note that the distinction between signed and unsigned values only affects the function unpack(), where as function pack() gives the same result for signed and unsigned format codes.

    Also note that PHP internally stores integral values as signed values of a machine dependant size. If you give it an unsigned integral value too large to be stored that way it is converted to a double which often yields an undesired result.

    register_shutdown_function

    register_shutdown_function -- 스크립트가 종료될 때 실행될 함수를 설정한다.

    Description

    int register_shutdown_function (string func)

    Registers the function named by func to be executed when script processing is complete.

    Common Pitfalls:

    Since no output is allowed to the browser in this function, you will be unable to debug it using statements such as print or echo.

    serialize

    serialize -- 어떤 형태의 값이라도 저장 가능한 형태의 문자열로 만들어 준다.

    Description

    string serialize (mixed value)

    Serialize() returns a string containing a byte-stream representation of value that can be stored anywhere.

    This is useful for storing or passing PHP values around without losing their type and structure.

    To make the serialized string into a PHP value again, use unserialize(). Serialize() handles the types integer, double, string, array (multidimensional) and object (object properties will be serialized, but methods are lost).

    Example 1. Serialize() example

      1 
      2 // $session_data contains a multi-dimensional array with session
      3 // information for the current user.  We use serialize() to store
      4 // it in a database at the end of the request.
      5 
      6 $conn = odbc_connect ("webdb", "php", "chicken");
      7 $stmt = odbc_prepare ($conn,
      8                       "UPDATE sessions SET data = ? WHERE id = ?");
      9 $sqldata = array (serialize($session_data), $PHP_AUTH_USER);
     10 if (!odbc_execute ($stmt, &$sqldata)) {
     11     $stmt = odbc_prepare($conn,
     12                          "INSERT INTO sessions (id, data) VALUES(?, ?)");
     13     if (!odbc_execute($stmt, &$sqldata)) {
     14         /* Something went wrong.  Bitch, whine and moan. */
     15     }
     16 }
     17       

    sleep

    sleep -- 실행을 잠시 지연시킨다.

    Description

    void sleep (int seconds)

    The sleep function delays program execution for the given number of seconds.

    See also usleep().

    uniqid

    uniqid -- 유일한 id를 생성한다.

    Description

    int uniqid (string prefix [, boolean lcg])

    Uniqid() returns a prefixed unique identifier based on the current time in microseconds. The prefix can be useful for instance if you generate identifiers simultaneously on several hosts that might happen to generate the identifier at the same microsecond. Prefix can be up to 114 characters long.

    If the optional lcg parameter is true, uniqid() will add additional "combined LCG" entropy at the end of the return value, which should make the results more unique.

    With an empty prefix, the returned string will be 13 characters long. If lcg is true, it will be 23 characters.

    Note: The lcg parameter is only available in PHP 4 and PHP 3.0.13 and later.

    If you need a unique identifier or token and you intend to give out that token to the user via the network (i.e. session cookies), it is recommended that you use something along the lines of

      1 
      2 $token = md5 (uniqid ("")); // no random portion
      3 $better_token = md5 (uniqid (rand())); // better, difficult to guess
      4       

    This will create a 32 character identifier (a 128 bit hex number) that is extremely difficult to predict.

    unpack

    unpack -- binary 문자열을 data로 unpack한다.

    Description

    array unpack (string format, string data)

    Unpack() from binary string into array according to format. Returns array containing unpacked elements of binary string.

    Unpack() works slightly different from Perl as the unpacked data is stored in an associative array. To accomplish this you have to name the different format codes and separate them by a slash /.

    Example 1. Unpack() format string

      1 
      2 $array = unpack ("c2chars/nint", $binarydata);
      3       

    The resulting array will contain the entries "chars1", "chars2" and "int".

    For an explanation of the format codes see also: pack()

    Note that PHP internally stores integral values as signed. If you unpack a large unsigned long and it is of the same size as PHP internally stored values the result will be a negative number even though unsigned unpacking was specified.

    unserialize

    unserialize -- 저장가능한 형태로 표현된 문자열을 PHP 값으로 만들어준다.

    Description

    mixed unserialize (string str)

    unserialize() takes a single serialized variable (see serialize()) and converts it back into a PHP value. The converted value is returned, and can be an integer, double, string, array or object. If an object was serialized, its methods are not preserved in the returned value.

    Example 1. Unserialize() example

      1 
      2 // Here, we use unserialize() to load session data from a database
      3 // into $session_data.  This example complements the one described
      4 // with serialize().
      5 
      6 $conn = odbc_connect ("webdb", "php", "chicken");
      7 $stmt = odbc_prepare ($conn, "SELECT data FROM sessions WHERE id = ?");
      8 $sqldata = array ($PHP_AUTH_USER);
      9 if (!odbc_execute ($stmt, &$sqldata) || !odbc_fetch_into ($stmt, &$tmp)) {
     10     // if the execute or fetch fails, initialize to empty array
     11     $session_data = array();
     12 } else {
     13     // we should now have the serialized data in $tmp[0].
     14     $session_data = unserialize ($tmp[0]);
     15     if (!is_array ($session_data)) {
     16         // something went wrong, initialize to empty array
     17         $session_data = array();
     18     }
     19 }
     20       

    usleep

    usleep -- 실행을 백만분의 일초 단위로 지연시킨다.

    Description

    void usleep (int micro_seconds)

    The usleep() function delays program execution for the given number of micro_seconds.

    See also sleep().


    XXXVII. mSQL functions

    Table of Contents
    msql … send mSQL query
    msql_affected_rows … returns number of affected rows
    msql_close … close mSQL connection
    msql_connect … open mSQL connection
    msql_create_db … create mSQL database
    msql_createdb … create mSQL database
    msql_data_seek … move internal row pointer
    msql_dbname … get current mSQL database name
    msql_drop_db … drop (delete) mSQL database
    msql_dropdb … drop (delete) mSQL database
    msql_error … returns error message of last msql call
    msql_fetch_array … fetch row as array
    msql_fetch_field … get field information
    msql_fetch_object … fetch row as object
    msql_fetch_row … get row as enumerated array
    msql_fieldname … get field name
    msql_field_seek … set field offset
    msql_fieldtable … get table name for field
    msql_fieldtype … get field type
    msql_fieldflags … get field flags
    msql_fieldlen … get field length
    msql_free_result … free result memory
    msql_freeresult … free result memory
    msql_list_fields … list result fields
    msql_listfields … list result fields
    msql_list_dbs … list mSQL databases on server
    msql_listdbs … list mSQL databases on server
    msql_list_tables … list tables in an mSQL database
    msql_listtables … list tables in an mSQL database
    msql_num_fields … get number of fields in result
    msql_num_rows … get number of rows in result
    msql_numfields … get number of fields in result
    msql_numrows … get number of rows in result
    msql_pconnect … open persistent mSQL connection
    msql_query … send mSQL query
    msql_regcase … make regular expression for case insensitive match
    msql_result … get result data
    msql_select_db … select mSQL database
    msql_selectdb … select mSQL database
    msql_tablename … get table name of field

    msql

    msql -- mSQL 질의를 전송한다.

    Description

    int msql(string database, string query, int link_identifier);

    Returns a positive mSQL result identifier to the query result, or false on error.

    msql() selects a database and executes a query on it. If the optional link identifier isn't specified, the function will try to find an open link to the mSQL server and if no such link is found it'll try to create one as if msql_connect() was called with no arguments (see msql_connect()).

    msql_affected_rows

    msql_affected_rows -- 최근 질의에 영향을 받는 row의 개수를 구한다.

    Description

    int msql_affected_rows(int query_identifier);

    Returns number of affected ("touched") rows by a specific query (i.e. the number of rows returned by a SELECT, the number of rows modified by an update, or the number of rows removed by a delete).

    See also: msql_query()

    msql_close

    msql_close -- mSQL connection을 닫는다.

    Description

    int msql_close(int link_identifier);

    Returns true on success, false on error.

    msql_close() closes the link to a mSQL database that's associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed.

    Note that this isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution.

    msql_close() will not close persistent links generated by msql_pconnect().

    See also: msql_connect() and msql_pconnect().

    msql_connect

    msql_connect -- mSQL connection을 연다.

    Description

    int msql_connect(string hostname);

    Returns a positive mSQL link identifier on success, or false on error.

    msql_connect() establishes a connection to a mSQL server. The hostname argument is optional, and if it's missing, localhost is assumed.

    In case a second call is made to msql_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned.

    The link to the server will be closed as soon as the execution of the script ends, unless it's closed earlier by explicitly calling msql_close().

    See also msql_pconnect(), msql_close().

    msql_create_db

    msql_create_db -- mSQL database를 만든다.

    Description

    int msql_create_db(string database name, int [link_identifier] );

    msql_create_db() attempts to create a new database on the server associated with the specified link identifier.

    See also: msql_drop_db().

    msql_createdb

    msql_createdb -- mSQL database를 만든다.

    Description

    int msql_createdb(string database name, int [link_identifier] );

    Identical to msql_create_db().

    msql_data_seek

    msql_data_seek -- 내부적인 row pointer를 이동한다.

    Description

    int msql_data_seek(int result_identifier, int row_number);

    Returns true on success, false on failure.

    msql_data_seek() moves the internal row pointer of the mSQL result associated with the specified result identifier to pointer to the specifyed row number. The next call to msql_fetch_row() would return that row.

    See also: msql_fetch_row().

    msql_dbname

    msql_dbname -- 현재 mSQL database의 이름을 구한다.

    Description

    string msql_dbname(string result, int i);

    msql_dbname() returns the database name stored in position i of the result pointer returned from the msql_listdbs() function. The msql_numrows() function can be used to determine how many database names are available.

    msql_drop_db

    msql_drop_db -- mSQL database를 버린다.(drop = delete)

    Description

    int msql_drop_db(string database_name, int link_identifier);

    Returns true on success, false on failure.

    msql_drop_db() attempts to drop (remove) an entire database from the server associated with the specified link identifier.

    See also: msql_create_db().

    msql_dropdb

    msql_dropdb -- mSQL database를 버린다.(drop = delete)

    Description

    See msql_drop_db().

    msql_error

    msql_error -- 마지막 mSQL 호출의 에러 메세지를 반환한다.

    Description

    string msql_error( );

    Errors coming back from the mSQL database backend no longer issue warnings. Instead, use these functions to retrieve the error string.

    msql_fetch_array

    msql_fetch_array -- row를 배열로 가져온다.

    Description

    int msql_fetch_array(int query_identifier, int [result_type] );

    Returns an array that corresponds to the fetched row, or false if there are no more rows.

    msql_fetch_array() is an extended version of msql_fetch_row(). In addition to storing the data in the numeric indices of the result array, it also stores the data in associative indices, using the field names as keys.

    The second optional argument result_type in msql_fetch_array() is a constant and can take the following values: MSQL_ASSOC, MSQL_NUM, and MYSQL_BOTH.

    Be careful if you are retrieving results from a query that may return a record that contains only one field that has a value of 0 (or an empty string, or NULL).

    An important thing to note is that using msql_fetch_array() is NOT significantly slower than using msql_fetch_row(), while it provides a significant added value.

    For further details, also see msql_fetch_row()

    msql_fetch_field

    msql_fetch_field -- 필드 정보를 구한다.

    Description

    object msql_fetch_field(int query_identifier, int field_offset);

    Returns an object containing field information

    msql_fetch_field() can be used in order to obtain information about fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retreived by msql_fetch_field() is retreived.

    The properties of the object are:

    See also msql_field_seek().

    msql_fetch_object

    msql_fetch_object -- row를 객체(Object)로 가져온다.

    Description

    int msql_fetch_object(int query_identifier, int [result_type] );

    Returns an object with properties that correspond to the fetched row, or false if there are no more rows.

    msql_fetch_object() is similar to msql_fetch_array(), with one difference - an object is returned, instead of an array. Indirectly, that means that you can only access the data by the field names, and not by their offsets (numbers are illegal property names).

    The optional second argument result_type in msql_fetch_array() is a constant and can take the following values: MSQL_ASSOC, MSQL_NUM, and MSQL_BOTH.

    Speed-wise, the function is identical to msql_fetch_array(), and almost as quick as msql_fetch_row() (the difference is insignificant).

    See also: msql_fetch_array() and msql_fetch_row().

    msql_fetch_row

    msql_fetch_row -- row를 배열(enumerated array)로 가져온다.

    Description

    array msql_fetch_row(int query_identifier);

    Returns an array that corresponds to the fetched row, or false if there are no more rows.

    msql_fetch_row() fetches one row of data from the result associated with the specified result identifier. The row is returned as an array. Each result column is stored in an array offset, starting at offset 0.

    Subsequent call to msql_fetch_row() would return the next row in the result set, or false if there are no more rows.

    See also: msql_fetch_array(), msql_fetch_object(), msql_data_seek(), and msql_result().

    msql_fieldname

    msql_fieldname -- 필드 이름을 구한다.

    Description

    string msql_fieldname(int query_identifier, int field);

    msql_fieldname() returns the name of the specified field. query_identifier is the query identifier, and field is the field index. msql_fieldname($result, 2); will return the name of the second field in the result associated with the result identifier.

    msql_field_seek

    msql_field_seek -- 필드의 offset을 설정한다.

    Description

    int msql_field_seek(int query_identifier, int field_offset);

    Seeks to the specified field offset. If the next call to msql_fetch_field() won't include a field offset, this field would be returned.

    See also: msql_fetch_field().

    msql_fieldtable

    msql_fieldtable -- 해당 필드를 가져 온 Table 이름을 구한다.

    Description

    int msql_fieldtable(int result, int field);

    Returns the name of the table field was fetched from.

    msql_fieldtype

    msql_fieldtype -- 필드 type을 구한다.

    Description

    string msql_fieldtype(int query_identifier, int i);

    msql_fieldtype() is similar to the msql_fieldname() function. The arguments are identical, but the field type is returned. This will be one of "int", "string" or "real".

    msql_fieldflags

    msql_fieldflags -- 필드 flag를 구한다.

    Description

    string msql_fieldflags(int query_identifier, int i);

    msql_fieldflags() returns the field flags of the specified field. Currently this is either, "not null", "primary key", a combination of the two or "" (an empty string).

    msql_fieldlen

    msql_fieldlen -- 필드 길이를 구한다.

    Description

    int msql_fieldlen(int query_identifier, int i);

    msql_fieldlen() returns the length of the specified field.

    msql_free_result

    msql_free_result -- result memory를 풀어준다.

    Description

    int msql_free_result(int query_identifier);

    msql_free_result() frees the memory associated with query_identifier. When PHP completes a request, this memory is freed automatically, so you only need to call this function when you want to make sure you don't use too much memory while the script is running.

    msql_freeresult

    msql_freeresult -- result memory를 풀어준다.

    Description

    See msql_free_result()

    msql_list_fields

    msql_list_fields -- result field들을 나열한다.

    Description

    int msql_list_fields(string database, string tablename);

    msql_list_fields() retrieves information about the given tablename. Arguments are the database name and the table name. A result pointer is returned which can be used with msql_fieldflags(), msql_fieldlen(), msql_fieldname(), and msql_fieldtype(). A query identifier is a positive integer. The function returns -1 if a error occurs. A string describing the error will be placed in $phperrmsg, and unless the function was called as @msql_list_fields() then this error string will also be printed out.

    See also msql_error().

    msql_listfields

    msql_listfields -- result field들을 나열한다.

    Description

    See msql_list_fields().

    msql_list_dbs

    msql_list_dbs -- server의 mSQL database들을 나열한다.

    Description

    int msql_list_dbs(void);

    msql_list_dbs() will return a result pointer containing the databases available from the current msql daemon. Use the msql_dbname() function to traverse this result pointer.

    msql_listdbs

    msql_listdbs -- server의 mSQL database들을 나열한다.

    Description

    See msql_list_dbs().

    msql_list_tables

    msql_list_tables -- mSQL database의 table들을 나열한다.

    Description

    int msql_list_tables(string database);

    msql_list_tables() takes a database name and result pointer much like the msql() function. The msql_tablename() function should be used to extract the actual table names from the result pointer.

    msql_listtables

    msql_listtables -- mSQL database의 table들을 나열한다.

    Description

    See msql_list_tables().

    msql_num_fields

    msql_num_fields -- result의 field 개수를 구한다.

    Description

    int msql_num_fields(int result);

    msql_num_fields() returns the number of fields in a result set.

    See also: msql(), msql_query(), msql_fetch_field(), and msql_num_rows().

    msql_num_rows

    msql_num_rows -- result의 row 개수를 구한다.

    Description

    int msql_num_rows(string result);

    msql_num_rows() returns the number of rows in a result set.

    See also: msql(), msql_query(), and msql_fetch_row().

    msql_numfields

    msql_numfields -- result의 field 개수를 구한다.

    Description

    int msql_numfields(void);

    Identical to msql_num_fields().

    msql_numrows

    msql_numrows -- result의 row 개수를 구한다.

    Description

    int msql_numrows(void);

    Identical to msql_num_rows().

    msql_pconnect

    msql_pconnect -- 영구적인 mSQL 접속을 연다.

    Description

    int msql_pconnect(string hostname);

    Returns a positive mSQL persistent link identifier on success, or false on error.

    msql_pconnect() acts very much like msql_connect() with two major differences.

    First, when connecting, the function would first try to find a (persistent) link that's already open with the same host. If one is found, an identifier for it will be returned instead of opening a new connection.

    Second, the connection to the SQL server will not be closed when the execution of the script ends. Instead, the link will remain open for future use (msql_close() will not close links established by msql_pconnect()).

    This type of links is therefore called 'persistent'.

    msql_query

    msql_query -- mSQL 질의를 전송한다.

    Description

    int msql_query(string query, int link_identifier);

    msql_query() sends a query to the currently active database on the server that's associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed. If no link is open, the function tries to establish a link as if msql_connect() was called, and use it.

    Returns a positive mSQL result identifier on success, or false on error.

    See also: msql(), msql_select_db(), and msql_connect().

    msql_regcase

    msql_regcase -- 정규 표현식(regular expression)을 대,소문자를 가리지 않도록 한다.

    Description

    See sql_regcase().

    msql_result

    msql_result -- result data를 구한다.

    Description

    int msql_result(int query_identifier, int i, mixed field);

    Returns the contents of the cell at the row and offset in the specified mSQL result set.

    msql_result() returns the contents of one cell from a mSQL result set. The field argument can be the field's offset, or the field's name, or the field's table dot field's name (fieldname.tablename). If the column name has been aliased ('select foo as bar from...'), use the alias instead of the column name.

    When working on large result sets, you should consider using one of the functions that fetch an entire row (specified below). As these functions return the contents of multiple cells in one function call, they're MUCH quicker than msql_result(). Also, note that specifying a numeric offset for the field argument is much quicker than specifying a fieldname or tablename.fieldname argument.

    Recommended high-performance alternatives: msql_fetch_row(), msql_fetch_array(), and msql_fetch_object().

    msql_select_db

    msql_select_db -- mSQL database를 선택한다.

    Description

    int msql_select_db(string database_name, int link_identifier);

    Returns true on success, false on error.

    msql_select_db() sets the current active database on the server that's associated with the specified link identifier. If no link identifier is specified, the last opened link is assumed. If no link is open, the function will try to establish a link as if msql_connect() was called, and use it.

    Every subsequent call to msql_query() will be made on the active database.

    See also: msql_connect(), msql_pconnect(), and msql_query().

    msql_selectdb

    msql_selectdb -- mSQL database를 선택한다.

    Description

    See msql_select_db().

    msql_tablename

    msql_tablename -- 해당 필드를 가져 온 Table 이름을 구한다.

    Description

    string msql_tablename(int query_identifier, int field);

    msql_tablename() takes a result pointer returned by the msql_list_tables() function as well as an integer index and returns the name of a table. The msql_numrows() function may be used to determine the number of tables in the result pointer.

    Example 1. Msql_tablename() example

      1 
      2 <?php 
      3 msql_connect ("localhost");
      4 $result = msql_list_tables ("wisconsin");
      5 $i = 0;
      6 while ($i < msql_numrows ($result)) {
      7     $tb_names[$i] = msql_tablename ($result, $i);
      8     echo $tb_names[$i] . "<BR>";
      9     $i++; 
     10 }
     11 ?>
     12       

    XXXVIII. MySQL functions

    이 함수들은 MySQL 데이터베이스 서버에 접근할 수 있도록 해 준다.

    MySQL에 대한 좀 더 자세한 설명은 http://www.mysql.com/에서 찾을 수 있다.

    ( 역자주 : Solaris MySQL with pthreads note:
    만약 여러분이 MySQL이 threaded client library(default는 아니다)를 사용하고, PHP를 MySQL지원으로 컴파일한다면 아마 여러분은 다음과 같은 에러를 만나게 된다....

    Undefined first referenced
    symbol in file
    pthread_attr_setschedparam /opt/GNUmysql/lib/mysql/libmysqlclient.a(my_pthread.o)
    pthread_setschedparam /opt/GNUmysql/lib/mysql/libmysqlclient.a(my_pthread.o)

    이때는 Makefile을 손으로 고쳐주어야 한다. "LIBS"로 시작되는 줄을 찾아 "-lpthreads"를 줄의 마지막에 삽입한다. 그후에 "make"하면 될 것이다.)

    Table of Contents
    mysql_affected_rows … Get number of affected rows in previous MySQL operation
    mysql_change_user … Change logged in user on active connection
    mysql_close … close MySQL connection
    mysql_connect … Open a connection to a MySQL Server
    mysql_create_db … Create a MySQL database
    mysql_data_seek … Move internal result pointer
    mysql_db_query … Send an MySQL query to MySQL
    mysql_drop_db … Drop (delete) a MySQL database
    mysql_errno … Returns the number of the error message from previous MySQL operation
    mysql_error … Returns the text of the error message from previous MySQL operation
    mysql_fetch_array … Fetch a result row as an associative array
    mysql_fetch_field … Get column information from a result and return as an object
    mysql_fetch_lengths … Get max data size of each output in a result
    mysql_fetch_object … Fetch a result row as an object
    mysql_fetch_row … Get a result row as an enumerated array
    mysql_field_name … Get the name of the specified field in a result
    mysql_field_seek … Set result pointer to a specified field offset
    mysql_field_table … Get name of the table the specified field is in
    mysql_field_type … Get the type of the specified field in a result
    mysql_field_flags … Get the flags associated with the specified field in a result
    mysql_field_len … Returns the length of the specified field
    mysql_free_result … Free result memory
    mysql_insert_id … Get the id generated from the previous INSERT operation
    mysql_list_fields … List MySQL result fields
    mysql_list_dbs … List databases available on on MySQL server
    mysql_list_tables … List tables in a MySQL database
    mysql_num_fields … Get number of fields in result
    mysql_num_rows … Get number of rows in result
    mysql_pconnect … Open a persistent connection to a MySQL Server
    mysql_query … Send an SQL query to MySQL
    mysql_result … Get result data
    mysql_select_db … Select a MySQL database
    mysql_tablename … get table name of field

    mysql_affected_rows

    mysql_affected_rows -- 최근 질의에 영향을 받는 row의 개수를 구한다.

    Description

    int mysql_affected_rows(int [link_identifier] );

    mysql_affected_rows() returns the number of rows affected by the last INSERT, UPDATE or DELETE query on the server associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed.

    If the last query was a DELETE query with no WHERE clause, all of the records will have been deleted from the table but this function will return zero.

    This command is not effective for SELECT statements, only on statements which modify records. To retrieve the number of rows returned from a SELECT, use mysql_num_rows().

    mysql_change_user

    (PHP3 >= 3.0.13)

    mysql_change_user -- 현재 활성화 되어있는 연결에 LOGIN되어있는 사용자를 바꾼다.

    Description

    int mysql_change_user (string user, string password [, string database [, int link_identifier]])

    mysql_change_user() changes the logged in user on the current active connection, or, if specified on the connection given by the link identifier. If a database is specified, this will default or current database after the user has been changed. If the new user/password combination fails to be authorized the current connected user stays active.

    Note: This function was introduced in PHP 3.0.13 and requires MySQL 3.23.3 or higher.

    mysql_close

    mysql_close -- MySQL connection을 닫는다.

    Description

    int mysql_close(int [link_identifier] );

    Returns: true on success, false on error

    mysql_close() closes the link to a MySQL database that's associated with the specified link identifier. If the link identifier isn't specified, the last opened link is assumed.

    Note that this isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution.

    mysql_close() will not close persistent links generated by mysql_pconnect().

    See also: mysql_connect(), and mysql_pconnect().

    mysql_connect

    mysql_connect -- MySQL server connection을 연다.

    Description

    int mysql_connect(string [hostname [:port] [:/path/to/socket] ] , string [username] , string [password] );

    Returns: A positive MySQL link identifier on success, or false on error.

    mysql_connect() establishes a connection to a MySQL server. All of the arguments are optional, and if they're missing, defaults are assumed ('localhost', user name of the user that owns the server process, empty password).

    The hostname string can also include a port number. eg. "hostname:port" or a path to a socket eg. ":/path/to/socket" for the localhost.

    Note: Support for ":port" wass added in 3.0B4.

    Support for the ":/path/to/socket" was added in 3.0.10.

    In case a second call is made to mysql_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned.

    The link to the server will be closed as soon as the execution of the script ends, unless it's closed earlier by explicitly calling mysql_close().

    See also mysql_pconnect(), and mysql_close().

    mysql_create_db

    mysql_create_db -- MySQL database를 만든다.

    Description

    int mysql_create_db(string database name, int [link_identifier] );

    mysql_create_db() attempts to create a new database on the server associated with the specified link identifier.

    See also: mysql_drop_db(). For downwards compatibility mysql_createdb() can also be used.

    mysql_data_seek

    mysql_data_seek -- internal row pointer를 옮긴다.

    Description

    int mysql_data_seek(int result_identifier, int row_number);

    Returns: true on success, false on failure

    mysql_data_seek() moves the internal row pointer of the MySQL result associated with the specified result identifier to point to the specified row number. The next call to mysql_fetch_row() would return that row.

    mysql_db_query

    mysql_db_query -- MySQL 질의를 전송한다.

    Description

    int mysql_db_query(string database, string query, int [link_identifier]);

    Returns: A positive MySQL result identifier to the query result, or false on error.

    mysql_db_query() selects a database and executes a query on it. If the optional link identifier isn't specified, the function will try to find an open link to the MySQL server and if no such link is found it'll try to create one as if mysql_connect() was called with no arguments

    See also mysql_connect(). For downwards compatibility mysql() can also be used.

    mysql_drop_db

    mysql_drop_db -- MySQL database를 버린다.(drop = delete)

    Description

    int mysql_drop_db(string database_name, int [link_identifier] );

    Returns: true on success, false on failure.

    mysql_drop_db() attempts to drop (remove) an entire database from the server associated with the specified link identifier.

    See also: mysql_create_db(). For downward compatibility mysql_dropdb() can also be used.

    mysql_errno

    mysql_errno -- 마지막 MySQL 호출의 에러 번호를 반환한다.

    Description

    int mysql_errno(int [link_identifier] );

    Errors coming back from the mySQL database backend no longer issue warnings. Instead, use these functions to retrieve the error number.

    <?php
    mysql_connect("marliesle");
    echo mysql_errno().": ".mysql_error()."<BR>";
    mysql_select_db("nonexistentdb");
    echo mysql_errno().": ".mysql_error()."<BR>";
    $conn = mysql_query("SELECT * FROM nonexistenttable");
    echo mysql_errno().": ".mysql_error()."<BR>";
    ?>

    See also: mysql_error()

    mysql_error

    mysql_error -- 마지막 MySQL 호출의 에러 메세지를 반환한다.

    Description

    string mysql_error(int [link_identifier] );

    Errors coming back from the mySQL database backend no longer issue warnings. Instead, use these functions to retrieve the error string.

    <?php
    mysql_connect("marliesle");
    echo mysql_errno().": ".mysql_error()."<BR>";
    mysql_select_db("nonexistentdb");
    echo mysql_errno().": ".mysql_error()."<BR>";
    $conn = mysql_query("SELECT * FROM nonexistenttable");
    echo mysql_errno().": ".mysql_error()."<BR>";
    ?>

    See also: mysql_errno()

    mysql_fetch_array

    mysql_fetch_array -- row를 배열로 가져온다.

    Description

    array mysql_fetch_array(int result, int [result_type] );

    Returns an array that corresponds to the fetched row, or false if there are no more rows.

    mysql_fetch_array() is an extended version of mysql_fetch_row(). In addition to storing the data in the numeric indices of the result array, it also stores the data in associative indices, using the field names as keys.

    If two or more columns of the result have the same field names, the last column will take precedence. To access the other column(s) of the same name, you must the numeric index of the column or make an alias for the column.

    select t1.f1 as foo t2.f1 as bar from t1, t2

    An important thing to note is that using mysql_fetch_array() is NOT significantly slower than using mysql_fetch_row(), while it provides a significant added value.

    The optional second argument result_type in mysql_fetch_array() is a constant and can take the following values: MYSQL_ASSOC, MYSQL_NUM, and MYSQL_BOTH.

    For further details, also see mysql_fetch_row()

    Example 1. mysql fetch array

    <?php 
    mysql_connect($host,$user,$password);
    $result = mysql_db_query("database","select * from table");
    while($row = mysql_fetch_array($result)) {
        echo $row["user_id"];
        echo $row["fullname"];
    }
    mysql_free_result($result);
    ?>

    mysql_fetch_field

    mysql_fetch_field -- 필드 정보를 구한다.

    Description

    object mysql_fetch_field(int result, int [field_offset] );

    Returns an object containing field information.

    mysql_fetch_field() can be used in order to obtain information about fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retreived by mysql_fetch_field() is retreived.

    The properties of the object are:

    See also mysql_field_seek()

    mysql_fetch_lengths

    mysql_fetch_lengths -- output column의 최대 data 길이를 구한다.

    Description

    int mysql_fetch_lengths(int result);

    Returns: An array that corresponds to the lengths of each field in the last row fetched by mysql_fetch_row(), or false on error.

    mysql_fetch_lengths() stores the lengths of each result column in the last row returned by mysql_fetch_row() in an array, starting at offset 0.

    See also: mysql_fetch_row().

    mysql_fetch_object

    mysql_fetch_object -- row를 객체(Object)로 가져온다.

    Description

    object mysql_fetch_object(int result, int [result_type]);

    Returns an object with properties that correspond to the fetched