BACKRUSH  대화방입장  유닉스명령  다음  자료실  Ascii Table   Exploit   원격접속  달력,시간   프로세스  
지하철노선   Whois   RFC문서   SUN FAQ   SUN FAQ1   C메뉴얼   PHP메뉴얼   너구리   아스키월드 아이피서치
한글 PHP3 Manual

PHP3 Manual

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

Edited by Stig Sæther Bakken

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

Copyright ⓒ 1997, 1998 by the PHP Documentation Group


Dedication

작성일 : 1999-01-15

Release : 3.0.7

차례
서문
이 매뉴얼에 대하여
I. Language Reference
1. PHP3의 소개 (An Introduction to PHP3)
2. PHP3의 기능 (PHP3 features)
3. 설치 (Installation)
4. 설정 (Configuration)
5. 구문과 문법 (Syntax and grammar)
6. 언어 구성 (Language constructs)
7. 표현식 (Expressions)
II. 함수 목록 (Function Reference)
I. Adabas D Functions
II. Apache Specific Functions
III. Array Functions
IV. Aspell Functions
V. BC (Arbitrary Precision) Functions
VI. Calendar Functions
VII. Date/Time Functions
VIII. dBase Functions
IX. dbm Functions
X. Directory Functions
XI. Dynamic Loading Functions
XII. Program Execution Functions
XIII. filePro Functions
XIV. Filesystem Functions
XV. Functions related to HTTP
XVI. Hyperwave functions
XVII. Image functions
XVIII. IMAP Functions
XIX. PHP options & information
XX. Informix Functions
XXI. InterBase Functions
XXII. LDAP Functions
XXIII. Mail Functions
XXIV. Mathematical Functions
XXV. Miscellaneous Functions
XXVI. mSQL Functions
XXVII. MS SQL Server Functions
XXVIII. MySQL Functions
XXIX. Sybase Functions
XXX. Network Functions
XXXI. ODBC Functions
XXXII. Oracle 8 functions
XXXIII. Oracle functions
XXXIV. PDF functions
XXXV. PostgreSQL functions
XXXVI. Regular expression functions
XXXVII. Semaphore and Shared Memory Functions
XXXVIII. Solid Functions
XXXIX. SNMP Functions
XL. String functions
XLI. URL functions
XLII. Variable functions
XLIII. Vmailmgr Functions
XLIV. WDDX functions
XLV. Gz-file Functions
XLVI. XML Parser Functions
III. 부록 (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. Language Reference

Table of Contents
1. PHP3의 소개 (An Introduction to PHP3)
2. PHP3의 기능 (PHP3 features)
3. 설치 (Installation)
4. 설정 (Configuration)
5. 구문과 문법 (Syntax and grammar)
6. 언어 구성 (Language constructs)
7. 표현식 (Expressions)


Chapter 1. PHP3의 소개 (An introduction to PHP3)

Table of Contents
PHP3란 무엇인가?
PHP3는 무엇을 할 수 있는가?
PHP의 역사


PHP3란 무엇인가?

PHP Version 3.0은 server-side HTML-embedded scripting language입니다.


PHP3는 무엇을 할 수 있는가?

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

Oracle

Adabas D

Sybase

FilePro

mSQL

Velocis

MySQL

Informix

Solid

dBase

ODBC

Unix dbm

PostgreSQL

 


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의 사용수보다 많다.


Chapter 2. PHP3의 기능 (PHP3 features)


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 2-1. HTTP Authentication example

<?php
  if(!$PHP_AUTH_USER) {
    Header("WWW-authenticate: basic realm=\"My Realm\"");
    Header("HTTP/1.0 401 Unauthorized");
    echo "Text to send if user hits Cancel button\n"
    exit;
  } else {
    echo "Hello $PHP_AUTH_USER.<P>";
    echo "You entered $PHP_AUTH_PW as your password.<P>";
  }
?>

여러분은 $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"버튼을 만드는데 사용한다.

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

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


PHP에서 GIF의 생성 (GIF creation with PHP)

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

Example 2-2. GIF creation with PHP

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

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


File upload support

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시키면 가능하다.)

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

Example 2-3. File Upload Form

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

여기서_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변수를 가지고 특정한 타입에 맞지 않는 파일을 버릴 수 있다. 어떤 로직이던, 여러분은 임시 디렉토리에 있는 파일을 지우거나 나중에 필요할 경우에는 다른 곳에 이동시켜야 한다.

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


HTTP cookie support

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

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


Database support

PHP는 native mode와 ODBC를 통해 수많은 database를 사용할 수 있다.

Adabas D

MySQL

dBase

Oracle

Empress

PostgreSQL

FilePro

Solid

Informix

Sybase

InterBase

Velocis

mSQL

Unix dbm


Regular expressions

Regular expression은 PHP에서 복잡한 문자열 조작을 위해 사용한다. regular expression을 지원하기 위해 다음의 함수가 사용된다. :

위의 함수들은 regular expression 문자열을 첫 인수(argument)로 가진다. PHP는 Posix 1003.2에서 정의된 Posix 확장 regular expression을 사용한다. Posix regular expressions에 대한 자세한 설명은 PHP distribution의 regex디렉토리에 있는 regex man page를 참조하기 바란다.

Example 2-4. Regular expression examples

ereg("abc",$string);
/* Returns true if "abc"
is found anywhere in $string. */
ereg("^abc",$string);
/* Returns true if "abc"
is found at the beginning of $string. */
ereg("abc$",$string);
/* Returns true if "abc"
is found at the end of $string. */
eregi("(ozilla.[23]|MSIE.3)",$HTTP_USER_AGENT);
/* Returns true if client browser
is Netscape 2, 3 or MSIE 3. */
ereg("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)",
$string,$regs);
/* Places three space separated words
into $regs[1], $regs[2] and $regs[3]. */
ereg_replace("^","<BR>",$string);
/* Put a <BR> tag at the beginning of $string. */
ereg_replace("$","<BR>",$string);
/* Put a <BR> tag at the end of $string. */
ereg_replace("\n","",$string);
/* Get rid of any carriage return
characters in $string. */


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라는 전역변수에서 에러 메시지를 찾을 수 있을 것이다.


Connection Handling

이 기능은 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을 반환한다.


PHP source viewer


Chapter 3. 설치 (Installation)

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


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


Downloading Source

여러분은 최신버전의 소스를 http://www.php.net에서 내려 받을 수 있다.


빠른 설치 방법 (Apache Module Version)

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


설정 (Configuration)

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

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


Apache 모듈

PHP3를 아파치 모듈로 만들려면, "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 모듈

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


CGI version

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


Database 지원 옵션

PHP3는 다음의 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중 하나를 지원하도록 한다. 만약 PHP3가 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


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에서 찾을 수 있다.


기타 설정 옵션


--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

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


--with-system-regex

      --with-system-regex

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


--with-config-file-path

      --with-config-file-path=DIR     

PHP가 시작될 때 사용할 the 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     

라이브러리나 실행 파일에 디버그 정보를 포함시키지 않는다. 디버그 정보는 버그의 위치를 정확하게 나타내는데 도움을 준다. 따라서, PHP3가 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 될 수 있다.

See also the magic_quotes_gpc and the magic_quotes_sybase directives.


--enable-debugger

      --enable-debugger     

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

See also the Debugger Configuration directives in the configuration file.


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


--enable-url-includes

      --enable-url-includes     

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

See also the include_path option in the configuration file.


--disable-syntax-hl

      --disable-syntax-hl 

syntax highlighting 기능을 끈다.


CPPFLAGS and LDFLAGS

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


Building

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

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


VPATH


Testing

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


Benchmarking

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


PHP3 Installation Guide for Windows

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

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

Personal Web Server (Newest version recommended)

Internet Information Server 3 or 4

Apache 1.3.x

Omni HTTPd 2.0b1


PHP3에서의 설정의 변경

모든 모듈은 'php3_'로 시작되어야 합니다. You will need to change your php3.ini file and/or any scripts loading extensions with the dl() function (or you could always remove the 'php3_' prefix). 이것은 php modules과 다른 라이브러리간의 혼란을 피하기 위한 것이다.

ChangeLogFAQ, 최신의 문서들은 공식 PHP 웹사이트와 이들의 미러 사이트에서 찾을 수 있습니다.


일반적인 설치 과정

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


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

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


Windows 9x/NT와 Apache 1.3.x

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

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

To use the source code highlighting feature, simply create a PHP script file and stick this code in: . Substitute original_php_script.php3 with the name of the file you wish to show the source of. (this is only one way of doing it).

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 3-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

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


Bug reports

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


Other problems

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

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


Security

PHP는 매우 강력한 도구이다. 다른 많은 강력한 도구와 같이, 이 강력한 기능이 여러분 자신에게 피해를 줄 수도 있다. PHP를 무심코 사용하다 보면, 여러분의 시스템에 심각한 보안 문제를 가져다 줄수도 있다. 이러한 문제를 방지하는 가장 좋은 방법은 여러분이 하는 작업이 무엇인지를 확실히 알고 하는 것이다. 보다 자세한 사항은 Security chapter를 읽어보기 바란다.


Chapter 4. 설정(Configuration)


The php3.ini file

php3.ini파일은 PHP의 parser가 실행 될 때 읽혀진다. 서버 모듈 형태의 PHP는 이 작업을 서버가 실행 될 때 한번만 하게 된다. CGI형태의 경우는 불려질 때마다 매번 일어난다.

이곳에 나열된 개개의 지시자(directive)들은 그것과 일치하는 Apache의 httpd.conf 지시자를 가진다. httpd.conf에서 그 지시자를 사용하는 방법은 단순히 이곳에 나열된 이름 앞에 php3_를 붙이면 된다.

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

대부분의 설정값은 phpinfo()함수를 사용하여 확인해 볼 수 있다.


General Configuration Directives

auto_append_file string

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

none이라는 특별한 값을 주게 되면 auto-appending이 disable된다.

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

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 4-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로 지정된다.

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

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 4-1. UNIX include_path

include_path=.:/home/httpd/php-lib

Example 4-2. Windows include_path

include_path=.;c:\www\phplib

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

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 (<? ?>)의 사용을 허가하거나 불허한다. 여러분은 PHP3와 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)로 작동되거 한다.

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.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의 이름. 기본값은 없다.


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 접속의 최대 개수


Apache Module


Apache module configuration directives


CGI redirection module/action module


CGI


Virtual hosts


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"로 설정되어 있다.)


Chapter 5. 구문과 문법 (Syntax and grammar)Chapter 5. 구문과 문법 (Syntax and grammar)

PHP의 구문들은 기본적으로 C에서 빌려왔다. 또한 자바와 Perl에서도 영향을 받았다.


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

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

Example 5-1. Ways of escaping from HTML

1.  <? echo("this is the simplest, an SGML processing instruction\n"); ?>
2.  <?php echo("if you want to serve XML documents, do like this\n"); ?>
3.  <script language="php">
      echo("some editors (like FrontPage) don't like processing instructions");
    </script>
4. <% echo("As of PHP 3.0.4 you may optionally use ASP-style tags"); %>


명령 구분 (Instruction separation)

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

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

  <?php
      echo("this is example\n");
  ?>
 
  <? echo("this is example\n") ?>


변수 형태 (Variable types)

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

PHP supports the following types:

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

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

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

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


변수 초기화 (Variable initialization)

PHP에서 변수를 초기화하는 것은 단순히 이 변수에 어떤 값을 지정해 주면 된다. Array나 Object등의 경우는 내부적으로 조금 다를 수도 있으나 대부분의 경우 이것이 가장 직접적이고 수월한 방법이다.


배열 초기화 (Initializing Arrays)

배열은 주가지방법으로 초기화 될 수 있다 : 값을 순차적으로 대입하는 방법(sequential assign)과, array()라는 construct를 사용할 수 있다. (Array functions 부분에 자세한 설명이 있다).

배열에 순차적으로 값을 대입하는 방법은 배열에 첨자 없이 그냥 대입하면 된다. 그러면 새로 대입한 값은 그 배열의 제일 마지막에 첨가된다.

$names[] = "Jill";   // $names[0] = "Jill"
$names[] = "Jack";   // $names[1] = "Jack"  

C나 Perl과 마찬가지로 배열의 처음은 1이 아닌 0으로 시작한다.


객체의 초기화 (Initializing objects)

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

class foo {
   function do_foo() { 
      echo "Doing foo."; 
   }
}
$bar = new foo;
$bar->do_foo();   


변수 사용 범위 (Variable Scope)

변수가 사용가능한 곳은 그 변수가 선언된 곳 안에서 만이다. PHP 변수의 대부분은 한 개의 범위(single scope)만을 가지고 있다. 기본적으로 함수 안에서 선언된 것은 함수 안에서만 사용되는 지역 변수이다. 또한 함수 안에서 사용되는 함수들은 기본적으로 지역 변수라고 가정하고 찾게 된다. 예를 들어:

    $a=1; /* global scope */
    Function Test() {
        echo $a; /* reference to local scope variable */
    }
    Test();

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

    $a=1;
    $b=2;
    Function Sum() {
        global $a,$b;
        $b = $a + $b;
    } 
    Sum();
    echo $b;

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

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

    $a=1;
    $b=2;
    Function Sum() {
        $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
    } 
    Sum();
    echo $b;

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

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

    Function Test() {
        $a=0;
        echo $a;
        $a++;
    }

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

    Function Test() {
        static $a=0;
        echo $a;
        $a++;
    }

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

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

Function Test() {
static $count=0;
$count++;
echo $count;
if($count < 10) {
Test();
}
$count--;
}

 


가변 변수 (Variable variables)

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

$a = "hello"; 

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

$$a = "world";  

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

echo "$a ${$a}";    

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

echo "$a $hello";  

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 5-2. Simple form variable

<form action="foo.php3" method="post">
Name: <input type="text" name="name"><br>
<input type="submit">
</form>

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

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

Example 5-3. More complex form variables

<form action="array.html" method="post">
Name: <input type="text" name="personal[name]"><br>
Email: <input type="text" name="personal[email]"><br>
Beer: <br>
<select multiple name="beer[]">
<option value="warthog">Warthog
<option value="guinness">Guinness
</select>
<input type="submit">
</form>

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


IMAGE SUBMIT의 변수 이름

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

<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이름에 []를 더하면 된다. 예를 들어 :

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

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

Example 5-2. SetCookie Example

$Count++;
SetCookie("Count",$Count, time()+3600);
SetCookie("Cart[$Count]",$item, time()+3600); 


환경 변수 (Environment variables)

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

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

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


Server configuration directives


Type 전환 (Type juggling)

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

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

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

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

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


변수의 Type 판단 (Determining variable types)

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


Type casting

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

$foo = 10;   // $foo is an integer
$bar = (double) $foo;   // $bar is a double   

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

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

$foo = (int) $bar;
$foo = ( int ) $bar;


문자열 변환 (String conversion)

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

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

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

$foo = 1 + "10.5";      // $foo is a double (11.5)
$foo = 1 + "-1.3e3";    // $foo is a double (-1299)
$foo = 1 + "bob-1.3e3"; // $foo is a double (1)
$foo = 1 + "bob3";      // $foo is an integer (1)
$foo = 1 + "10 Small Pigs";     // $foo is an integer (11)
$foo = 1 + "10 Little Piggies"; // $foo is a double (11); the string contains 'e'
$foo = "10.0 pigs " + 1;        // $foo is int (11)
$foo = "10.0 pigs " + 1.0;      // $foo is double (11)

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

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


배열 (Array manipulation)

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

$a[0] = "abc";
$a[1] = "def";
$b["foo"] = 13; 

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

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

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

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

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


Chapter 6. Language constructs

PHP3 스크립트는 문장(statement)의 나열로 만들어진다. 문장에는 대입문(assignment), 함수호출(function call), 순환문(loop), 조건문(conditional statement)등이 있다. 하나의 문장은 보통 세미콜론( ; )으로 끝맺는다. 또한, 문장들은 중괄호( { } )를 사용하여 하나의 복문장 (statement-group)으로 만들 수 있다. 이 복문장은 하나의 문장처럼 사용될 수 있다. 이 장에서는 여러 가지 문장의 type에 대해 기술되어 있다. (역자주: 이곳의 기본적인 문법은 C를 안다고 가정하고 원문을 약간 요약하여 정리하였음)


상수(Constants)

PHP는 약간의 기본적인 상수들을 제공하고, 실행시 상수를 설정할 수 있는 메카니즘을 지원한다. 상수는 변수와 비슷하다. 그러나 약간의 문법에 차이가 있다.

기본적으로 제공되는 상수는 __FILE__과 __LINE__이다. 이 상수들은 현재 처리중인 파일명과 라인 번호를 내용으로 한다.

Example 6-1. Using __FILE__ and __LINE__

<?php
function report_error($file, $line, $message) {
echo "An error occured in $file on line $line: $message.";
}
report_error(__FILE__,__LINE__, "Something went wrong!");
?>

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

Example 6-2. Defining Constants

<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
?>


표현식 (Expressions)

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

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

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

      function foo()
      {
          return 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 사용자들은 아무것도 바뀌지 않았다고 느낄 것이다. PHP3는 거의 모든 것이 표현식으로 표현된다는 점에서, 표현 중심 언어 (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'으로 표현할 수 있는 것이다. -=, *=, /=, .= 등도 사용할 수 있다.

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

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

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

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

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


IF

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

if (expr)
  statement

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

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

if ($a > $b)
  print "a is bigger than b";

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

if ($a>$b) {
  print "a is bigger than b";
  $b = $a;
}


ELSE

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

if ($a>$b) {
    print "a is bigger than b";
} else {
    print "a is NOT bigger than b";
}


ELSEIF

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

if ($a > $b) {
    print "a is bigger than b";
} elseif ($a == $b) {
    print "a is equal to b";
} else {
    print "a is smaller than b";
}

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


IF의 다른 표현 (Alternative syntax for IF statements): IF(): ... ENDIF;

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

<?php if ($a==5): ?>
A = 5
<?php endif; ?>

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

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

if ($a==5):
    print "a equals to 5";
    print "...";
elseif ($a==6):
    print "a equals to 6";
    print "!!!";
else
    print "a is not 5 nor 6";
endif;


WHILE

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

    WHILE(expr) statement

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

    WHILE(expr): statement ... ENDWHILE;

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

/* example 1 */
$i=1;
while ($i<=10) {
    print $i++;  /* the printed value would be $i before the increment (post-increment) */
}
/* example 2 */
$i=1;
while ($i<=10):
    print $i;
    $i++;
endwhile;


DO..WHILE

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

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

$i = 0;
do {
    print $i;
} while ($i>0);


FOR

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

    FOR (expr1; expr2; expr3) statement

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

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

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

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

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

/* example 1 */
for ($i=1; $i<=10; $i++) {
    print $i;
}
/* example 2 */
for ($i = 1;;$i++) {
    if ($i > 10) {
        break;
    }
    print $i;
}
/* example 3 */
$i = 1;
for (;;) {
    if ($i > 10) {
        break;
    }
    print $i;
    $i++;
}
/* example 4 */
for ($i=1; $i<=10; print $i, $i++) ;

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

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

FOR (expr1; expr2; expr3): statement; ...; endfor;

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


BREAK

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

$i = 0;
while ($i < 10) {
if ($arr[$i] == "stop") {
break;
}
$i++;
}


CONTINUE

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

while (list($key,$value) = each($arr)) {
if ($key % 2) { // skip even members
continue;
}
do_something_odd($value);
}


SWITCH

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

/* example 1 */
if ($i == 0) {
    print "i equals 0";
}
if ($i == 1) {
    print "i equals 1";
}
if ($i == 2) {
    print "i equals 2";
}
 
/* example 2 */
switch ($i) {
    case 0:
        print "i equals 0";
        break;
    case 1:
        print "i equals 1";
        break;
    case 2:
        print "i equals 2";
        break;
}

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

/* example 3 */
switch ($i) {
  case 0:
    print "i equals 0";
  case 1:
    print "i equals 1";
  case 2:
    print "i equals 2";
}

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

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

/* example 4 */
switch ($i) {
    case 0:
        print "i equals 0";
        break;
    case 1:
        print "i equals 1";
        break;
    case 2:
        print "i equals 2";
        break;
    default:
        print "i is not equal to 0, 1 or 2";
}

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


REQUIRE

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

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

require('header.inc');


INCLUDE

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

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

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

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

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

/* This is WRONG and will not work as desired. */
if ($condition)
include($file);
else
include($other);
/* This is CORRECT. */
if ($condition) {
include($file);
} else {
include($other);
}

지정된 파일이 평가될 때, 파서는 "HTML-mode"에서 시작한다. 따라서 PHP 문장은 PHP 시작 택(<?)을 주고 시작하여야 한다.

See also readfile(), virtual().


FUNCTION

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

function foo( $arg_1, $arg_2, ..., $arg_n ) {
   echo "Example function.\n";
   return $retval;
}
     

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


Returning values

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

function my_sqrt( $num ) {
   return $num * $num;
}
echo my_sqrt( 4 );   // outputs '16'.  

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

function foo() {
   return array( 0, 1, 2 );
}
list( $zero, $one, $two ) = foo();  


Arguments

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

PHP3는 passing by value(기본적으로 이것을 사용)와 passing by reference, default argument values의 3가지 방법을 제공한다. 가변 길이(Variable-length) argument list는 제공되지 않는다. 그러나 배열을 통해 전달한다면 비슷한 효과를 낼 수 있다.


Passing by reference

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

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

function foo( &$bar ) {
   $bar .= ' and something extra.';
}
$str = 'This is a string, ';
foo2( $str );
echo $str;    // outputs 'This is a string, and something extra.'   

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

function foo( $bar ) {
   $bar .= ' and something extra.';
}
$str = 'This is a string, ';
foo2( $str );
echo $str;    // outputs 'This is a string, '
foo2( &$str );
echo $str;    // outputs 'This is a string, and something extra.'   


Default values

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

function makecoffee( $type = "cappucino" ) {
   echo "Making a cup of $type.\n";
}
echo makecoffee();
echo makecoffee( "espresso" );     

위의 단편의 실행 결과는 다음과 같다 :

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

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

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

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

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 . 

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

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

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

Making a bowl of acidophilus raspberry.  


OLD_FUNCTION

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

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

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


CLASS

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

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

<?php
class Cart {
var $items; // Items in our shopping cart
// Add $num articles of $artnr to the cart
function add_item($artnr, $num) {
$this->items[$artnr] += $num;
}
// Take $num articles of $artnr out of the cart
function remove_item($artnr, $num) {
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true;
} else {
return false;
}
}
}
?>

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

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

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

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

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

class Named_Cart extends Cart {
var $owner;
function set_owner($name) {
$this->owner = $name;
}
}

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

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

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

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

class Auto_Cart extends Cart {
function Auto_Cart() {
$this->add_item("10", 1);
}
}

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

class Constructor_Cart {
function Constructor_Cart($item = "10", $num = 1) {
$this->add_item($item, $num);
}
}
// Shop the same old boring stuff.
$default_cart = new Constructor_Cart;
// Shop for real...
$different_cart = new Constructor_Cart("20", 17);


Chapter 7. 표현식 (Expressions)


연산자 (Operators)


산술 연산자 (Arithmetic Operators)

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

Table 7-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를 나눈 나머지.

나누기 연산자("/") 는 두 개의 피연산자가 모두 정수값일 때 (혹은 정수로 변환되는 string일 때), 결과값으로 나눗셈의 몫에 해당하는 정수를 반환한다. 두 피연산자가 실수일 때는 실수 나눗셈을 한다.


문자열 연산자 (String Operators)

문자열 연산자는 딱 한 개만 있다. 두 문자열을 연결하는 concatenation 연산자 (".") 만이 있다.

$a = "Hello ";
$b = $a . "World!"; // now $b = "Hello World!"


대입 연산자 (Assignment Operators)

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

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

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

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

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


Bit 단위 연산자 (Bitwise Operators)

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

Table 7-2. Bitwise Operators

example

name

result

$a & $b

And

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

$a | $b

Or

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

~ $a

Not

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


Logical Operators

Table 7-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" 연산자가 두가지의 다른 형태를 가지고 있는 이유는 이 연산자들이 서로 다른 우선순위를 가지고 있기 때문이다. (아래를 보라.)


비교 연산자 (Comparison Operators)

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

Table 7-4. Comparson Operators

example

name

result

$a == $b

Equal

$a와 $b가 같으면 true.

$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.


연산자 우선 순위 (Precedence)


II. Function Reference

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

Table of Contents
I. Adabas D Functions
II. Apache Specific Functions
III. Array Functions
IV. Aspell Functions
V. BC (Arbitrary Precision) Functions
VI. Calendar Functions
VII. Date/Time Functions
VIII. dBase Functions
IX. dbm Functions
X. Directory Functions
XI. Dynamic Loading Functions
XII. Program Execution Functions
XIII. filePro Functions
XIV. Filesystem Functions
XV. Functions related to HTTP
XVI. Hyperwave functions
XVII. Image functions
XVIII. IMAP Functions
XIX. PHP options & information
XX. Informix Functions
XXI. InterBase Functions
XXII. LDAP Functions
XXIII. Mail Functions
XXIV. Mathematical Functions
XXV. Miscellaneous Functions
XXVI. mSQL Functions
XXVII. MS SQL Server Functions
XXVIII. MySQL Functions
XXIX. Sybase Functions
XXX. Network Functions
XXXI. ODBC Functions
XXXII. Oracle 8 functions
XXXIII. Oracle functions
XXXIV. PDF functions
XXXV. PostgreSQL functions
XXXVI. Regular expression functions
XXXVII. Semaphore and Shared Memory Functions
XXXVIII. Solid Functions
XXXIX. SNMP Functions
XL. String functions
XLI. URL functions
XLII. Variable functions
XLIII. Vmailmgr Functions
XLIV. WDDX functions
XLV. Gz-file Functions
XLVI. XML Parser Functions


I. Adabas D Functions

Table of Contents
ada_afetch
ada_autocommit
ada_close
ada_commit
ada_connect
ada_exec
ada_fetchrow
ada_fieldname
ada_fieldnum
ada_fieldtype
ada_freeresult
ada_numfields
ada_numrows
ada_result
ada_resultall
ada_rollback

Adabas D 함수들은 별로 좋은 평가를 받지 못함다. 아마도 Unified ODBC functions을 대신 쓰는 것이 좋을 것이다.

ada_afetch

ada_afetch -- result row를 배열로 가져온다.

Description

See odbc_fetch_into()

ada_autocommit

ada_autocommit -- autocommit 동작을 하거나 안하게 한다.

Description

See odbc_autocommit().

ada_close

ada_close -- Adabas D server로의 연결을 닫는다.

Description

See odbc_close().

ada_commit

ada_commit -- transaction을 commit 한다.

Description

See odbc_commit()

ada_connect

ada_connect -- Adabas D datasource에 연결한다.

Description

See odbc_connect().

ada_exec

ada_exec -- SQL 문장을 준비하고 실행한다.

Description

See odbc_exec() or odbc_do().

ada_fetchrow

ada_fetchrow -- result로 부터 row를 가져온다.

Description

See odbc_fetch_row().

ada_fieldname

ada_fieldname -- columnname을 구한다.

Description

See odbc_field_name().

ada_fieldnum

ada_fieldnum -- column number를 구한다.

Description

See odbc_field_num().

ada_fieldtype

ada_fieldtype -- field의 datatype을 구한다.

Description

See odbc_field_type().

ada_freeresult

ada_freeresult -- result에 할당된 resource를 해제한다.

Description

See odbc_free_result().

ada_numfields

ada_numfields -- result의 column 개수를 구한다.

Description

See odbc_num_fields().

ada_numrows

ada_numrows -- result의 row 개수를 구한다.

Description

See odbc_num_rows().

ada_result

ada_result -- result로부터 data를 구한다.

Description

See odbc_result().

ada_resultall

ada_resultall -- result를 HTML table로 출력한다.

Description

See odbc_result_all().

ada_rollback

ada_rollback -- transaction을 rollback 한다.

Description

See odbc_rollback().

II. Apache Specific Functions

Table of Contents
apache_lookup_uri
apache_note
getallheaders
virtual

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

$headers = getallheaders();
while (list($header, $value) = each($headers)) {
echo "$header: $value<br>\n";
}

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

Note: GetAllHeaders() is currently only supported when PHP runs as an Apache module.

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 should use include() or require().

III. Array Functions

Table of Contents
array
array_walk
arsort
asort
count
current
each
end
key
ksort
list
next
pos
prev
reset
rsort
sizeof
sort
uasort
uksort
usort

array

array -- 배열을 만든다.

Description

array array(...);

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

Note that array() really 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

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

See also: list().

array_walk

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

Description

int array_walk(array arr, string func);

Applies the function named by func to each element of arr. The elements are passed as the first argument of func; if func requires more than one argument, 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 that func will actually be working with the elements of arr, so any changes made to those elements will actually be made in the array itself.

Example 1. array_walk() example

$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
function test_alter( $item1 ) {
$item1 = 'bogus';
}
function test_print( $item2 ) {
echo "$item2<br>\n";
}
array_walk( $fruits, 'test_print' );
array_walk( $fruits, 'test_alter' );
array_walk( $fruits, 'test_print' );

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

$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
arsort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
    echo "fruits[$key] = ".$fruits[$key]."\n";
}

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

$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
asort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
    echo "fruits[$key] = ".$fruits[$key]."\n";
}

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().

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 0 if the variable is not set.

Returns 1 if the variable is not an array.

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

current

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

Description

mixed current(array array);

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

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

( 역자주 : 버그인것 같지만, 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

$foo = array( "bob", "fred", "jussi", "jouni" );
$bar = each( $foo );    

$bar now contains the following key/value pairs:

    0 => 0
    1 => 'bob'
    key => 0
    value => 'bob'

$foo = array( "Robert", => "Bob", "Seppo" => "Sepi" );
$bar = each( $foo );    

$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()

echo "Values submitted via POST method:<br>";
while ( list( $key, $val ) = each( $HTTP_POST_VARS ) ) {
   echo "$key => $val<br>";
}   

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()

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()

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

$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
ksort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
    echo "fruits[$key] = ".$fruits[$key]."\n";
}

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

<table>
 <tr>
  <th>Employee name</th>
  <th>Salary</th>
 </tr>
<?php
$result = mysql($conn, "SELECT id, name, salary FROM employees");
while (list($id, $name, $salary) = mysql_fetch_row($result)) {
    print(" <tr>\n".
          "  <td><a href=\"info.php3?id=$id\">$name</a></td>\n".
          "  <td>$salary</td>\n".
          " </tr>\n");
}
?></table>

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.

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.

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()

reset

reset -- 배열의 internal pointer를 맨 처음 원소로 설정한다.

Description

reset(array array);

reset() rewinds array's internal pointer to the first 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

    $fruits = array("lemon","orange","banana","apple");
    rsort($fruits);
    for(reset($fruits); $key = key($fruits); next($fruits)) {
        echo "fruits[$key] = ".$fruits[$key]."\n";
    }
        

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().

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

$fruits = array("lemon","orange","banana","apple");
sort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
    echo "fruits[$key] = ".$fruits[$key]."\n";
}

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

function mycompare($a, $b) {
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}
$a = array(4 => "four", 3 => "three", 20 => "twenty", 10 => "ten");
uksort($a, mycompare);
while(list($key, $value) = each($a)) {
echo "$key: $value\n";
}

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.

Example 1. usort() example

function cmp($a,$b) {
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}
$a = array(3,2,5,6,1);
usort($a, cmp);
while(list($key,$value) = each($a)) {
echo "$key: $value\n";
}

This example would display: 0: 6 1: 5 2: 3 3: 2 4: 1 Obviously in this trivial case the rsort() function would be more appropriate.

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

IV. Aspell Functions

Table of Contents
aspell_new
aspell_check
aspell_check-raw
aspell_suggest

aspell() 함수들은 여러분에게 단어의 철자를 검사하고 수정사항을 조언해 준다.

이 함수들을 사용하려면 aspell 라이브러리가 필요하다. 다음 사이트에서 찾을 수 있을 것이다. : http://metalab.unc.edu/kevina/aspell/

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

$aspell_link=aspell_new("english");

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

$aspell_link=aspell_new("english");
if (aspell_check($aspell_link,"testt")) {
echo "This is a valid spelling";
} else {
echo "Sorry, wrong spelling";
}

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

$aspell_link=aspell_new("english");
if (aspell_check_raw($aspell_link,"testt")) {
echo "This is a valid spelling";
} else {
echo "Sorry, wrong spelling";
}

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

$aspell_link=aspell_new("english");
if (!aspell_check($aspell_link,"testt")) {
$suggestions=aspell_suggest($aspell_link,"testt");
for($i=0; $i < count($suggestions); $i++) {
echo "Possible spelling: " . $suggestions[$i] . "<br>";
}
}

 

V. BC (Arbitrary Precision) Functions

Table of Contents
bcadd
bccomp
bcdiv
bcmod
bcmul
bcpow
bcscale
bcsqrt
bcsub

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

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().


VI. Calendar Functions

Table of Contents
JDToGregorian
GregorianToJD
JDToJulian
JulianToJD
JDToJewish
JewishToJD
JDToFrench
FrenchToJD
JDMonthName
JDDayOfWeek

PHP에는 서로 다른 날짜(달력) 형태를 변환시켜 주는 함수들을 제공한다. Julian Day Count가 기본이 된다. 이것은 BC4000년의 어느 시점을 기준으로 잡아 그곳에서부터 얼마의 날짜가 지났는지를 기준으로 삼는 것이다. 이 Julian Day Count는 일반적으로 사용하는 Julian 달력과는 다르다는 것을 알아두자. Calendar 시스템에 대해 자세히 알고 싶다면 http://genealogy.org/~scottlee/cal-overview.html를 방문하여 보라. 이 설명서중에서는 위의 페이지에서 발췌된 내용을 ""로 둘러 싸고 있다.

( 역자주 : 이 함수들은 dl/calender extension을 Load한 후에 사용가능하다. dl/README 파일을 읽어보라. )

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

<?php
$jd = GregorianToJD(10,11,1970);
echo("$jd\n");
$gregorian = JDToGregorian($jd);
echo("$gregorian\n");
?>

 

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)

 

VII. Date/Time Functions

Table of Contents
checkdate
date
strftime
getdate
gettimeofday
gmdate
mktime
gmmktime
time
microtime

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.

Example 1. date() example

print(date( "l dS of F Y h:i:s A" ));
print("July 1, 2000 is on a " . date("l", mktime(0,0,0,7,1,2000)));

It is possible to use date() and mktime() together to find dates in the future or the past.

Example 2. date() and mktime() example

$tomorrow = mktime(0,0,0,date("m") ,date("d")+1,date("Y"));
$lastmonth = mktime(0,0,0,date("m")-1,date("d"), date("Y"));
$nextyear = mktime(0,0,0,date("m"), date("d", date("Y")+1);

To format dates in other languages, you should use the setlocale() and strftime() functions.

See also gmdate() and mktime().

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

setlocale ("LC_TIME", "C");
print(strftime("%A in Finnish is "));
setlocale ("LC_TIME", "fi");
print(strftime("%A, in French "));
setlocale ("LC_TIME", "fr");
print(strftime("%A and in German "));
setlocale ("LC_TIME", "de");
print(strftime("%A.\n"));

This example works if you have the respective locales installed in your system.

See also setlocale() 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

echo date( "M d Y H:i:s",mktime(0,0,0,1,1,1998) );
echo gmdate( "M d Y H:i:s",mktime(0,0,0,1,1,1998) );

See also date(), mktime() and gmmktime().

mktime

mktime -- 지정된 날짜를 date()함수 등이 사용하는 timestamp로 만든다.

Description

int mktime(int hour, int minute, int second, int month, int day, int year);

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.

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

echo date( "M-d-Y", mktime(0,0,0,12,32,1997) );
echo date( "M-d-Y", mktime(0,0,0,13,1,1997) );
echo date( "M-d-Y", mktime(0,0,0,1,1,1998) );

( 역자주 : 다음과 같이 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().

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.

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().

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().

VIII. dBase Functions

Table of Contents
dbase_create
dbase_open
dbase_close
dbase_pack
dbase_add_record
dbase_delete_record
dbase_get_record
dbase_numfields
dbase_numrecords

이 함수들은 dBase 형태의 databse(dbf)에 저장된 레코드들을 접근할 수 있게 해 준다.

index와 memo 필드는 지원하지 않는다. 또한 locking도 지원하지 않는다. 두 개의 웹서버 프로세스가 동시에 같은 dBase 파일을 수정하려 한다면, database 자체가 망가질 수도 있다.

SQL 데이터베이스와 다르게 dBase 데이터베이스는 생성후에 그 구조를 바꿀 수 없다. 한 파일이 생성되면 해당 데이터베이스의 선언은 고정된다. 속도 향상 등을 위해 사용하는 index도 지원하지 않는다. dBase는 고정된 길이의 레코드를 가진 단순한 순차 파일이다. 새레코드는 파일의 맨 뒤에 붙고, 삭제된 레코드는 dbase_pack()이 수행되기 전에는 데이터 자체는 유지된다.

우리는 dBase 파일은 사용하지 말기를 권한다. 대신 진짜 SQL 서버를 사용하기를 권한다. MySQL이나 PostgreSQL이 PHP와 같이 많ㅇ 사용된다. dBase 지원은 단지 여러분이 사용하는 데이터베이스에 데이터를 읽어들이거나 내보낼 때만 사용하는 것이 좋다. dBase 포맷은 대부분의 Windows용 프로그램이 사용가능한 데이터 포맷이기 때문이다.

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_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_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()

$rec = dbase_get_record($db, $recno);
$nf = dbase_numfields($db);
for ($i=0; $i < $nf; $i++) {
print $rec[$i]."<br>\n";
}

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.

IX. dbm Functions

Table of Contents
dbmopen
dbmclose
dbmexists
dbmfetch
dbminsert
dbmreplace
dbmdelete
dbmfirstkey
dbmnextkey
dblist

이 함수들은 dbm 형태의 databse(dbf)에 저장된 레코드들을 접근할 수 있게 해 준다. 이 형태의 database는 Berkeley db, gdbm 등과 내장된 flatfile 라이브러리 같은 일부 system 라이브러리 등이 지원하는데, 일반적인 relational databases와 달리 key/value의 쌍으로 data를 저장한다.

Example 1. dbm example

$dbm = dbmopen("lastseen", "w");
if (dbmexists($dbm, $userid)) {
$last_seen = dbmfetch($dbm, $userid);
} else {
dbminsert($dbm, $userid, time());
}
do_stuff();
dbmreplace($dbm, $userid, time());
dbmclose($dbm);

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" or "w" for read, new (implies write) and 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 from ftp://prep.ai.mit.edu/pub/gnu.

Example 1. dbm example

$dbm = dbmopen("lastseen", "w");

Example 1. dbm example

$dbm = dbmopen("lastseen", "w");
if (dbmexists($dbm, $userid)) {
$last_seen = dbmfetch($dbm, $userid);
} else {
dbminsert($dbm, $userid, time());
}

Example 1. dbm example

$dbm = dbmopen("lastseen", "w");
if (dbmexists($dbm, $userid)) {
$last_seen = dbmfetch($dbm, $userid);
} else {
dbminsert($dbm, $userid, time());
}
do_stuff();
dbmreplace($dbm, $userid, time());
dbmclose($dbm);
do_stuff();
dbmreplace($dbm, $userid, time());
dbmclose($dbm);
if (dbmexists($dbm, $userid)) {
$last_seen = dbmfetch($dbm, $userid);
} else {
dbminsert($dbm, $userid, time());
}
do_stuff();
dbmreplace($dbm, $userid, time());
dbmclose($dbm);

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.

$key = dbmfirstkey($dbm_id);
while ($key) {
    echo "$key = " . dbmfetch($dbm_id, $key) . "\n";
    $key = dbmnextkey($dbm_id, $key);
}
     

dblist

dblist -- 사용중인 dbm-compatible library에 대한 정보를 표시한다.

Description

string dblist(void);

X. Directory Functions

Table of Contents
chdir
dir
closedir
opendir
readdir
rewinddir

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

$d = dir("/etc");
echo "Handle: ".$d->handle."<br>\n";
echo "Path: ".$d->path."<br>\n";
while($entry=$d->read()) {
    echo $entry."<br>\n";
}
$d->close();
        

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

<?php
$handle=opendir('.');
echo "Directory handle: $handle\n";
echo "Files:\n";
while ($file = readdir($handle)) {
echo "$file\n";
}
closedir($handle);
?>

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.

XI. Dynamic Loading Functions

Table of Contents
dl

dl

dl -- PHP extension을 실행중에 load한다.

Description

int dl(string library);

Loads the PHP extension defined in library. See also the extension_dir configuration directive.

XII. Program Execution Functions

Table of Contents
escapeshellcmd
exec
system
passthru

escapeshellcmd

escapeshellcmd -- shell의 metacharacter들을 escape한 다.

Description

string escapeshellcmd(string command);

EscapeShellCmd() escapes any characters in a string that might be used to trick a shell command into executing arbitrary commands. This function should be used to make sure that any data coming from user input is escaped before this data is passed to the exec() or system() functions. A standard use would be:

system(EscapeShellCmd($cmd))    

exec

exec -- 외부 program을 실행한다.

Description

string exec(string command, string array, int return_var);

Exec executes the given command, however it does not output anything. It simply returns the last line from the result of the command. If you need to execute a command and have all the data from the command passed directly back without any interference, use the PassThru() function.

If the array argument is present, then the specified array will be filled with every line of output from the command. Note that if the array already contains some elements, exec() will append to the end of the array. If you do not want the function to append elements, call unset() on the array before passing it to exec().

If the return_var argument is present along with the array argument, then the return status of the executed command will be written to this variable.

Note that if you are going to allow data coming from user input to be passed to this function, then you should be using EscapeShellCmd() to make sure that users cannot trick the system into executing arbitrary commands.

See also system(), PassThru(), popen() and EscapeShellCmd().

system

system -- 외부 program을 실행하고 그 결과를 출력한다.

Description

string system(string command, int return_var);

System() is just like the C version of the function in that it executes the given command and outputs the result. If a variable is provided as the second argument, then the return status code of the executed command will be written to this variable.

Note, that if you are going to allow data coming from user input to be passed to this function, then you should be using the EscapeShellCmd() function to make sure that users cannot trick the system into executing arbitrary commands.

The System() call also tries to automatically flush the web server's output buffer after each line of output if PHP is running as a server module.

If you need to execute a command and have all the data from the command passed directly back without any interference, use the PassThru() function. See also the exec() and popen() functions.

passthru

passthru -- 외부 프로그램을 실행하고 그 결과를 직접 (지체없이) 출력한다.

Description

string passthru(string command, int return_var);

The PassThru() function is similar to the Exec() function in that it executes a command. If the return_var argument is present, the return status of the Unix command will be placed here. This function should be used in place of Exec() or System() when the output from the Unix command is binary data which needs to be passed directly back to the browser. A common use for this is to execute something like the pbmplus utilities that can output an image stream directly. By setting the content-type to image/gif and then calling a pbmplus program to output a gif, you can create PHP scripts that output images directly.

See also exec() and fpassthru().

XIII. filePro Functions

Table of Contents
filepro
filepro_fieldname
filepro_fieldtype
filepro_fieldwidth
filepro_retrieve
filepro_fieldcount
filepro_rowcount

이 함수들은 filePro 형태의 databse(dbf)에 저장된 레코드들을 read-only로 접근할 수 있게 해 준다.

filePro는 Fiserv, Inc.의 trademark로 등록되어 있다. 여러분은 http://www.fileproplus.com/에서 filePro에 관한 더 많은 정보를 얻을 수 있다.

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().

XIV. Filesystem Functions

Table of Contents
basename
chgrp
chmod
chown
clearstatcache
copy
dirname
diskfreespace
fclose
feof
fgetc
fgets
fgetss
file
file_exists
fileatime
filectime
filegroup
fileinode
filemtime
fileowner
fileperms
filesize
filetype
fopen
fpassthru
fputs
fread
fseek
ftell
fwrite
is_dir
is_executable
is_file
is_link
is_readable
is_writeable
link
linkinfo
mkdir
pclose
popen
readfile
readlink
rename
rewind
rmdir
stat
lstat
symlink
tempnam
touch
umask
unlink

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()

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 fopen(), popen(), fsockopen(), and fgets().

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, 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 fopen(), popen(), or fsockopen().

See also 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(), and popen().

file

file -- 파일 전체를 읽어서 배열에 저장한다.

Description

array file(string filename);

Identical to readfile(), except that file() returns the file in an array.

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.

See also clearstatcache().

fileatime

fileatime -- 파일에 마지막으로 접근한 시간을 구한다.

Description

int fileatime(string filename);

Returns the time the file was last accessed, or false in case of an error.

filectime

filectime -- 파일의 inode가 변경된 시간을 구한다.

Description

int filectime(string filename);

Returns the time the file was last changed, or false in case of an error.

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.

fileinode

fileinode -- 파일의 inode를 구한다.

Description

int fileinode(string filename);

Returns the inode number of the file, or false in case of an error.

filemtime

filemtime -- 파일이 수정된 시간을 구한다.

Description

int filemtime(string filename);

Returns the time the file was last modified, or false in case of an 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.

fileperms

fileperms -- 파일의 permission을 구한다.

Description

int fileperms(string filename);

Returns the permissions on the file, or false in case of an error.

filesize

filesize -- 파일의 크기를 구한다.

Description

int filesize(string filename);

Returns the size of the file, or false in case of an error.

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.

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().

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().

is_dir

is_dir -- 지정된 파일명이 directory인가 알려준다.

Description

bool is_dir(string filename);

Returns true if the filename exists and is a directory.

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.

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.

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.

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.

See also is_writeable().

is_writeable

is_writeable -- 지정된 파일명이 쓰기 가능인가 알려준다.

Description

bool is_readable(string filename);

Returns true if the filename exists and 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.

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

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

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.

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.

XV. Functions related to HTTP

Table of Contents
header
setcookie

이 함수들은 HTTP protocol leve에서 데이타를 remote browser로 직접 전송할 수 있도록 해 준다.

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.

Header("Location: http://www.php.net"); /* Redirect browser to PHP web site */
exit; /* Make sure that code below does not get executed when we redirect. */

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

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); // always modified
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0

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. 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. Some examples follow:

Example 1. SetCookie examples

SetCookie("TestCookie","Test Value");
SetCookie("TestCookie",$value,time()+3600);  /* expire in 1 hour */
SetCookie("TestCookie",$value,time()+3600,"/~rasmus/",".utoronto.ca",1);

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. ie. to see the contents of our test cookie in a script, simply do:

echo $TestCookie;

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.

XVI. Hyperwave functions

( 역자주 : 이부분은 번역이 무척 어려웠다. 잘못된 단어도 많았고, 의미가 명확하지 않은 부분도 많았다. 또한 역자가 사용해 보지 못한 기능이기 때문에 그 내용을 잘 알지 못하는 이유도 있다. 오역이 있을 수도 있으므로 가능하면 원문도 함께 보도록 한다.)
Table of Contents
hw_Changeobject
hw_Children
hw_ChildrenObj
hw_Close
hw_Connect
hw_Cp
hw_Deleteobject
hw_DocByAnchor
hw_DocByAnchorObj
hw_DocumentAttributes
hw_DocumentBodyTag
hw_DocumentSize
hw_ErrorMsg
hw_EditText
hw_Error
hw_Free_Document
hw_GetParents
hw_GetParentsObj
hw_GetChildColl
hw_GetChildCollObj
hw_GetSrcByDestObj
hw_GetObject
hw_GetAndLock
hw_GetText
hw_GetObjectByQuery
hw_GetObjectByQueryObj
hw_GetObjectByQueryColl
hw_GetObjectByQueryCollObj
hw_GetChildDocColl
hw_GetChildDocCollObj
hw_GetAnchors
hw_GetAnchorsObj
hw_Mv
hw_Identify
hw_InCollections
hw_Info
hw_InsColl
hw_InsDoc
hw_InsertDocument
hw_New_Document
hw_Objrec2Array
hw_OutputDocument
hw_pConnect
hw_PipeDocument
hw_Root
hw_Unlock
hw_Username


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 이름을 선택하는 것만이 이 혼란을 피할 수 있다.

이 결정을 내리게 되면 두분째 문제가 생긴다. 어떻게 php3에 포함시킬 것인가? http://host/my_object의 URL로는 어떤 php3 스크립트도 호출하지 못한다. 이를 위해서는 여러분이 웹서버에 이주소를 'http://host/php3_script/my_object'같은 주소로 재설정하도록 알려주어야 하고, $PATH_INFO 변수와 Hyperwave server의 'my_object'라는 이름의 object를 검색하여 평가하는 'php3_script'라는 스크립트가 있어야 한다.

여기에는 쉽게 고칠 수 있는 결점이 하나 있다. 웹서버에서 언제나 다른 문서로의 접근이 가능한 URL을 재설정할 수 있는 것은 아니라는 것이다. Hyperwave 서버룰 검색하기 위한 php3 스크립트는 아마 불가능할 것이다. 그러므로 여러분은 최소한 http://host/Hyperwave로 시작하는 것 같은 특정 URL은 제외시키는 두 번째 재설정 규칙을 설정할 필요가 있다. 이것이 웹의 namespace와 Hyperwave 서버를 공유하는 기본이 된다.

링크의 삽입은 위의 메카니즘하에서 이루어 진다. 만약 php3가 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의 사용이 필수적으로 요구된다.

PHP3에 Hyperwave 지원을 추가함으로써, interface customisation부분에서 PHP3의 프로그래밍 언어의 부족한 부분을 보충할 수 있다. 이것은 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 모듈은 PHP3가 아파치 모듈로 컴파일되었을 때 가장 잘 사용될 수 있다. 이 경우에 아파치가 자신의 재작성(rewriting) 엔진을 사용하게 되면 Hyperwave 서버의 존재는 사용자가 거의 느낄 수 없게 된다. 다음의 내용들이 이것을 설명해 줄 것이다.

Hyperwave를 지원하는 아파치로 만들어진 PHP3가 wavemaster기반의 독자적인 Hyperwave 솔루션을 대신하려 할 때부터, 아파치 서버가 Hyperwave 웹 인터페이스를 지원하는 유일한 서버가 되리라 당연히 추정되었다.

이것은 반드시 필요한 것은 아니지만 설정을 쉽게 해준다. 개념은 단순하다. 우선, 여러분은 PATH_INFO 변수를 평가하고 이 변수의 값을 Hyperwave object로 다룰 PHP3 스크립트가 필요하다. 이제 이 스크립트의 이름을 '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) 규칙은 다음과 같이 매우 쉽다. :

RewriteRule ^/(.*) /usr/local/apache/htdocs/HyperWave/$1 [L]

이제 모든 URL은 Hyperwave 서버의 object와 연결된다. 이것은 비교적 간단히 해결할 수 있는 한가지 문제를 만들어 낸다. 이로써 'Hyperwave' 스크립트 이외의 다른 스크립트(예를들어, 검색을 위한 스크립트 등)는 실행할 수 없게 된다. 이를 해결하기 위한 또다른 작성(rewriting) 규칙을 다음과 같이 작성해 준다. ㅣ

RewriteRule ^/hw/(.*) /usr/local/apache/htdocs/hw/$1 [L]

이것으로 추가적인 스크립트와 파일들을 위한 /usr/local/apache/htdocs/hw 디렉토리를 남겨두게 된다. 그리고 이 규칙을 위의 규칙보다 먼저 평가되도록 한다. 약간의 결점이 있는데, 'hw/'로 시작하는 이름을 가진 Hyperwave object는 접근할 수 없게 된다. 그러므로 여러분은 그런 이름은 쓰지 않도록 한다. 만약 여러분이 더 많은 디렉토리(예를들어, 이미지를 위한 디렉토리)가 필요하다면, 새로운 규칙을 첨가하거나 원하는 디렉토리들을 모두 한 디렉토리 밑에 놓으면 된다. 마지막으로, 다음과 같이하여 재작성 엔진(rewriting engine)을 켜도록 한다. :

RewriteEngine on

내 경험으로 보았을 때 여러분을 다음의 스크립트들이 필요하게 될 것이다. :


Todo

아직 해야할 일은 다음과 같다. :


hw_Changeobject

hw_Changeobject -- object를 바꾼다.

Description

int hw_changeobject(int connection, int object_to_change, string commands);

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; commands adhere to the following syntax:

<command> ::= <remcmd> |
              <addcmd> |
              <remcmd> "\" <addcmd>

<remcmd>  ::= "rem " <attribute> "=" <value>

<addcmd>  ::= "add " <attribute> "=" <value>                

Note that in order to delete or remove an attribute its old value has to be supplied (some attributes are allowed more than once). A command like rem attr=value\add attr=value allows to modify attributes in one operation.

Returns TRUE if no error occurs otherwise FALSE.

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_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_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 objectID);

Returns the object record for the object with ID objectID.

See also hw_GetAndLock().

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, int rootID);

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 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.

If rootID is unequal to 0 the link is constructed from all the names starting at the object with the id rootID 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 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.

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.

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.

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.

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 source 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.

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 defined by collection id_array. When the fourth parameter return_collectionsis 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_putdocument(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.

See also hw_PipeDocument().

hw_New_Document

hw_New_Document -- 새 document를 만든다.

Description

int hw_new_document(string document_data, string object_record, 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.

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_Username

hw_Username -- 현재 log in 하고 있는 user의 이름

Description

string hw_getusername(int connection);

Returns the username of the connection.

XVII. Image functions

Table of Contents
GetImageSize
ImageArc
ImageChar
ImageCharUp
ImageColorAllocate
ImageColorTransparent
ImageCopyResized
ImageCreate
ImageCreateFromGif
ImageDashedLine
ImageDestroy
ImageFill
ImageFilledPolygon
ImageFilledRectangle
ImageFillToBorder
ImageFontHeight
ImageFontWidth
ImageGif
ImageInterlace
ImageLine
ImageLoadFont
ImagePolygon
ImageRectangle
ImageSetPixel
ImageString
ImageStringUp
ImageSX
ImageSY
ImageTTFBBox
ImageTTFText
ImageColorAt
ImageColorClosest
ImageColorExact
ImageColorResolve
ImageColorSet
ImageColorsForIndex
ImageColorsTotal

여러분은 여기의 함수들로 JPEG, GIF, PNG 이미지의 크기를 알아볼 수 있다. 또한 여러분이 GD library(http://www.boutell.com/gd/에 있다.)를 가지고 있다면, 여러분은 GIF 이미지를 만들거나 수정할 수 있다.

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

<?php $size = GetImageSize("img/flag.jpg"); ?>
<IMG SRC="img/flag.jpg" <?php echo $size[3]; ?>>

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

<?php
$size = GetImageSize("testimg.jpg",&$info);
if (isset($info["APP13"])) {
$iptc = iptcparse($info["APP13"]);
var_dump($iptc);
}
?>

Note: This function does not require the GD image library.

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 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().

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.

$white = ImageColorAllocate($im, 255,255,255);
$black = ImageColorAllocate($im, 0,0,0);

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.

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 -- 파일이나 URL로부터 새 image를 만든다.

Description

int imagecreatefromgif(string filename);

ImageCreateFromGif returns an image identifier representing the image obtained from the given filename.

ImageDashedLine

ImageDashedLine -- 점선을 그린다.

Description

int imagedashedline(int im, int x1, int y1, int x2, int y2, int col);

ImageLine 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 width of a character in 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 -- browser나 파일로 그림을 출력한다.

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 the header function, you can create a PHP script that outputs GIF images directly.

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, int 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().

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

<?php
Header("Content-type: image/gif");
$im = imagecreate(400,30);
$black = ImageColorAllocate($im, 0,0,0);
$white = ImageColorAllocate($im, 255,255,255);
ImageTTFText($im, 20, 0, 10, 20, $white, "/path/arial.ttf", "Testing... Omega: &#937;");
ImageGif($im);
ImageDestroy($im);
?>

This function requires both the GD library and the FreeType< library.

See also ImageTTFBBox().

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

int 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().

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().

XVIII. IMAP Functions

Table of Contents
imap_append
imap_base64
imap_body
imap_check
imap_close
imap_createmailbox
imap_delete
imap_deletemailbox
imap_expunge
imap_fetchbody
imap_fetchstructure
imap_header
imap_headers
imap_listmailbox
imap_listsubscribed
imap_mail_copy
imap_mail_move
imap_num_msg
imap_num_recent
imap_open
imap_ping
imap_renamemailbox
imap_reopen
imap_subscribe
imap_undelete
imap_unsubscribe
imap_qprint
imap_8bit
imap_binary
imap_scanmailbox
imap_mailboxmsginfo
imap_rfc822_write_address
imap_rfc822_parse_adrlist
imap_setflag_full
imap_clearflag_full
imap_sort
imap_fetchheader
imap_uid

이 함수들을 동작시키려면 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_append

imap_append -- 지정한 편지함에 문자열 메세지를 덧붙인다.

Description

int imap_append(int imap_stream, string mbox, string message, stringflags);

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.

imap_base64

imap_base64 -- BASE64로 encode된 text를 decode한다.

Description

string imap_base64(string text);

imap_base64() function decodes BASE-64 encoded text. The decoded message is returned as a string.

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

array 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.

Date : date of the message
Driver : driver
Mailbox : name of the mailbox
Nmsgs : number of messages
Recent : number of recent messages

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.

imap_createmailbox

imap_createmailbox -- 새 편지함을 만든다.

Description

int imap_createmailbox(int imap_stream, string mbox);

imap_createmailbox() creates a new mailbox specified by mbox.

Returns true on success and false on error.

imap_delete

imap_delete -- 현재 편지함에서 어떤 messge에 삭제 마크를 한다.

Description

int imap_delete(int imap_stream, int msg_number);

Returns true.

imap_delete() function marks message pointed by msg_number for deletion. Actual deletion of the messages is done by imap_expunge().

imap_deletemailbox

imap_deletemailbox -- 편지함을 지운다.

Description

int imap_deletemailbox(int imap_stream, string mbox);

imap_deletemailbox() deletes the specified mailbox.

Returns true on success and false on error.

imap_expunge

imap_expunge -- 삭제 마크가 되어 있는 모든 메세지를 지운다.

Description

int imap_expunge(int imap_stream);

imap_expunge() deletes all the messages marked for deletion by imap_delete().

Returns true.

imap_fetchbody

imap_fetchbody -- message의 body중 particular section을 가지고 온다.

Description

string imap_fetchbody(int imap_stream, int msg_number, int 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 ()e a bitmask with one or more of the following

imap_fetchstructure

imap_fetchstructure -- particular message의 구조를 읽어온다.

Description

array imap_fetchstructure(int imap_stream, int msg_number);

This function causes a fetch of all the structured information for the given msg_number. The returned value is an object with following elements.

type, encoding, ifsubtype, subtype, ifdescription, description, ifid,
id, lines, bytes, ifparameters

It also returns an array of objects called parameters[]. This object has following properties.

attribute, value

In case of multipart, it also returns an array of objects of all the properties, called parts[].

imap_header

imap_header -- message의 header를 읽어온다.

Description

object imap_header(int imap_stream, int msg_number, int fromlength, int subjectlength, int defaulthost);

This function returns an object of various header elements

       remail,date,Date,subject,Subject,in_reply_to,message_id,newsgroups,
       followup_to,references
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_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 pat);

Returns an array containing the names of the mailboxes.

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. The ref and pattern arguments specify the base location to search from and the pattern the mailbox name must match.

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.

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);

Moves mail messages specified by msglist to specified mailbox. msglist is a range not just message numbers.

Returns true on success and false on error.

imap_num_msg

imap_num_msg -- 현재 편지함의 메세지 개수를 구한다.

Description

int imap_num_msg(void);

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. To connect to an IMAP server running on port 143 on the local machine, do the following:

$mbox = imap_open("{localhost:143}INBOX","user_id","password");

To connect to a POP3 server on port 110 on the local server, use:

$mbox = imap_open("{localhost/pop3:110}INBOX","user_id","password");

To connect to an NNTP server on port 119 on the local server, use:

$nntp = imap_open("{localhost/nntp:119}comp.test","","");

To connect to a remote server replace "localhost" with the name or the IP address of the server you want to connect to.

The options are a bit mask with noe or more of the following:

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.

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.

Returns true on success and false on error.

imap_reopen

imap_reopen -- 기존에 열려있는 IMAP stream을 새 편지함으로 연다.

Description

int imap_reopen(string imap_stream, string mailbox, string [flags]);

Returns true on success and false on error.

This function reopens the specified stream to new mailbox.

the options are a bit mask with noe or more of the following:

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().

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

Returns an 8 bit (binary) string

imap_8bit

imap_8bit -- 8 bit 문자열을 quoted-printable 문자열로 바꾼다.

Description

string imap_8bit(string string);

Convert an 8bit string to a quoted-printable string.

Returns a quoted-printable string

imap_binary

imap_binary -- 8bit 문자열을 base64 문자열로 바꾼다.

Description

string imap_binary(string string);

Convert an 8bit string to a base64 string.

Returns a base64 string

imap_scanmailbox

imap_scanmailbox -- mailbox들의 list를 읽고, 검색할 문자열을 mailbox의 text에서 취한다.

takes a string to search for in the text of the mailbox

Description

array imap_scanmailbox(int imap_stream, string string);

Returns an array containing the names of the mailboxes that have string in the text of the mailbox.

imap_mailboxmsginfo

imap_mailboxmsginfo -- 현재 mailbox에 대한 정보를 구한다.

Description

array 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 and returns the information in an object with following properties.

       Date : date of the message
       Driver : driver
       Mailbox : name of the mailbox
       Nmsgs : number of messages
       Recent : number of recent messages
       Unread : number of unread messages
       Size : mailbox size

imap_rfc822_write_address

imap_rfc822_write_address -- 주어진 mailbox와 host, personal info로 적합한 모양의 email address를 만들어 낸다.

Returns a properly formatted email address given the mailbox, host, and personal info.

Description

string imap_rfc822_write_address(string mailbox, string host, string personal);

Returns a properly formatted email address given the mailbox, host, and personal info.

imap_rfc822_parse_adrlist

imap_rfc822_parse_adrlist -- address 문자열을 parsing한다.

Description

string imap_rfc822_parse_adrlist(string address, string default_host);

This function parses the address tring and for each address, returns an array of objects. The 4 objects are:

     mailbox - the mailbox name (username)
     host   - the host name
     personal - the personal name
     adl - at domain source route
    

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 options are a bit mask with one or more of the following:

        ST_UID          The sequence argument contains UIDs instead of sequence numbers 

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 options are a bit mask with one or more of the following:

        ST_UID          The sequence argument contains UIDs instead of sequence numbers

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

Rev 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

stringimap_fetchheader(int imap_stream, int msgno, int flags);

This function causes a fetch of the complete, unfiltered RFC 822 format header of the specified message as a text string and returns that text string.

The options are:

        FT_UID          The msgno argument is a UID 
        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

string imap_uid(string mailbox, int msgno);

This function returns the UID for the given message sequence number


XIX. PHP options & information

Table of Contents
error_log
error_reporting
getenv
get_cfg_var
et_current_user
get_magic_quotes_gpc
get_magic_quotes_runtime
getlastmod
getmyinode
getmypid
getmyuid
phpinfo
phpversion
putenv
set_magic_quotes_runtime
set_time_limit

error_log

error_log -- 에러 메세지를 지정한 곳에 보낸다.

Description

int error_log(string message, int message_type, string [destination], string [extra_headers]);

Sends an error message to the web server's error log, a TCP port or to a file. The first parameter, message, is the error message that should be logged. The second parameter, message_type says where the message should go:

Table 1. error_log() log types

0

message is sent to PHP's system logger, using the Operating System's system logging mechanism or a file, depending on what the error_log configuration directive is set to.

1

message is sent by email to the address in the destination parameter. This is the only message type where the fourth parameter, extra_headers is used. This message type uses the same internal function as Mail() does.

2

message is sent through the PHP debugging connection. This option is only available if remote debugging has been enabled. In this case, the destination parameter specifies the host name or IP address and optionally, port number, of the socket receiving the debug information.

3

message is appended to the file destination.

Example 1. error_log() examples

// Send notification through the server log if we can not
// connect to the database.
if (!Ora_Logon($username, $password)) {
error_log("Oracle database not available!", 0);
}
// Notify administrator by email if we run out of FOO
if (!($foo = allocate_new_foo()) {
error_log("Big trouble, we're all out of FOOs!", 1,
"operator@mydomain.com");
}
// other ways of calling error_log():
error_log("You messed up!", 2, "127.0.0.1:7000");
error_log("You messed up!", 2, "loghost");
error_log("You messed up!", 3, "/var/tmp/my-errors.log");

error_reporting

error_reporting -- report 될 PHP 에러들을 정한다.

Description

int error_reporting(int [level]);

Sets PHP's error reporting level and returns the old level. The error reporting level is a bitmask of the following values (follow the links for the internal values to get their meanings):

Table 1. error_reporting() bit values

value

internal name

1

E_ERROR

2

E_WARNING

4

E_PARSE

8

E_NOTICE

16

E_CORE_ERROR

32

E_CORE_WARNING

getenv

getenv -- 환경 변수(environment variable)의 값을 구한다.

Description

string getenv(string varname);

Returns the value of the environment variable varname, or false on an error.

$ip = getenv("REMOTE_ADDR"); // get the ip number from the user

get_cfg_var

get_cfg_var -- PHP 설정 옵션(configuration option)의 값을 구한다.

Description

string get_cfg_var(string varname);

Returns the current value of the PHP configuration variable specified by varname, or false if an error occurs.

It will not return configuration information set when the PHP was compiled, or read from an Apache configuration file (using the php3_configuration_option directives).

To check whether the system is using a php3.ini file, try retrieving the value of the cfg_file_path configuration setting. If this is available, a php3.ini file is being used.

get_current_user

get_current_user -- 현 PHP script의 owner 이름을 구한다.

Description

string get_current_user(void);

Returns the name of the owner of the current PHP script.

See also getmyuid(), getmypid(), getmyinode(), and getlastmod().

get_magic_quotes_gpc

get_magic_quotes_gpc -- magic quotes gpc의 현재 설정 상태를 얻는다.

Description

long get_magic_quotes_gpc(void);

Returns the current active configuration setting of magic_quotes_gpc. (0 for off, 1 for on)

See also get_magic_quotes_runtime(), set_magic_quotes_runtime().

get_magic_quotes_runtime

get_magic_quotes_runtime -- magic_quotes_runtime의 현재 설정 상태를 얻는다.

Description

long get_magic_quotes_runtime(void);

Returns the current active configuration setting of magic_quotes_runtime. (0 for off, 1 for on)

See also get_magic_quotes_gpc(), set_magic_quotes_runtime().

getlastmod

getlastmod -- 현 문서를 마지막으로 수정한 시간을 구한다.

Description

int getlastmod(void);

Returns the time of the last modification of the current page. The value returned is a Unix timestamp, suitable for feeding to date(). Returns false on error.

Example 1. getlastmod() example

// outputs e.g. 'Last modified: March 04 1998 20:43:59.'
echo "Last modified: ".date( "F d Y H:i:s.", getlastmod() );
      

See alse date(), getmyuid(), get_current_user(), getmyinode(), and getmypid().

getmyinode

getmyinode -- 현 script의 inode를 구한다.

Description

int getmyinode(void);

Returns the current script's inode, or false on error.

See also getmyuid(), get_current_user(), getmypid(), and getlastmod().

getmypid

getmypid -- PHP의 process ID를 구한다.

Description

int getmypid(void);

Returns the current PHP process ID, or false on error.

Note that when running as a server module, separate invocations of the script are not guaranteed to have distinct pids.

See also getmyuid(), get_current_user(), getmyinode(), and getlastmod().

getmyuid

getmyuid -- PHP script의 owner의 UID 값을 구한다..

Description

int getmyuid(void);

Returns the user ID of the current script, or false on error.

See also getmypid(), get_current_user(), getmyinode(), and getlastmod().

phpinfo

phpinfo -- 여러가지의 PHP information을 출력한다.

Description

int phpinfo(void);

Outputs a large amount of information about the current state of PHP. This includes information about PHP compilation options and extensions, the PHP version, server information and environment (if compiled as a module), the PHP environment, OS version information, paths, master and local values of configuration options, HTTP headers, and the GNU Public License.

See also phpversion().

phpversion

phpversion -- 현 PHP version을 구한다.

Description

string phpversion(void);

Returns a string containing the version of the currently running PHP parser.

Example 1. phpversion() example

// prints e.g. 'Current PHP version: 3.0rel-dev'
echo "Current PHP version: ".phpversion();
      

See also phpinfo().

putenv

putenv -- 환경 변수(environment variable)의 값을 설정한다.

Description

void putenv(string setting);

Adds setting to the environment.

Example 1. Setting an Environment Variable

putenv("UNIQID=$uniqid");
      

set_magic_quotes_runtime

set_magic_quotes_runtime -- Set the current active configuration setting of magic_quotes_runtime.

Description

long set_magic_quotes_runtime(int new_setting);

Set the current active configuration setting of magic_quotes_runtime. (0 for off, 1 for on)

See also get_magic_quotes_gpc(), get_magic_quotes_runtime().

set_time_limit

set_time_limit -- 실행에 걸리는 시간을 한정시킨다. (limit the maximum execution time)

Description

void set_time_limit(int seconds);

Set the number of seconds a script is allowed to run. If this is reached, the script returns a fatal error. The default limit is 30 seconds or, if it exists, the max_execution_time value defined in php3.ini. If seconds is set to zero, no time limit is imposed.

When called, set_time_limit() restarts the timeout counter from zero. In other words, if the timeout is the default 30 seconds, and 25 seconds into script execution a call such as set_time_limit( 20 ) is made, the script will run for a total of 45 seconds before timing out.

XX. Informix Functions

Table of Contents
ifx_connect
ifx_pconnect
ifx_close
ifx_query
ifx_prepare
ifx_do
ifx_error
ifx_errormsg
ifx_affected_rows
ifx_fetch_row
ifx_htmltbl_result
ifx_fieldtypes
ifx_fieldproperties
ifx_num_fields
ifx_num_rows
ifx_free_result
ifx_create_char
ifx_free_char
ifx_update_char
ifx_get_char
ifx_create_blob
ifx_copy_blob
ifx_free_blob
ifx_get_blob
ifx_update_blob
ifx_blobinfile_mode
ifx_textasvarchar
ifx_byteasvarchar
ifx_nullformat
ifxus_create_slob
ifx_free_slob
ifxus_close_slob
ifxus_open_slob
ifxus_tell_slob
ifxus_seek_slob
ifxus_read_slob
ifxus_write_slob

Informix의 Online (ODS) 7.x와 SE 7.x, Universal Server (IUS) 9.x를 위한 드라이버는 "functions/ifx.ec"와 "functions/php3_ifx.h"에 구현되어 있다. 이글이 쓰여질 당시 완전한 BLOB 지원을 포함하여, ODS 7.2에 대한 지원는 거의 완성되었다. IUS 9.1에 대한 지원은 부분적으로만 완료되었다. 새로운 데이터 타입들은 완료되었으나, SLOBS에 대한 지원은 아직 진행중이다.

설정시 주의 사항 (Configuration notes) :

"configure" 스크립트를실행하기 전에, 반드시 "INFORMIXDIR" 환경 변수를 설정해 놓아야 한다.

이렇게 해 놓고 "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) :

현재 버전(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 필드처럼 사용할 수 있다. PHP3에서 모든 문자열이 계산("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로 설정되어있으면 뒤에 붙은 공백문자를 자동으로 제거한다.


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

$conn_id = ifx_pconnect (mydb@ol_srv1, "imyself", "mypassword");

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

$conn_id = ifx_connect (mydb@ol_srv, "itsme", "mypassword");
... some queries and stuff ...
ifx_close($conn_id);

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

ifx_textasvarchar(1); // use "text mode" for blobs
$res_id = ifx_query("select * from orders", $conn_id);
if (! $res_id) {
printf("Can't select orders : %s\n<br>%s<br>\n",
ifx_error();
ifx_errormsg();
die;
}
ifx_htmltbl_result($res_id, "border=\"1\");
ifx_free_result($res_id);

Example 2. Insert some values into the "catalog" table

// create blob id's for a byte and text column
$textid = ifx_create_blob(0, 0, "Text column in memory");
$byteid = ifx_create_blob(1, 0, "Byte column in memory");
// store blob id's in a blobid array
$blobidarray[] = $textid;
$blobidarray[] = $byteid;
// launch query
$query = "insert into catalog (stock_num, manu_code, " .
"cat_descr,cat_picture) values(1,'HRO',?,?)";
$res_id = ifx_query($query, $conn_id, $blobidarray);
if (! $res_id) {
... error ...
}
// free result id
ifx_free_result($res_id);

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]

where x = space : no error

E : error

N : no more data

W : warning

? : undefined

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()

printf("%s\n<br>", ifx_errormsg(-201));

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

$rid = ifx_prepare ("select * from emp where name like " . $name, $connid);
if (! $rid) {
... error ...
}
$rowcount = ifx_affected_rows ($rid);
if ($rowcount > 1000) {
printf ("Too many rows in result set (%d)\n<br>", $rowcount);
die ("Please restrict your query<br>\n");
}

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

$rid = ifx_prepare ("select * from emp where name like " . $name,
$connid, IFX_SCROLL);
if (! $rid) {
... error ...
}
$rowcount = ifx_affected_rows($rid);
if ($rowcount > 1000) {
printf ("Too many rows in result set (%d)\n<br>", $rowcount);
die ("Please restrict your query<br>\n");
}
if (! ifx_do ($rid)) {
... error ...
}
$row = ifx_fetch_row ($rid, "NEXT");
while (is_array($row)) {
for(reset($row); $fieldname=key($row); next($row)) {
$fieldvalue = $row[$fieldname];
printf ("%s = %s,", $fieldname, $fieldvalue);
}
printf("\n<br>");
$row = ifx_fetch_row ($rid, "NEXT");
}
ifx_free_result ($rid);

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

$rid = ifx_prepare ("select * from emp where name like " . $name,
$connid, IFX_SCROLL);
if (! $rid) {
... error ...
}
$rowcount = ifx_affected_rows ($rid);
if ($rowcount > 1000) {
printf ("Too many rows in result set (%d)\n<br>", $rowcount);
die ("Please restrict your query<br>\n");
}
if (! ifx_do($rid) {
... error ...
}
ifx_htmltbl_result ($rid, "border=\"2\"");
ifx_free_result($rid);

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

$types = ifx_fieldtypes ($resultid);
if (! isset ($types)) {
... error ...
}
for ($i = 0; $i < count($types); $i++) {
$fname = key($types);
printf("%s :\t type = %s\n", $fname, $types[$fname]);
next($types);
}

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

$properties = ifx_fieldtypes ($resultid);
if (! isset($properties)) {
... error ...
}
for ($i = 0; $i < count($properties); $i++) {
$fname = key ($properties);
printf ("%s:\t type = %s\n", $fname, $properties[$fname]);
next ($properties);
}

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_blob(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.

XXI. InterBase Functions

Table of Contents
ibase_connect
ibase_pconnect
ibase_close
ibase_query
ibase_fetch_row
ibase_free_result
ibase_prepare
ibase_bind
ibase_execute
ibase_free_query
ibase_timefmt

ibase_connect

ibase_connect --

Description

ibase_connect( );

ibase_pconnect

ibase_pconnect --

Description

ibase_pconnect( );

ibase_close

ibase_close --

Description

ibase_close( );

ibase_query

ibase_query --

Description

ibase_query( );

ibase_fetch_row

ibase_fetch_row --

Description

ibase_fetch_row( );

ibase_free_result

ibase_free_result --

Description

ibase_free_result( );

ibase_prepare

ibase_prepare --

Description

ibase_prepare( );

ibase_bind

ibase_bind --

Description

ibase_bind( );

ibase_execute

ibase_execute --

Description

ibase_execute( );

ibase_free_query

ibase_free_query --

Description

ibase_free_query( );

ibase_timefmt

ibase_timefmt --

Description

ibase_timefmt( );

XXI. LDAP Functions

Table of Contents
ldap_add
ldap_bind
ldap_close
ldap_connect
ldap_count_entries
ldap_delete
ldap_dn2ufn
ldap_explode_dn
ldap_first_attribute
ldap_first_entry
ldap_free_result
ldap_get_attributes
ldap_get_dn
ldap_get_entries
ldap_get_values
ldap_list
ldap_modify
ldap_next_attribute
ldap_next_entry
ldap_read
ldap_search
ldap_unbind

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

<?php
// basic sequence with LDAP is connect, bind, search, interpret search
// result, close connection
echo "<h3>LDAP query test</h3>";
echo "Connecting ...";
$ds=ldap_connect("localhost"); // must be a valid LDAP server!
echo "connect result is ".$ds."<p>";
if ($ds) {
echo "Binding ...";
$r=ldap_bind($ds); // this is an "anonymous" bind, typically
// read-only access echo "Bind result is
echo "Bind result is ".$r."<p>";
echo "Searching for (sn=S*) ...";
// Search surname entry
$sr=ldap_search($ds,"o=My Company, c=US", "sn=S*");
echo "Search result is ".$sr."<p>";
echo "Number of entires returned is ".ldap_count_entries($ds,$sr)."<p>";
echo "Getting entries ...<p>";
$info = ldap_get_entries($ds, $sr);
echo "Data for ".$info["count"]." items returned:<p>";
for ($i=0; $i<$info["count"]; $i++) {
echo "dn is: ". $info[$i]["dn"] ."<br>";
echo "first cn entry is: ". $info[$i]["cn"][0] ."<br>";
echo "first email entry is: ". $info[$i]["mail"][0] ."<p>";
}
echo "Closing connection";
ldap_close($ds);
} else {
echo "<h4>Unable to connect to LDAP server</h4>";
}
?>


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 형태로 있습니다.


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

<?php
$ds=ldap_connect("localhost"); // assuming the LDAP server is on this host
if ($ds) {
// bind with appropriate dn to give update access
$r=ldap_bind($ds,"cn=root, o=My Company, c=US", "secret");
// prepare data
$info["cn"]="John Jones";
$info["sn"]="Jones";
$info["mail"]="jonj@here.and.now";
$info["objectclass"]="person";
// add data to directory
$r=ldap_add($ds, "cn=John Jones, o=My Company, c=US", $info);
ldap_close($ds);
} else {
echo "Unable to connect to LDAP server";
}
?>

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

string ldap_dn2ufn(string dn);

ldap_dn2ufn() function is used to turn a DN into a more user-friendly form, stripping off type names.

ldap_explode_dn

ldap_explode_dn -- DN을 그것의 구성 부분으로 나눈다.

Description

string 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 1 and to get only values set it to 0.

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 comlete 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

// $ds is the link identifier for the directory
// $sr is a valid search result from a prior call to
// one of the ldap directory search calls
$entry = ldap_first_entry($ds, $sr);
$attrs = ldap_get_attributes($ds, $entry);
echo $attrs["count"]." attributes held for this entry:<p>";
for ($i=0; $i<$attrs["count"]; $i++)
echo $attrs[$i]."<br>";

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

// $ds is a valid link identifier for a directory server
// $sr is a valid search result from a prior call to
// one of the ldap directory search calls
// $entry is a valid entry identifier from a prior call to
// one of the calls that returns a directory entry
$values = ldap_get_values($ds, $entry,"mail");
echo $values["count"]." email addresses for this entry.<p>";
for ($i=0; $i < $values["count"]; $i++)
echo $values[$i]."<br>";

ldap_list

ldap_list -- Single-level 검색 (search)

Description

int ldap_list(int link_identifier, string base_dn, string filter);

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

// $ds is a valid link identifier for a directory server
$basedn = "o=My Company, c=US";
$justthese = array("ou");
$sr=ldap_list($ds, $basedn, "ou=*", $justthese);
$info = ldap_get_entries($ds, $sr);
for ($i=0; $i<$info["count"]; $i++)
echo $info[$i]["ou"][0] ;

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

// $ds is a valid link identifier for a directory server
// $person is all or part of a person's name, eg "Jo"
$dn = "o=My Company, c=US";
$filter="(|(sn=$person*)(givenname=$person*))";
$justthese = array( "ou", "sn", "givenname", "mail");
$sr=ldap_search($ds, $dn, $filter, $justthese);
$info = ldap_get_entries($ds, $sr);
print $info["count"]." entries returned<p>";

When you perform a search, and too much data comes back (alot of entries) you will get a warning, and ldap_get_entries() will fail. The trick here is to turn off the warnings, then check the return value.

$normerr = error_reporting ();
error_reporting (0);  // turn off warnings!
$sr = ldap_search ($ds, $dn, $searchfor);
$normerr = error_reporting ($normerr);
if (!$sr) {
    print "too many entries!";
} else .....
      

You could try narrowing the scope, by adding an extra filter eg. (cn=a*), but It would be nicer to be able to grab the results in bits (eg. 1-100, 101-200...).

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.

XXIII. Mail Functions

Table of Contents
mail

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 space between each address in to.

Example 1. Sending mail.

mail("rasmus@lerdorf.on.ca", "My Subject", "Line 1\nLine 2\nLine 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.

mail("ssb@guardian.no", "the subject", $message,
"From: webmaster@$SERVER_NAME\nReply-To: webmaster@$SERVER_NAME\nX-Mailer: PHP/" . phpversion());

( 역자주 : 다음과 같이 \r\n을 사용하여 header에 여러 내용을 첨가할 수 있다.
mail("ssb@guardian.no", "the subject", $message, "X-Mailer: PHP/" . phpversion()."\r\nFrom:webmaster@yourhost.com\r\nReply-To: webmaster@yourhost.com"); )

XXIV. Mathematical Functions

Table of Contents
Abs
Acos
Asin
Atan
Atan2
base_convert
BinDec
Ceil
Cos
DecBin
DecHex
DecOct
Exp
Floor
getrandmax
HexDec
Log
Log10
max
min
mt_rand
mt_srand
mt_getrandmax
number_format
OctDec
pi
pow
rand
round
Sin
Sqrt
srand
Tan


Introduction

이 수학 함수들은 여러분의 컴퓨터의 long과 double 형태로만 사용됩니다. 만약 여러분이 이 이상의 숫자를 다루어야한다면 arbitrary precision math functions를 사용하도록한다.


Math constants

PHP의 수학 함수 확장에서 다음값이 상수로 지정되어있다. :

Table 1. Math constants

Constant

Value

Description

M_PI

3.14159265358979323846

The value of π(pi)

 

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()

$binary = base_convert($hexadecimal, 16, 2);

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().

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단위와 소수점에 ,와 .등을 찍어준다.

format a number with grouped thousands

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 hexadecimal number represented by the hex_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().

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().

XXV. Miscellaneous Functions

Table of Contents
connection_aborted
connection_status
connection_timeout
eval
extract
die
exit
function_exists
ignore_user_abort
iptcparse
leak
pack
register_shutdown_function
serialize
sleep
unpack
unserialize
uniqid
usleep

이 함수들은 기존 범주에 포함시키기 곤란한 것들이다.

connection_aborted

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

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

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.

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

<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.<br>';
echo $str;
eval( "\$str = \"$str\";" );
echo $str;
?>

The above example will show:

This is a $string with my $name in it.
This is a cup with my coffee in it.

extract

extract -- 한 배열에서 symbol table로 변수들을 읽어 들인다.

Description

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

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.

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

<?
/* Suppose that $var_array is an array returned from
wddx_deserialize */
$size = "large";
$var_array = array("color" => "blue",
"size" => "medium",
"shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");
print "$color, $size, $shape, $wddx_size\n";
?>

The above example will produce:

blue, large, sphere, medium

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.

die

die -- 메시지를 출력하고 현재 스크립트의 실행을 중단한다.

Description

void die(string message);

This language construct outputs a message and terminates parsing of the script. It does not return.

Example 1. die example

<?php
$filename = '/path/to/data-file';
$file = fopen($filename, 'r')
or die "unable to open file ($filename)";
?>

exit

exit -- 현재 스크립트의 실행을 중단한다.

Description

void exit(void);

This language construct terminates parsing of the script. It does not return.

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.

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. 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

Example 1. pack format string

$binarydata = pack("nvc*", 0x1234, 0x5678, 65, 66);

The resulting binary string will be 6 bytes long and contain the byte sequence 0x12, 0x34, 0x78, 0x56, 0x41, 0x42.

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.

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

// $session_data contains a multi-dimensional array with session
// information for the current user. We use serialize() to store
// it in a database at the end of the request.
$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
"UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array(serialize($session_data), $PHP_AUTH_USER);
if (!odbc_execute($stmt, &$sqldata)) {
$stmt = odbc_prepare($conn,
"INSERT INTO sessions (id, data) VALUES(?, ?)");
if (!odbc_execute($stmt, &$sqldata)) {
/* Something went wrong. Bitch, whine and moan. */
}
}

sleep

sleep -- 실행을 잠시 지연시킨다.

Description

void sleep(int seconds);

The sleep function delays program execution for the given number of seconds.

See also usleep().

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

$array = unpack("c2chars/nint", $binarydata);

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 값으로 만들어준다.

creates a PHP value from a stored representation

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

// Here, we use unserialize() to load session data from a database
// into $session_data. This example complements the one described
// with serialize().
$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn, "SELECT data FROM sessions WHERE id = ?");
$sqldata = array($PHP_AUTH_USER);
if (!odbc_execute($stmt, &$sqldata) || !odbc_fetch_into($stmt, &$tmp)) {
// if the execute or fetch fails, initialize to empty array
$session_data = array();
} else {
// we should now have the serialized data in $tmp[0].
$session_data = unserialize($tmp[0]);
if (!is_array($session_data)) {
// something went wrong, initialize to empty array
$session_data = array();
}
}

uniqid

uniqid -- 유일한 id를 생성한다.

Description

int uniqid(string prefix);

uniqid() returns a prefixed unique identifier based on 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. The prefix can be up to 114 characters long.

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

$token = md5(uniqid("")); // no random portion
$better_token = md5(uniqid(random())); // better, difficult to guess

This will create a 32 character identifier (a 128 bit hex number) that is extremely difficult to predict.

usleep

usleep -- 실행을 백만분의 일초 단위로 지연시킨다.

Description

void usleep(int micro_seconds);

The sleep function delays program execution for the given number of micro_seconds.

See also sleep().

XXVI. mSQL Functions

Table of Contents
msql
msql_affected_rows
msql_close
msql_connect
msql_create_db
msql_createdb
msql_data_seek
msql_dbname
msql_drop_db
msql_dropdb
msql_error
msql_fetch_array
msql_fetch_field
msql_fetch_object
msql_fetch_row
msql_fieldname
msql_field_seek
msql_fieldtable
msql_fieldtype
msql_fieldflags
msql_fieldlen
msql_free_result
msql_freeresult
msql_list_fields
msql_listfields
msql_list_dbs
msql_listdbs
msql_list_tables
msql_listtables
msql_num_fields
msql_num_rows
msql_numfields
msql_numrows
msql_pconnect
msql_query
msql_regcase
msql_result
msql_select_db
msql_selectdb
msql_tablename

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 result);

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.

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 result, 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 result);

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).

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 result);

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 result, int field);

msql_fieldname() returns the name of the specified field. result is the result 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 result, 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(string result, 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(string result, 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(string result, 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 result);

msql_free_result() frees the memory associated with result. 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 result 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 result, 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 result, 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

<?php 
msql_connect ("localhost");
$result = msql_list_tables("wisconsin");
$i = 0;
while ($i < msql_numrows($result)) {
    $tb_names[$i] = msql_tablename($result, $i);
    echo $tb_names[$i] . "<BR>";
    $i++; 
}
?>

XXVII. MS SQL Server Functions

Table of Contents
mssql_affected_rows
mssql_close
mssql_connect
mssql_data_seek
mssql_fetch_array
mssql_fetch_field
mssql_fetch_object
mssql_fetch_row
mssql_field_seek
mssql_free_result
mssql_num_fields
mssql_num_rows
mssql_pconnect
mssql_query
mssql_result
mssql_select_db

mssql_affected_rows

mssql_affected_rows -- 최근 질의에 영향을 받는 row의 개수를 구한다.

Description

int mssql_affected_rows(int [link_identifier] );

Returns: The number of affected rows by the last query.

mssql_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.

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 mssql_num_rows().

mssql_close

mssql_close -- MS SQL Server connection을 닫는다.

Description

int mssql_close(int link_identifier);

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_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_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_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()

 

XXVIII. MySQL Functions

Table of Contents
mysql_affected_rows
mysql_close
mysql_connect
mysql_create_db
mysql_data_seek
mysql_dbname
mysql_db_query
mysql_drop_db
mysql_errno
mysql_error
mysql_fetch_array
mysql_fetch_field
mysql_fetch_lengths
mysql_fetch_object
mysql_fetch_row
mysql_field_name
mysql_field_seek
mysql_field_table
mysql_field_type
mysql_field_flags
mysql_field_len
mysql_free_result
mysql_insert_id
mysql_list_fields
mysql_list_dbs
mysql_list_tables
mysql_num_fields
mysql_num_rows
mysql_pconnect
mysql_query
mysql_result
mysql_select_db
mysql_tablename

These functions allow you to access MySQL database servers.

More information about MySQL can be found at 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"하면 될 것이다. )


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_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] , 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"

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 pointer to the specifyed row number. The next call to mysql_fetch_row() would return that row.

See also: mysql_data_seek().

mysql_dbname

mysql_dbname -- 현재 MySQL database의 이름을 구한다.

Description

string mysql_dbname(string result, int i);

mysql_dbname() returns the database name stored in position i of the result pointer returned from the mysql_list_dbs() function. The mysql_num_rows() function can be used to determine how many database names are available.

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);

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.

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

int mysql_fetch_object(int result);

Returns: An object with properties that correspond to the fetched row, or false if there are no more rows.

mysql_fetch_object() is similar to mysql_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 mysql_fetch_array(), and almost as quick as mysql_fetch_row() (the difference is insignificant).

Example 1. mysql fetch object

<?php
mysql_connect($host,$user,$password);
$result = mysql_db_query("database","select * from table");
while($row = mysql_fetch_object($result)) {
echo $row->user_id;
echo $row->fullname;
}
mysql_free_result($result);
?>

See also: mysql_fetch_array() and mysql_fetch_row().

mysql_fetch_row

mysql_fetch_row -- row를 배열(enumerated array)로 가져온다.

Description

array mysql_fetch_row(int result);

Returns: An array that corresponds to the fetched row, or false if there are no more rows.

mysql_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 mysql_fetch_row() would return the next row in the result set, or false if there are no more rows.

See also: mysql_fetch_array(), mysql_fetch_object(), mysql_data_seek(), mysql_fetch_lengths(), and mysql_result().

mysql_field_name

mysql_field_name -- 필드 이름을 구한다.

Description

string mysql_field_name(string result, int i);

mysql_field_name() returns the name of the specified field. Arguments to the function is the result identifier and the field index, ie. mysql_field_name($result,2);

Will return the name of the second field in the result associated with the result identifier.

For downwards compatibility mysql_fieldname() can also be used.

mysql_field_seek

mysql_field_seek -- 필드의 offset을 설정한다.

Description

int mysql_field_seek(int result, int field_offset);

Seeks to the specified field offset. If the next call to mysql_fetch_field() won't include a field offset, this field would be returned.

See also: mysql_fetch_field().

mysql_field_table

mysql_field_table -- 해당 필드를 가져 온 Table 이름을 구한다.

Description

string mysql_field_table(int result, int field_offset);

Get the table name for field. For downward compatibility mysql_fieldtable() can also be used.

mysql_field_type

mysql_field_type -- 필드 type을 구한다.

Description

string mysql_field_type(string result, int field_offset);

mysql_field_type() is similar to the mysql_field_name() function. The arguments are identical, but the field type is returned. This will be one of "int", "real", "string", "blob", or others as detailed in the MySQL documentation.

Example 1. mysql field types

<?php 
mysql_connect("localhost:3306");
mysql_select_db("wisconsin");
$result = mysql_query("SELECT * FROM onek");
$fields = mysql_num_fields($result);
$rows   = mysql_num_rows($result);
$i = 0;
$table = mysql_field_table($result, $i);
echo "Your '".$table."' table has ".$fields." fields and ".$rows." records <BR>";
echo "The table has the following fields <BR>"; 
while ($i < $fields) {
    $type  = mysql_field_type  ($result, $i);
    $name  = mysql_field_name  ($result, $i);
    $len   = mysql_field_len   ($result, $i);
    $flags = mysql_field_flags ($result, $i);
    echo $type." ".$name." ".$len." ".$flags."<BR>";
    $i++;
}
mysql_close();
?>

For downward compatibility mysql_fieldtype() can also be used.

mysql_field_flags

mysql_field_flags -- 필드 flag를 구한다.

Description

string mysql_field_flags(string result, int field_offset);

mysql_field_flags() returns the field flags of the specified field. The flags are reported as a single word per flag separated by a single space, so that you can split the returned value using explode().

The following flags are reported, if your version of MySQL is current enough to support them: "not_null", "primary_key", "unique_key", "multiple_key", "blob", "unsigned", "zerofill", "binary", "enum", "auto_increment", "timestamp".

For downward compatibility mysql_fieldflags() can also be used.

mysql_field_len

mysql_field_len -- 필드 길이를 구한다.

Description

int mysql_field_len(string result, int field_offset);

mysql_field_len() returns the length of the specified field. For downward compatibility mysql_fieldlen() can also be used.

mysql_free_result

mysql_free_result -- result memory를 풀어준다.

Description

int mysql_free_result(int result);

mysql_free_result() only needs to be called if you are worried about using too much memory while your script is running. All associated result memory for the specified result identifier will automatically be freed.

For downward compatibility mysql_freeresult() can also be used.

mysql_insert_id

mysql_insert_id -- 최근 INSERT에서 만들어진 id (generated id)를 구한다.

Description

int mysql_insert_id(int [link_identifier]);

mysql_insert_id() returns the ID generated for an AUTO_INCREMENTED field. This function takes no arguments. It will return the auto-generated ID returned by the last INSERT query performed.

mysql_list_fields

mysql_list_fields -- result field들을 나열한다.

Description

int mysql_list_fields(string database, string tablename);

mysql_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 mysql_field_flags(), mysql_field_len(), mysql_field_name(), and mysql_field_type().

A result 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 @mysql() then this error string will also be printed out.

For downward compatibility mysql_listfields() can also be used.

mysql_list_dbs

mysql_list_dbs -- server의 MySQL database들을 나열한다.

Description

int mysql_listdbs(void);

mysql_listdbs() will return a result pointer containing the databases available from the current mysql daemon. Use the mysql_dbname() function to traverse this result pointer.

For downward compatibility mysql_listdbs() can also be used.

mysql_list_tables

mysql_list_tables -- MySQL database의 table들을 나열한다.

Description

int mysql_list_tables(string database);

mysql_list_tables() takes a database name and result pointer much like the mysql_db_query() function. The mysql_tablename() function should be used to extract the actual table names from the result pointer.

For downward compatibility mysql_listtables() can also be used.

mysql_num_fields

mysql_num_fields -- result의 field 개수를 구한다.

Description

int mysql_num_fields(int result);

mysql_num_fields() returns the number of fields in a result set.

See also: mysql_db_query(), mysql_query(), mysql_fetch_field(), mysql_num_rows().

For downward compatibility mysql_numfields() can also be used.

mysql_num_rows

mysql_num_rows -- result의 row 개수를 구한다.

Description

int mysql_num_rows(string result);

mysql_num_rows() returns the number of rows in a result set.

See also: mysql_db_query(), mysql_query() and, mysql_fetch_row().

For downward compatibility mysql_numrows() can also be used.

mysql_pconnect

mysql_pconnect -- 영구적인 MySQL 접속을 연다.

Description

int mysql_pconnect(string [hostname] , string [username] , string [password] );

Returns: A positive MySQL persistent link identifier on success, or false on error

mysql_pconnect() acts very much like mysql_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 (mysql_close() will not close links established by mysql_pconnect()).

This type of links is therefore called 'persistent'.

mysql_query

mysql_query -- MySQL 질의를 전송한다.

Description

int mysql_query(string query, int [link_identifier] );

mysql_query() sends a query to the currently active database on the server that's associated with the specified link identifier. If 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 mysql_connect() was called, and use it.

update, insert, delete 질의의 경우는 단지 TRUE/FALSE만을 반환하고 종료한다. 그러나, select질의의 경우 성공하면 새 result identifier를 반환하기 때문에 나중에 꼭 mysql_free_result() 를 사용하여 사용된 자원을 반환하는 것을 잊지 말도록하자.

See also: mysql_db_query(), mysql_select_db(), and mysql_connect().

mysql_result

mysql_result -- result data를 구한다.

Description

int mysql_result(int result, int row, mixed field);

mysql_result() returns the contents of one cell from a MySQL 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 mysql_result(). Also, note that specifying a numeric offset for the field argument is much quicker than specifying a fieldname or tablename.fieldname argument.

Calls mysql_result() should not be mixed with calls to other functions that deal with the result set.

Recommended high-performance alternatives: mysql_fetch_row(), mysql_fetch_array(), and mysql_fetch_object().

mysql_select_db

mysql_select_db -- MySQL database를 선택한다.

Description

int mysql_select_db(string database_name, int [link_identifier] );

Returns: true on success, false on error

mysql_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 mysql_connect() was called, and use it.

Every subsequent call to mysql_query() will be made on the active database.

See also: mysql_connect(), mysql_pconnect(), and mysql_query()

For downward compatibility mysql_selectdb() can also be used.

mysql_tablename

mysql_tablename -- 해당 필드를 가져 온 Table 이름을 구한다.

Description

string mysql_tablename(int result, int i);

mysql_tablename() takes a result pointer returned by the mysql_list_tables() function as well as an integer index and returns the name of a table. The mysql_num_rows() function may be used to determine the number of tables in the result pointer.

Example 1. mysql_tablename() example

<?php 
mysql_connect ("localhost:3306");
$result = mysql_listtables ("wisconsin");
$i = 0;
while ($i < mysql_num_rows ($result)) {
    $tb_names[$i] = mysql_tablename ($result, $i);
    echo $tb_names[$i] . "<BR>";
    $i++;
}
?>

XXIX. Sybase Functions

Table of Contents
sybase_affected_rows
sybase_close
sybase_connect
sybase_data_seek
sybase_fetch_array
sybase_fetch_field
sybase_fetch_object
sybase_fetch_row
sybase_field_seek
sybase_free_result
sybase_num_fields
sybase_num_rows
sybase_pconnect
sybase_query
sybase_result
sybase_select_db

sybase_affected_rows

sybase_affected_rows -- 최근 질의에 영향을 받는 row의 개수를 구한다.

Description

int sybase_affected_rows(int [link_identifier] );

Returns: The number of affected rows by the last query.

sybase_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.

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 sybase_num_rows().

sybase_close

sybase_close -- Sybase connection을 닫는다.

Description

int sybase_close(int link_identifier);

Returns: true on success, false on error

sybase_close() closes the link to a Sybase 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.

sybase_close() will not close persistent links generated by sybase_pconnect().

See also: sybase_connect(), sybase_pconnect().

sybase_connect

sybase_connect -- Sybase server connection을 연다.

Description

int sybase_connect(string servername, string username, string password);

Returns: A positive Sybase link identifier on success, or false on error.

sybase_connect() establishes a connection to a Sybase 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 sybase_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 sybase_close().

See also sybase_pconnect(), sybase_close().

sybase_data_seek

sybase_data_seek -- internal row pointer를 옮긴다.

Description

int sybase_data_seek(int result_identifier, int row_number);

Returns: true on success, false on failure

sybase_data_seek() moves the internal row pointer of the Sybase result associated with the specified result identifier to pointer to the specifyed row number. The next call to sybase_fetch_row() would return that row.

See also: sybase_data_seek().

sybase_fetch_array

sybase_fetch_array -- row를 배열로 가져온다.

Description

int sybase_fetch_array(int result);

Returns: An array that corresponds to the fetched row, or false if there are no more rows.

sybase_fetch_array() is an extended version of sybase_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 sybase_fetch_array() is NOT significantly slower than using sybase_fetch_row(), while it provides a significant added value.

For further details, also see sybase_fetch_row()

sybase_fetch_field

sybase_fetch_field -- 필드 정보를 구한다.

Description

object sybase_fetch_field(int result, int field_offset);

Returns an object containing field information.

sybase_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 sybase_fetch_field() is retreived.

The properties of the object are:

See also sybase_field_seek()

sybase_fetch_object

sybase_fetch_object -- row를 객체(Object)로 가져온다.

Description

int sybase_fetch_object(int result);

Returns: An object with properties that correspond to the fetched row, or false if there are no more rows.

sybase_fetch_object() is similar to sybase_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 sybase_fetch_array(), and almost as quick as sybase_fetch_row() (the difference is insignificant).

See also: sybase_fetch-array() and sybase_fetch-row().

sybase_fetch_row

sybase_fetch_row -- row를 배열(enumerated array)로 가져온다.

Description

array sybase_fetch_row(int result);

Returns: An array that corresponds to the fetched row, or false if there are no more rows.

sybase_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 sybase_fetch_rows() would return the next row in the result set, or false if there are no more rows.

See also: sybase_fetch_array(), sybase_fetch_object(), sybase_data_seek(), sybase_fetch_lengths(), and sybase_result().

sybase_field_seek

sybase_field_seek -- 필드의 offset을 설정한다.

Description

int sybase_field_seek(int result, int field_offset);

Seeks to the specified field offset. If the next call to sybase_fetch_field() won't include a field offset, this field would be returned.

See also: sybase_fetch_field().

sybase_free_result

sybase_free_result -- result memory를 풀어준다.

Description

int sybase_free_result(int result);

sybase_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 sybase_free_result() with the result identifier as an argument and the associated result memory will be freed.

sybase_num_fields

sybase_num_fields -- result의 field 개수를 구한다.

Description

int sybase_num_fields(int result);

sybase_num_fields() returns the number of fields in a result set.

See also: sybase_db_query(), sybase_query(), sybase_fetch_field(), sybase_num_rows().

sybase_num_rows

sybase_num_rows -- result의 row 개수를 구한다.

Description

int sybase_num_rows(string result);

sybase_num_rows() returns the number of rows in a result set.

See also: sybase_db_query(), sybase_query() and, sybase_fetch_row().

sybase_pconnect

sybase_pconnect -- 영구적인 Sybase 접속을 연다.

Description

int sybase_pconnect(string servername, string username, string password);

Returns: A positive Sybase persistent link identifier on success, or false on error

sybase_pconnect() acts very much like sybase_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 (sybase_close() will not close links established by sybase_pconnect()).

This type of links is therefore called 'persistent'.

sybase_query

sybase_query -- Sybase 질의를 전송한다.

Description

int sybase_query(string query, int link_identifier);

Returns: A positive Sybase result identifier on success, or false on error.

sybase_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 sybase_connect() was called, and use it.

See also: sybase_db_query(), sybase_select_db(), and sybase_connect().

sybase_result

sybase_result -- result data를 구한다.

Description

int sybase_result(int result, int i, mixed field);

Returns: The contents of the cell at the row and offset in the specified Sybase result set.

sybase_result() returns the contents of one cell from a Sybase 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 sybase_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: sybase_fetch_row(), sybase_fetch_array(), and sybase_fetch_object().

sybase_select_db

sybase_select_db -- Sybase database를 선택한다.

Description

int sybase_select_db(string database_name, int link_identifier);

Returns: true on success, false on error

sybase_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 sybase_connect() was called, and use it.

Every subsequent call to sybase_query() will be made on the active database.

See also: sybase_connect(), sybase_pconnect(), and sybase_query()

XXX. Network Functions

Table of Contents
fsockopen
pfsockopen
set_socket_blocking
gethostbyaddr
gethostbyname
gethostbynamel
checkdnsrr
getmxrr
openlog
syslog
closelog
debugger_on
debugger_off

fsockopen

fsockopen -- Internet이나 Unix domain의 socket connection을 연다.

Description

int fsockopen(string hostname, int port, int [errno], string [errstr]);

Opens an Internet domain socket connection to hostname on port port and returns a file pointer, which may be used by fgets(), fgetss(), fputs(), and fclose(). If the call fails, it will return FALSE and if the optional errno and errstr arguments are present they will be set to indicate the actual system level error that ocurred on the system-level connect() call. If the returned errno is 0, but the function returned FALSE, it is an indication that the error occurred before the connect() call. This is most likely due to a problem initializing the socket. Note that the errno and errstr arguments should be passed by reference.

If port is 0 and the operating system supports Unix domain sockets, hostname will be used as the filename of a Unix domain socket to connect to.

The socket will by default be opened in blocking mode. You can switch it to non-blocking mode by using the set_socket_blocking().

Example 1. fsockopen example

$fp = fsockopen("www.php.net", 80, &$errno, &$errstr);
if(!$fp) {
        echo "$errstr ($errno)<br>\n";
} else {
        while(!feof($fp)) {
                echo fgets($fp,128);
        }
        fclose($fp);
}
          

pfsockopen

pfsockopen -- 영구적인(persistent) Internet이나 Unix domain의 socket 연결을 연다.

Description

int pfsockopen(string hostname, int port, int [errno], string [errstr]);

This function behaves exactly as fsockopen() with the difference that the connection is not closed after the request is finished. It is the persistent version of fsockopen.

set_socket_blocking

set_socket_blocking -- 소켓의 blocking/non-blocking 모드를 설정한다.

Description

int set_socket_blocking(int socket descriptor, int mode);

If mode is false, the given socket descriptor will be switched to non-blocking mode, and if true, it will be switched to blocking mode. This affects calls like fgets() that read from the socket. In non-blocking mode an fgets() call will always return right away while in blocking mode it will wait for data to become available on the socket.

gethostbyaddr

gethostbyaddr -- 주어진 IP address에 해당하는 Internet host name을 구한다.

Description

string gethostbyaddr(string ip_address);

Returns the host name of the Internet host specified by ip_address. If an error occurs, returns ip_address.

See also gethostbyname().

gethostbyname

gethostbyname -- 주어진 Internet host name에 해당하는 IP address를 구한다.

Description

string gethostbyname(string hostname);

Returns the IP address of the Internet host specified by hostname.

See also gethostbyaddr().

gethostbynamel

gethostbynamel -- 주어진 Internet host name에 해당하는 IP addresse들의 list를 구한다.

Description

array gethostbynamel(string hostname);

Returns a list of IP addresses to which the Internet host specified by hostname resolves.

See also gethostbyname(), gethostbyaddr(), checkdnsrr(), getmxrr(), and the named(8) manual page.

checkdnsrr

checkdnsrr -- 주어진 Internet host name or IP address에 해당하는 DNS record들을 검사한다 .

Description

int checkdnsrr(string host, string [type]);

Searches DNS for records of type type corresponding to host. Returns true if any records are found; returns false if no records were found or if an error occurred.

type may be any one of: A, MX, NS, SOA, PTR, CNAME, or ANY. The default is MX.

host may either be the IP address in dotted-quad notation or the host name.

See also getmxrr(), gethostbyaddr(), gethostbyname(), gethostbynamel(), and the named(8) manual page.

getmxrr

getmxrr -- 주어진 Internet host name에 해당하는 MX record들을 구한다.

Description

int getmxrr(string hostname, array mxhosts, array [weight]);

Searches DNS for MX records corresponding to hostname. Returns true if any records are found; returns false if no records were found or if an error occurred.

A list of the MX records found is placed into the array mxhosts. If the weight array is given, it will be filled with the weight information gathered.

See also checkdnsrr(), gethostbyname(), gethostbynamel(), gethostbyaddr(), and the named(8) manual page.

openlog

openlog -- system logger로의 connection을 연다.

Description

void openlog(string ident, int option, int facility);

openlog() opens a connection to the system logger for a program. The string ident is added to each message. Values for option and facility are given in the next section. The use of openlog() is optional; It will automatically be called by syslog() if necessary, in which case ident will default to false. See also syslog() and closelog().

syslog

syslog -- system log message를 만든다.

Description

void syslog(int priority, string message);

syslog() generates a log message that will be distributed by the system logger. priority is a combination of the facility and the level, values for which are given in the next section. The remaining argument is the message to send, except that the two characters %m will be replaced by the error message string (strerror) corresponding to the present value of errno.

More information on the syslog facilities can be found in the man pages for syslog on Unix machines.

On Windows NT, the syslog service is emulated using the Event Log.

closelog

closelog -- system logger로의 connection을 닫는다.

Description

string passthru(void);

closelog() closes the descriptor being used to write to the system logger. The use of closelog() is optional.

debugger_on

debugger_on -- 내장된 PHP debugger를 enable 한다.

Description

void debugger_on(string address);

Enables the internal PHP debugger, connecting it to address. The debugger is still under development.

debugger_off

debugger_off -- 내장된 PHP debugger를 disable 한다.

Description

void debugger_off(void);

Disables the internal PHP debugger. The debugger is still under development.

XXXI. ODBC Functions

Table of Contents
odbc_autocommit
odbc_binmode
odbc_close
odbc_close_all
odbc_commit
odbc_connect
odbc_cursor
odbc_do
odbc_exec
odbc_execute
odbc_fetch_into
odbc_fetch_row
odbc_field_name
odbc_field_type
odbc_field_len
odbc_free_result
odbc_longreadlen
odbc_num_fields
odbc_pconnect
odbc_prepare
odbc_num_rows
odbc_result
odbc_result_all
odbc_rollback
odbc_setoption

odbc_autocommit

odbc_autocommit -- autocommit 기능을 켜고, 끈다.

Description

int odbc_autocommit(int connection_id, int [OnOff]);

Without the OnOff parameter, this function returns auto-commit status for connection_id. True is returned if auto-commit is on, false if it is off or an error occurs.

If OnOff is true, auto-commit is enabled, if it is false auto-commit is disabled. Returns true on success, false on failure.

By default, auto-commit is on for a connection. Disabling auto-commit is equivalent with starting a transaction.

See also odbc_commit() and odbc_rollback().

odbc_binmode

odbc_binmode -- binary column data를 다룬다.

Description

int odbc_binmode(int result_id, int mode);

(ODBC SQL types affected: BINARY, VARBINARY, LONGVARBINARY)

When binary SQL data is converted to character C data, each byte (8 bits) of source data is represented as two ASCII characters. These characters are the ASCII character representation of the number in its hexadecimal form. For example, a binary 00000001 is converted to "01" and a binary 11111111 is converted to "FF".

Table 1. LONGVARBINARY handling

binmode

longreadlen

result

ODBC_BINMODE_PASSTHRU

0

passthru

ODBC_BINMODE_RETURN

0

passthru

ODBC_BINMODE_CONVERT

0

passthru

ODBC_BINMODE_PASSTHRU

0

passthru

ODBC_BINMODE_PASSTHRU

>0

passthru

ODBC_BINMODE_RETURN

>0

return as is

ODBC_BINMODE_CONVERT

>0

return as char

If odbc_fetch_into() is used, passthru means that an empty string is returned for these columns.

If result_id is 0, the settings apply as default for new results.

Note: Default for longreadlen is 4096 and binmode defaults to ODBC_BINMODE_RETURN. Handling of binary long columns is also affected by odbc_longreadlen()

odbc_close

odbc_close -- ODBC connection을 닫는다.

Description

void odbc_close(int connection_id);

odbc_close() will close down the connection to the database server associated with the given connection identifier.

NOTE: This function will fail if there are open transactions on this connection. The connection will remain open in this case.

odbc_close_all

odbc_close_all -- 모든 ODBC connection들을 닫는다.

Description

void odbc_close_all(void);

odbc_close_all() will close down all connections to database server(s).

NOTE: This function will fail if there are open transactions on a connection. This connection will remain open in this case.

odbc_commit

odbc_commit -- ODBC transaction을 commit한다.

Description

int odbc_commit(int connection_id);

Returns: true on success, false on failure. All pending transactions on connection_id are committed.

odbc_connect

odbc_connect -- datasource와 연결한다.

Description

int odbc_connect(string dsn, string user, string password);

Returns an ODBC connection id or 0 (false) on error.

The connection id returned by this functions is needed by other ODBC functions. You can have multiple connections open at once. For persistent connections see odbc_pconnect().

odbc_cursor

odbc_cursor -- cursorname을 구한다.

Description

string odbc_cursor(int result_id);

odbc_cursor will return a cursorname for the given result_id.

odbc_do

odbc_do -- odbc_exec()와 같다.

Description

string odbc_do(int conn_id, string query);

odbc_do will execute a query on the given connection

odbc_exec

odbc_exec -- SQL 문장을 준비하고 실행한다.

Description

int odbc_exec(int connection_id, string query_string);

Returns false on error. Returns an ODBC result identifier if the SQL command was executed successfully.

odbc_exec() will send an SQL statement to the database server specified by connection_id. This parameter must be a valid identifier returned by odbc_connect() or odbc_pconnect().

See also: odbc_prepare() and odbc_execute() for multiple execution of SQL statements.

odbc_execute

odbc_execute -- 실행할 준비가 된 문장을 실행한다.

Description

int odbc_execute(int result_id, array [parameters_array]);

Executes a statement prepared with odbc_prepare(). Returns true on successful execution, false otherwise. The array arameters_array only needs to be given if you really have parameters in your statement.

odbc_fetch_into

odbc_fetch_into -- 한개의 result row를 배열로 가져온다.

Description

int odbc_fetch_into(int result_id, int [rownumber], array result_array);

Returns the number of columns in the result; false on error. result_array must be passed by reference, but it can be of any type since it will be converted to type array. The array will contain the column values starting at array index 0.

odbc_fetch_row

odbc_fetch_row -- row를 가져온다.

Description

int odbc_fetch_row(int result_id, int [row_number]);

If odbc_fetch_row() was succesful (there was a row), true is returned. If there are no more rows, false is returned.

odbc_fetch_row() fetches a row of the data that was returned by odbc_do() / odbc_exec(). After odbc_fetch_row() is called, the fields of that row can be accessed with odbc_result().

If row_number is not specified, odbc_fetch_row() will try to fetch the next row in the result set. Calls to odbc_fetch_row() with and without row_number can be mixed.

To step through the result more than once, you can call odbc_fetch_row() with row_number 1, and then continue doing odbc_fetch_row() without row_number to review the result. If a driver doesn't support fetching rows by number, the row_number parameter is ignored.

odbc_field_name

odbc_field_name -- columnname을 구한다.

Description

string odbc_fieldname(int result_id, int field_number);

odbc_field_name() will return the name of the field occupying the given column number in the given ODBC result identifier. Field numbering starts at 1. false is returned on error.

odbc_field_type

odbc_field_type -- field의 datatype을 구한다.

Description

string odbc_field_type(int result_id, mixed field);

odbc_field_type() will return the SQL type of the field referecend by name or number in the given ODBC result identifier. Field numbering runs from 1.

odbc_field_len

odbc_field_len -- field의 길이를 구한다.

Description

string odbc_field_type(int result_id, int field_number);

odbc_field_type() will return the length of the field referecend by number in the given ODBC result identifier. Field numbering starts at 1.

odbc_free_result

odbc_free_result -- 지정된 result에 관련된 resource를 해제한다.

Description

int odbc_free_result(int result_id);

Always returns true.

odbc_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 is finished. But, if you are sure you are not going to need the result data anymore in a script, you may call odbc_free_result(), and the memory associated with result_id will be freed.

NOTE: If auto-commit is disabled (see odbc_autocommit()) and you call odbc_free_result() before commiting, all pending transactions are rolled back.

odbc_longreadlen

odbc_longreadlen -- LONG column들을 다룬다.

Description

int odbc_longreadlen(int result_id, int length);

(ODBC SQL types affected: LONG, LONGVARBINARY) The number of bytes returned to PHP is controled by the parameter length. If it is set to 0, Long column data is passed thru to the client.

NOTE: Handling of LONGVARBINARY columns is also affected by odbc_binmode()

odbc_num_fields

odbc_num_fields -- result의 column 개수

Description

int odbc_num_fields(int result_id);

odbc_num_fields() will return the number of fields (columns) in an ODBC result. This function will return -1 on error. The argument is a valid result identifier returned by odbc_exec().

odbc_pconnect

odbc_pconnect -- 영구적인 database connection을 연다.

Description

int odbc_pconnect(string dsn, string user, string password);

Returns an ODBC connection id or 0 (false) on error. This function is much like odbc_connect(), except that the connection is not really closed when the script has finished. Future requests for a connection with the same dsn, user, password combination (via odbc_connect() and odbc_pconnect()) can reuse the persistent connection.

NOTE: Persistent connections have no effect if PHP is used as a CGI program.

For more information on persistent connections, refer to the PHP3 FAQ.

odbc_prepare

odbc_prepare -- 실행할 문장을 준비한다.

Description

int odbc_prepare(int connection_id, string query_string);

Returns false on error.

Returns an ODBC result identifier if the SQL command was prepared successfully. The result identifier can be used later to execute the statement with odbc_execute().

odbc_num_rows

odbc_num_rows -- result의 row 개수

Description

int odbc_num_rows(int result_id);

odbc_num_rows() will return the number of rows in an ODBC result. This function will return -1 on error. For INSERT, UPDATE and DELETE statements odbc_num_rows() returns the number of rows affected. For a SELECT clause this can be the number of rows available.

Note: Using odbc_num_rows() to determine the number of rows available after a SELECT will return -1 with many drivers.

odbc_result

odbc_result -- result data를 구한다.

Description

string odbc_result(int result_id, mixed field);

Returns the contents of the field.

field can either be an integer containing the column number of the field you want; or it can be a string containing the name of the field. For example:

$item_3 = odbc_result($Query_ID, 3 );
$item_val = odbc_result($Query_ID, "val");

The first call to odbc_result() returns the value of the third field in the current record of the query result. The second function call to odbc_result() returns the value of the field whose field name is "val" in the current record of the query result. An error occurs if a column number parameter for a field is less than one or exceeds the number of columns (or fields) in the current record. Similarly, an error occurs if a field with a name that is not one of the fieldnames of the table(s) that is(are) being queried.

Field indices start from 1. Regarding the way binary or long column data is returned refer to odbc_binmode() and odbc_longreadlen().

odbc_result_all

odbc_result_all -- result를 HTML table로 인쇄한다.

Description

int odbc_result_all(int result_id, string [format]);

Returns the number of rows in the result or false on error.

odbc_result_all() will print all rows from a result identifier produced by odbc_exec(). The result is printed in HTML table format. With the optional string argument format, additional overall table formatting can be done.

odbc_rollback

odbc_rollback -- transaction을 Rollback 한다.

Description

int odbc_rollback(int connection_id);

Rolls back all pending statements on connection_id. Returns true on success, false on failure.

odbc_setoption

odbc_setoption -- ODBC 설정을 조정한다. 에러가 발생한 경우 false를 반환하고 아니면 true를 반환한다.

Description

int odbc_setoption(int id, int function, int option, int param);

This function allows fiddling with the ODBC options for a particular connection or query result. It was written to help find work arounds to problems in quirky ODBC drivers. You should probably only use this function if you are an ODBC programmer and understand the effects the various options will have. You will certainly need a good ODBC reference to explain all the different options and values that can be used. Different driver versions support different options.

Because the effects may vary depending on the ODBC driver, use of this function in scripts to be made publicly available is strongly discouraged. Also, some ODBC options are not available to this function because they must be set before the connection is established or the query is prepared. However, if on a particular job it can make PHP work so your boss doesn't tell you to use a commercial product, that's all that really matters.

Id is a connection id or result id on which to change the settings.For SQLSetConnectOption(), this is a connection id. For SQLSetStmtOption(), this is a result id.

function is the ODBC function to use. The value should be 1 for SQLSetConnectOption() and 2 for SQLSetStmtOption().

Parmeter option is the option to set.

Parameter param is the value for the given option.

Example 1. ODBC Setoption Examples

// 1. Option 102 of SQLSetConnectOption() is SQL_AUTOCOMMIT.
// Value 1 of SQL_AUTOCOMMIT is SQL_AUTOCOMMIT_ON.
// This example has the same effect as
// odbc_autocommit($conn, true);
odbc_setoption ($conn, 1, 102, 1);
// 2. Option 0 of SQLSetStmtOption() is SQL_QUERY_TIMEOUT.
// This example sets the query to timeout after 30 seconds.
$result = odbc_prepare ($conn, $sql);
odbc_setoption ($result, 2, 0, 30);
odbc_execute ($result);

XXXII. Oracle 8 functions

Table of Contents
OCIDefineByName
OCIBindByName
OCILogon
OCILogOff
OCIExecute
OCICommit
OCIRollback
OCINumRows
OCIResult
OCIFetch
OCIFetchInto
OCIColumnIsNULL
OCIColumnSize

이 함수들은 Oracle8과 Oracle7 데이터베이스를 접근할 수 있도록 해준다. 이것은 Oracle8 Call-Interface (OCI8)를 사용한다.이 드라이버를 사용하려면 Oracle8 client libraries가 필요하다.

이 드라이버는 보통의 PHP3 Ora_ 드라이버조다 더욱 유연하다. 이것은 PHP3의 전역, 지역 변수들의 Oracle placeholder로의 binding을 지원하고, full LOB와 FILE, ROWID를 지원하며, user-supplied define variable을 사용할 수 있도록 해 준다.

OCIDefineByName

OCIDefineByName -- SELECT 중의 degine-step으로 PHP 변수를 사용한다.

Description

int OCIDefineByName(int stmt, string Column-Name, mixed &variable, int [type]);

OCIDefineByName() uses fetches SQL-Columns into user-defined PHP-Variables. Be careful that Oracle user ALL-UPPERCASE column-names, whereby in your select you can also write lower-case. OCIDefineByName() expects the Column-Name to be in uppercase. If you define a variable that doesn't exists in you select statement, no error will be given!

If you need to define an abstract Datatype (LOB/ROWID/BFILE) you need to allocate it first using OCINewDescriptor() function. See also the OCIBindByName() function.

Example 1. OCIDefineByName

<?php
/* OCIDefineByPos example thies@digicol.de (980219) */
$conn = OCILogon("scott","tiger");
$stmt = OCIParse($conn,"select empno, ename from emp");
/* the define MUST be done BEFORE ociexecute! */
OCIDefineByName($stmt,"EMPNO",&$empno);
OCIDefineByName($stmt,"ENAME",&$ename);
OCIExecute($stmt);
while (OCIFetch($stmt)) {
echo "empno:".$empno."\n";
echo "ename:".$ename."\n";
}
OCIFreeStatement($stmt);
OCILogoff($conn);
?>

OCIBindByName

OCIBindByName -- PHP 변수를 Oracle Placeholder로 bind 한다.

Description

int OCIBindByName(int stmt, string ph_name, mixed &variable, intlength, int [type]);

OCIBindByName() binds the PHP variable variable to the Oracle placeholder ph_name. Whether it will be used for input or output will be determined run-time, and the necessary storage space will be allocated. The length paramter sets the maximum length for the bind. If you set length to -1 OCIBindByName() will use the current length of variable to set the maximum length.

If you need to bind an abstract Datatype (LOB/ROWID/BFILE) you need to allocate it first using OCINewDescriptor() function. The length is not used for abstract Datatypes and should be set to -1. The type variable tells oracle, what kind of descriptor we want to use. Possible values are: OCI_B_FILE (Binary-File), OCI_B_CFILE (Character-File), OCI_B_CLOB (Character-LOB), OCI_B_BLOB (Binary-LOB) and OCI_B_ROWID (ROWID).

Example 1. OCIDefineByName

<?php
/* OCIBindByPos example thies@digicol.de (980221)
inserts 3 resords into emp, and uses the ROWID for updating the
records just after the insert.
*/
$conn = OCILogon("scott","tiger");
$stmt = OCIParse($conn,"insert into emp (empno, ename) ".
"values (:empno,:ename) ".
"returning ROWID into :rid");
$data = array(1111 => "Larry", 2222 => "Bill", 3333 => "Jim");
$rowid = OCINewDescriptor($conn,OCI_D_ROWID);
OCIBindByName($stmt,":empno",&$empno,32);
OCIBindByName($stmt,":ename",&$ename,32);
OCIBindByName($stmt,":rid",&$rowid,-1,OCI_B_ROWID);
$update = OCIParse($conn,"update emp set sal = :sal where ROWID = :rid");
OCIBindByName($update,":rid",&$rowid,-1,OCI_B_ROWID);
OCIBindByName($update,":sal",&$sal,32);
$sal = 10000;
while (list($empno,$ename) = each($data)) {
OCIExecute($stmt);
OCIExecute($update);
}
$rowid->free();
OCIFreeStatement($update);
OCIFreeStatement($stmt);
$stmt = OCIParse($conn,"select * from emp where empno in (1111,2222,3333)");
OCIExecute($stmt);
while (OCIFetchInto($stmt,&$arr,OCI_ASSOC)) {
var_dump($arr);
}
OCIFreeStatement($stmt);
/* delete our "junk" from the emp table.... */
$stmt = OCIParse($conn,"delete from emp where empno in (1111,2222,3333)");
OCIExecute($stmt);
OCIFreeStatement($stmt);
OCILogoff($conn);
?>

OCILogon

OCILogon -- Oracle과 연결한다.

Description

int OCILogon(string username, string password, string [OCACLE_SID]);

OCILogon() returns an connection identified needed for most other OCI calls.

OCILogOff

OCILogOff -- Oracle과의 연결을 끊는다.

Description

int OCILogOff(int connection);

OCILogOff() closes an Oracle connection.

OCIExecute

OCIExecute -- 명령문을 실행한다.

Description

int OCIExecute(int statement, int [mode]);

OCIExecute() executes a previously parsed statement. (see OCIParse()). The optional mode allows you to specify the execution-mode (default is OCI_COMMIT_ON_SUCCESS). If you don't want statements to be commited automaticly specify OCI_DEFAULT as your mode.

OCICommit

OCICommit -- 수행되었던 transaction들을 Commit한다.

Description

int OCICommit(int connection);

OCICommit() commits all outstanding statements for Oracle connection connection.

OCIRollback

OCIRollback -- 수행되었던 transaction들을 Rolls back한다.

Description

int OCIRoolback(int connection);

OCICommit() rolls back all outstanding statements for Oracle connection connection.

OCINumRows

OCINumRows -- 영향받는 row의 개수를 구한다.

Description

int OCINumRows(int statement);

OCINumRows() returns the number of rows affected for eg update-statements. This funtions will not tell you the number of rows that a select will return!

OCIResult

OCIResult -- fetched row에 있는 coulumn 값을 반환한다.

Description

int OCIResult(int statement, mixed column);

OCIResult() returns the data for column column in the current row (see OCIFetch()).OCIResult() will return everything as strings except for abstract types (ROWIDs, LOBs and FILEs).

OCIFetch

OCIFetch -- result-buffer로 다음 row를 가져온다.

Description

int OCIFetch(int statement);

OCIFetch() fetches the next row (for SELECT statements) into the internal result-buffer.

OCIFetchInto

OCIFetchInto -- result-array로 다음 row를 가져온다.

Description

int OCIFetchInto(array &result, int [mode]);

OCIFetchInto() fetches the next row (for SELECT statements) into the result array. OCIFetchInto() will overwrite the previous content of result. By default result will contain a one-based array of all columns that are not NULL.

The mode parameter allows you to change the default behaviour. You can specify more than one flag by simply addig them up (eg OCI_ASSOC+OCI_RETURN_NULLS). The known flags are:

OCI_ASSOC Return an associative array.

OCI_NUM Return an numbered array starting with one. (DEFAULT)

OCI_RETURN_NULLS Return empty columns.

OCI_RETURN_LOBS Return the value of a LOB instead of the desxriptor.

OCIColumnIsNULL

OCIColumnIsNULL -- result 칼럼이 NULL인가 검사한다.

Description

int OCIColumnIsNULL(int stmt, mixed column);

OCIColumnIsNULL() returns true if the returned column col in the result from the statement stmt is NULL. You can either use the column-number (1-Based) or the column-name for the col parameter.

OCIColumnSize

OCIColumnSize -- result 칼럼 크기를 반환한다.

Description

int OCIColumnSize(int stmt, mixed column);

OCIColumnSize() returns the size of the column as given by Oracle. You can either use the column-number (1-Based) or the column-name for the col parameter.

XXXIII. Oracle functions

Table of Contents
Ora_Bind
Ora_Close
Ora_ColumnName
Ora_ColumnType
Ora_Commit
Ora_CommitOff
Ora_CommitOn
Ora_Error
Ora_ErrorCode
Ora_Exec
Ora_Fetch
Ora_GetColumn
Ora_Logoff
Ora_Logon
Ora_Open
Ora_Parse
Ora_Rollback

Ora_Bind

Ora_Bind -- PHP 변수를 Oracle 파라메터로 bind한다.

Description

int ora_bind(int cursor, string PHP variable name, string SQL parameter name, int length, int [type]);

Returns true if the bind succeeds, otherwise false. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions.

This function binds the named PHP variable with a SQL parameter. The SQL parameter must be in the form ":name". With the optional type parameter, you can define whether the SQL parameter is an in/out (0, default), in (1) or out (2) parameter. As of PHP 3.0.1, you can use the constants ORA_BIND_INOUT, ORA_BIND_IN and ORA_BIND_OUT instead of the numbers.

ora_bind must be called after ora_parse() and before ora_exec(). Input values can be given by assignment to the bound PHP variables, after calling ora_exec() the bound PHP variables contain the output values if available.

<?php
ora_parse($curs, "declare tmp INTEGER; begin tmp := :in; :out := tmp; :x := 7.77; end;");
ora_bind($curs, "result", ":x", $len, 2);
ora_bind($curs, "input", ":in", 5, 1);
ora_bind($curs, "output", ":out", 5, 2);
$input = 765;
ora_exec($curs);
echo "Result: $result<BR>Out: $output<BR>In: $input";
?>

Ora_Close

Ora_Close -- Oracle cursor를 닫는다.

Description

int ora_close(int cursor);

Returns true if the close succeeds, otherwise false. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions.

( 역자주 : 이 함수는 언제나 "wrong parameter count" 이나"true"를 반환한다. 그러나 C-API인 "ora_del_cursor()"는 원래 아무것도 반환하지 않도록되어 있으므로 무시하도록 한다. )

This function closes a data cursor opened with ora_open().

Ora_ColumnName

Ora_ColumnName -- Oracle result column의 이름을 구한다.

Description

string Ora_ColumnName(int cursor, int column);

Returns the name of the field/column column on the cursor cursor. The returned name is in all uppercase letters.

Ora_ColumnType

Ora_ColumnType -- Oracle result column의 type을 구한다.

Description

string Ora_ColumnType(int cursor, int column);

Returns the Oracle data type name of the field/column column on the cursor cursor. The returned type will be one of the following:

"VARCHAR2"

"VARCHAR"

"CHAR"

"NUMBER"

"LONG"

"LONG RAW"

"ROWID"

"DATE"

"CURSOR"

Ora_Commit

Ora_Commit -- Oracle transaction을 commit 한다.

Description

int ora_commit(int conn);

Returns true on success, false on error. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions. This function commits an Oracle transaction. A transaction is defined as all the changes on a given connection since the last commit/rollback, autocommit was turned off or when the connection was established.

Ora_CommitOff

Ora_CommitOff -- automatic commit을 disable 한다.

Description

int ora_commitoff(int conn);

Returns true on success, false on error. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions.

This function turns off automatic commit after each ora_exec().

Ora_CommitOn

Ora_CommitOn -- automatic commit을 enable 한다.

Description

int ora_commiton(int conn);

This function turns on automatic commit after each ora_exec() on the given connection.

Returns true on success, false on error. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions.

Ora_Error

Ora_Error -- Oracle error message를 구한다.

Description

string Ora_Error(int cursor);

Returns an error message of the form XXX-NNNNN where XXX is where the error comes from and NNNNN identifies the error message.

The cursor parameter can as of PHP 3. 0.6 also be a connection id.

On UNIX versions of Oracle, you can find details about an error message like this: $ oerr ora 00001 00001, 00000, "unique constraint (%s.%s) violated" // *Cause: An update or insert statement attempted to insert a duplicate key // For Trusted ORACLE configured in DBMS MAC mode, you may see // this message if a duplicate entry exists at a different level. // *Action: Either remove the unique restriction or do not insert the key

Ora_ErrorCode

Ora_ErrorCode -- Oracle error code를 구한다.

Description

int Ora_ErrorCode(int cursor);

Returns the numeric error code of the last executed statement on the specified cursor.

The cursor parameter can as of PHP 3. 0.6 also be a connection id.

Ora_Exec

Ora_Exec -- Oracle cursor에 있는 parse된 문장을 실행한다.

Description

int ora_exec(int cursor);

Returns true on success, false on error. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions.

Ora_Fetch

Ora_Fetch -- cursor에서 data의 row를 가져온다.

Description

int ora_fetch(int cursor);

Returns true (a row was fetched) or false (no more rows, or an error occured). If an error occured, details can be retrieved using the ora_error() and ora_errorcode() functions. If there was no error, ora_errorcode() will return 0. Retrieves a row of data from the specified cursor.

Ora_GetColumn

Ora_GetColumn -- 가져온 row에서 data를 구한다.

Description

mixed ora_getcolumn(int cursor, mixed column);

Returns the column data. If an error occurs, False is returned and ora_errorcode() will return a non-zero value. Note, however, that a test for False on the results from this function may be true in cases where there is not error as well (NULL result, empty string, the number 0, the string "0"). Fetches the data for a column or function result.

Ora_Logoff

Ora_Logoff -- Oracle connection을 닫는다.

Description

int ora_logoff(int connection);

Returns true on success, False on error. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions. Logs out the user and disconnects from the server.

Ora_Logon

Ora_Logon -- Oracle connection을 연다.

Description

int ora_logon(string user, string password);

Establishes a connection between PHP and an Oracle database with the given username and password.

Connections can be made using SQL*Net by supplying the TNS name to user like this:

$conn = Ora_Logon("user@TNSNAME", "pass");

If you have character data with non-ASCII characters, you should make sure that NLS_LANG is set in your environment. For server modules, you should set it in the server's environment before starting the server.

Returns a connection index on success, or false on failure. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions.

Ora_Open

Ora_Open -- Oracle cursor를 연다.

Description

int ora_open(int connection);

Opens an Oracle cursor associated with connection.

Returns a cursor index or False on failure. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions.

Ora_Parse

Ora_Parse -- SQL 문장을 해석(parse)한다.

Description

int ora_parse(int cursor_ind, string sql_statement, int defer);

This function parses an SQL statement or a PL/SQL block and associates it with the given cursor. Returns 0 on success or -1 on error.

Ora_Rollback

Ora_Rollback -- transaction을 Rollback 한다.

Description

int ora_rollback(int connection);

This function undoes an Oracle transaction. (See ora_commit() for the definition of a transaction.)

Returns true on success, false on error. Details about the error can be retrieved using the ora_error() and ora_errorcode() functions.


( 역자주 : 이 이하의 Oracle 부분은 영문 매뉴얼에 없는 부분으로 PHP 홈페이지의 Note를 참고하였다. )

다음과 같은 함수들이 PHP3.0.2a부터 추가되었다.

Ora_Do($conn, $query)
Ora_Do()는 많이 사용하는 1회성 질의를 위해 Ora_Parse(), Ora_Exec(), Ora_Fetch()의 동작을 한꺼번에 수행하는 함수이다.
Ora_FetchInto($curs, &$ary)
Ora_FetchInto는 전체 row를 fetch하여 결과를 전달받은 array reference에 저장한다. 이 함수는 해당 row의 컬럼 개수나 false를 반환한다.
ora_columnsize($curs, $colindex)
이 함수는 named column에서 type(ora_columntype()을 보라)의 크기를 반환한다. 컬럼 번호는 0부터 시작한다.
ora_numcols($curs)
result의 컬럼 개수를 반환한다. 이 함수는 ora_parse()/ora_exec()/ora_fetch()의 함수가 순서대로 완료되었을 때만 정상적인 값을 돌려준다. (ora_do()를 실행한 후도 된다.)
ora_numrows($curs)
컬럼 개수가 아니라 row의 개수라는 것만 제외하고는 위에 있는 ora_numcols()와 같다.
ora_plogon()
영구적인 연결(persistent connection)을 만든다는 점을 제외하고는 ora_login()과 동일하다. 영구적 연결은 mod_php에서만 의미가 있고 CGI PHP에서는 아무 의미가 없다. 이것은 메모리를 조금 더 사용하는 대가로 여러분의 mod_php의 데이터베이스 연결을 약간 빠르게 해 준다. 자세한 내용은 mysql_pconnect()를 참조하라


Oracle Example

Prerequisites

다음의 환경변수의 값을 알고 있어야 한다. :

ORACLE_HOME
Oracle이 설치되어 있는 디렉토리의 path. 이 변수는 보통 해당 시스템의 oracle 사용자로 설정된 사용자들은 login 스크립트에서 설정된다.
ORACLE_SID
연결하기를 원하는 database의 이름. 이 변수는 보통 사용자들은 UNIX 환경에서 설정된다.

이 변수 값들은 database에 연결하여 sqlplus를 사용할 수 있는 사용자로 login하여 확인할 수 있다. UNIX shell에서 다음과 같이 확인한다. :

prompt> echo $ORACLE_HOME
/opt/oracle/oracle/8.0.3
prompt> echo $ORACLE_SID
ORACLE

ora_* 함수들을 사용하는 간단한 PHP 스크립트 (A simple PHP script using ora_* functions)

<?php
  putenv("ORACLE_SID=ORACLE");
  putenv("ORACLE_HOME=/opt/oracle/oracle/8.0.3");
  $conn = ora_login("scott", "tiger");
  $curs = ora_open($conn);
  ora_commitoff($conn);
  $query = sprintf(&quotselect * from cat");
/* Long version */
/*
  ora_parse($curs, $query);
  ora_exec($curs);
  ora_fetch($curs);
*/
/* Short Version */
  ora_do($conn, $query);
 
  $ncols = ora_numcols($curs);
  $nrows = ora_numrows($curs);
  printf("Result size is $ncols cols by $nrows rows.<br>");
  for ($i=0; $i<$ncols; $i++) {
    printf("col[%s] = %s type[%d] = %s<br>",$i, ora_columnname($curs, $I), $i, ora_columntype($curs, $I));
  }
  for ($j=0; $j<$nrows; $j++) {
    for ($i=0; $i<$ncols; $i++) {
      $col = ora_getcolumn($curs, $I);
      printf("val[%d, %d] = %s * ", $j, $i, ora_getcolumn($curs, $I);
    }
    printf("<br>");
  }
?>
 
 

ORACLE_HOME이 /opt/oracle/oracle/8.0.3이라고 가정했을 때, 솔라리스에서 PHP3를 Orecle을 지원하도록 설정하는 방법은 다음과 같다. :

./configure --with-oracle \
            --with-config-file-path=/opt/GNUphp3/lib \
            --with-exec-dir=/opt/bin \
            --enable-debug=yes \
            --enable-safe-mode=no \
            --enable-url-fopen-wrapper=yes \
            --enable-track-vars=yes \
            --prefix=/opt/GNUphp3

then the resulting PHP binary will be dynamically linked against libclntsh.so in /opt/oracle/oracle/lib. The build process as generated by configure will include this directory with an -L option, but not with an -R option (run-time library search path). This means that the resulting binary will not be able to find libclntsh.so by itself, but depends on an appropriate LD_LIBRARY_PATH set within the web server CGI environment - which usually is not there. To fix this, grab the Makefile generated by configure and duplicate the -L/opt/oracle/oracle/8.0.3/lib option as an -R/opt/oracle/oracle/8.0.3/lib option (your -L and -R strings will look slightly different depending on the values for your oracle version and ORACLE_HOME). The -R option will compile in the corrent search path for libclntsh and you won't have any LD_LIBRARY_PATH pains any more.

XXXIV. PDF functions

Table of Contents
PDF_get_info
PDF_set_info_creator
PDF_set_info_title
PDF_set_info_subject
PDF_set_info_keywords
PDF_set_info_author
PDF_open
PDF_close
PDF_begin_page
PDF_end_page
PDF_show
PDF_show-xy
PDF_set_font
PDF_set_leading
PDF_set_text_rendering
PDF_set_horiz_scaling
PDF_set_text_rise
PDF_set_text_matrix
PDF_set_text_pos
PDF_set_char_spacing
PDF_set_word_spacing
PDF_continue_text
PDF_stringwidth
PDF_save
PDF_restore
PDF_translate
PDF_scale
PDF_rotate
PDF_setflat
PDF_setlinejoin
PDF_setlinecap
PDF_setmiterlimit
PDF_setlinewidth
PDF_setdash
PDF_moveto
PDF_curveto
PDF_lineto
PDF_circle
PDF_arc
PDF_rect
PDF_closepath
PDF_stroke
PDF_closepath_stroke
PDF_fill
PDF_fill_stroke
PDF_closepath_fill_stroke
PDF_endpath
PDF_clip
PDF_setgray_fill
PDF_setgray_stroke
PDF_setgray
PDF_setrgbcolor_fill
PDF_setrgbcolor_stroke
PDF_setrgbcolor
PDF_add_outline
PDF_set_transition
PDF_set_duration

PDF_open_jpeg
PDF_close_image
PDF_place_image
PDF_put_image
PDF_execute_image

여러분이 Thomas Merz가 제공하는 PDF 라이브러리(http://www.ifconnection.de/~tm/에서 찾을 수 있다.)를 가지고 있다면 여러분은 PHP에서 pdf 파일을 만들 수 있는 pdf 함수들을 사용할 수 있다. pdflib에 대한 자세한 설명은 pdflib의 소스와 함께 배포되는 것을 읽어 보거나, http://www.ifconnection.de/~tm/software/pdflib/PDFlib-0.6.pdf에서 구하여 읽어보면 된다. 이 PHP3 매뉴얼이 완성되지 않는한 앞에서 설명한 pdflib 문서들을 우선 적으로 보아야 할 것이다. php3의 모듈에 있는 함수는 pdflib 함수와 같은 이름을 사용한다. 또한 파라메터도 동일하다. 또한 여러분이 이 모듈을 효율적으로 사용하려면 여러분은 어느정도 pdf의 개념에 대해 이해하고 있어야 한다. pdf 모듈은 pdfdocpdfinfo라는 두가지 새로운 변수 type을 제공한다.


PDF_get_info

PDF_get_info -- pdf 문서에 대한 기본 정보(info structure)를 반환한다.

Description

info pdf_get_info(string filename);

The PDF_get_info() function will return a default info structure for the pdf document. It can be filled with appropriate information like the author, subject etc.

Example 1. PDF_get_info

<?php $info = PDF_get_info();
PDF_set_info_creator($info, "Name of Author") ?>

See also PDF_set_info_creator(), PDF_set_info_subject().

PDF_set_info_creator

PDF_set_info_creator -- info structure의 creator 필드를 설정한다.

Description

void pdf_set_info_creator(info info, string creator);

The PDF_set_info_creator() function sets the creator of a pdf document. It has to be called after PDF_get_info() and before PDF_open(). Calling it after PDF_open() will have no effect on the document.

Note: This function is not part of the pdf library.

See also PDF_get_info(), PDF_set_info_subject().

PDF_set_info_title

PDF_set_info_title -- info structure의 title 필드를 설정한다.

Description

void pdf_set_info_title(info info, string title);

The PDF_set_info_title() function sets the title of a pdf document. It has to be called after PDF_get_info() and before PDF_open(). Calling it after PDF_open() will have no effect on the document.

Note: This function is not part of the pdf library.

See also PDF_get_info(), PDF_set_info_xxxxx().

PDF_set_info_subject

PDF_set_info_subject -- info structure의 subject 필드를 설정한다.

Description

void pdf_set_info_subject(info info, string subject);

The PDF_set_info_subject() function sets the subject of a pdf document. It has to be called after PDF_get_info() and before PDF_open(). Calling it after PDF_open() will have no effect on the document.

Note: This function is not part of the pdf library.

See also PDF_get_info(), PDF_set_info_xxxxx().

PDF_set_info_keywords

PDF_set_info_keywords -- info structure의 keyword 필드를 설정한다.

Description

void pdf_set_info_keywords(info info, string keywords);

The PDF_set_info_keywords() function sets the keywords of a pdf document. It has to be called after PDF_get_info() and before PDF_open(). Calling it after PDF_open() will have no effect on the document.

Note: This function is not part of the pdf library.

See also PDF_get_info(), PDF_set_info_xxxxx().

PDF_set_info_author

PDF_set_info_author -- info structure의 author 필드를 설정한다.

Description

void pdf_set_info_author(info info, string author);

The PDF_set_info_author() function sets the author of a pdf document. It has to be called after PDF_get_info() and before PDF_open(). Calling it after PDF_open() will have no effect on the document.

Note: This function is not part of the pdf library.

See also PDF_get_info(), PDF_set_info_xxxxx().

PDF_open

PDF_open -- 새 pdf 문서를 연다.

Description

int pdf_open(int descripterfile, int info);

The PDF_set_info_author() function opens a new pdf document. The corresponding file has to be opened with fopen() and the file descriptor passed as argument file. info is the an info structure that has to be created with pdf_get_info().

Note: The return value is needed as the first parameter in all other functions writing to the pdf document.

See also fopen(), PDF_get_info().

PDF_close

PDF_close -- pdf 문서를 닫는다.

Description

void pdf_close(int pdf document);

The PDF_close() function closes the pdf document int.

Note: It will not close the file. You need to call an extra fclose() after pdf_close().

See also PDF_open(), fclose().

PDF_begin_page

PDF_begin_page -- 새 페이지를 시작한다.

Description

void pdf_begin_page(int pdf document, double height, double width);

The PDF_begin_page() function starts a new page with height height and width width.

See also PDF_end_page().

PDF_end_page

PDF_end_page -- 페이지를 끝낸다.

Description

void pdf_end_page(int pdf document);

The PDF_end_page() function ends a page.

See also PDF_end_page().

PDF_show

PDF_show -- 현재 위치에 text를 출력한다.

Description

void pdf_show(int pdf document, string text);

The PDF_show() function outputs the string in text at the current position.

See also PDF_show_xy(), PDF_set_text_pos().

PDF_show_xy

PDF_show_xy -- 지정한 위치에 text를 출력한다.

Description

void pdf_show_xy(int pdf document, string text, double x-koor, double y-koor);

The PDF_show_xy() function outputs the string in text at position with koordinates (x-koor, y-koor).

See also PDF_show().

PDF_set_font

PDF_set_font -- 사용할 font 모양과 크기를 선택한다.

Description

void pdf_set_font(int pdf document, string font name, double size, string encoding);

The PDF_set_font() function sets the the current font face, font size and encoding. You will need to provide the Adobe Font Metrics (afm-files) for the font in the font path (default is ./fonts).

See also PDF_info().

PDF_set_leading

PDF_set_leading -- 줄 간격을 설정한다.

Description

void pdf_set leading(int pdf document, double distance);

The PDF_set_leading() function sets the distance between text lines. This will be used if text is output by PDF_continue_text().

See also PDF_continue_text().

PDF_set_text_rendering

PDF_set_text_rendering -- text를 출력할 방식을 결정한다.(Determines how text is rendered)

Description

void pdf_set_text_rendering(int pdf document, int mode);

The PDF_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.

PDF_set_horiz_scaling

PDF_set_horiz_scaling -- text의 수평 확대 비율을 정한다.

Description

void pdf_set_horiz_scaling(int pdf document, double scale);

The PDF_set_horiz_scaling() function sets the horizontal scaling to scale percent.

PDF_set_text_rise

PDF_set_text_rise -- text를 rise하게 표시되도록 설정한다.

Description

void pdf_set_text_rise(int pdf document, double value);

The PDF_set_text_rise() function sets the text rising to value units.

PDF_set_text_matrix

PDF_set_text_matrix -- text를 matrix 형태로 지정한다.

Description

void pdf_set_text_matrix(int pdf document, array matrix);

The PDF_set_text_matrix() function sets a matrix which describes a transformation applied on the current text font.

PDF_set_text_pos

PDF_set_text_pos -- text의 위치를 설정한다.

Description

void pdf_set_text_pos(int pdf document, double x-koor, double y-koor);

The PDF_set_text_pos() function sets the position of text for the next pdf_show() function call.

See also PDF_show(), PDF_show_xy().

PDF_set_char_spacing

PDF_set_char_spacing -- 글자 사이의 간격을 지정한다.

Description

void pdf_set_char_spacing(int pdf document, double space);

The PDF_set_char_spacing() function sets the spacing between characters.

See also PDF_set_word_spacing(), PDF_set_text_leading().

PDF_set_word_spacing

PDF_set_word_spacing -- 단어 사이의 간격을 지정한다.

Description

void pdf_set_word_spacing(int pdf document, double space);

The PDF_set_word_spacing() function sets the spacing between words.

See also PDF_set_char_spacing(), PDF_set_text_leading().

PDF_continue_text

PDF_continue_text -- 새 줄에 text를 출력한다.

Description

void pdf_continue_text(int pdf document, string text);

The PDF_continue_text() function outputs the string in text in the next line.

See also PDF_show_xy(), PDF_set_text_leading(), PDF_set_text_pos().

PDF_stringwidth

PDF_stringwidth -- 현재 사용중인 font의 넓이를 구한다.

Description

double pdf_stringwidth(int pdf document, string text);

The PDF_stringwidth() function returns the width of the string in text. It requires a font to be set before.

See also PDF_set_font().

PDF_save

PDF_save -- 현재 환경을 저장한다.

Description

void pdf_save(int pdf document);

The PDF_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 PDF_restore().

PDF_restore

PDF_restore -- 전에 저장해 두었던 환경으로 복귀한다.

Description

void pdf_restore(int pdf document);

The PDF_restore() function restores the enviroment saved with PDF_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. PDF_get_info

<?php PDF_save($pdf);
// do all kinds of rotations, transformations, ...
PDF_restore($pdf) ?>

See also PDF_save().

PDF_translate

PDF_translate -- koordinate system의 기준이되는 원점을 정한다.

Description

void pdf_translate(int pdf document, double x-koor, double y-koor);

The PDF_translate() function set the origin of koordinate system to the point (x-koor, y-koor).

PDF_scale

PDF_scale -- scaling을 설정한다.

Description

void pdf_scale(int pdf document, double x-scale, double y-scale);

The PDF_scale() function set the scaling factor in both directions.

PDF_rotate

PDF_rotate -- 회전율을 정한다.

Description

void pdf_rotate(int pdf document, double angle);

The PDF_rotate() function set the rotation in degress to angle.

PDF_setflat

PDF_setflat -- flatness를 정한다.

Description

void pdf_setflat(int pdf document, double value);

The PDF_setflat() function set the flatness to a value between 0 and 100.

PDF_setlinejoin

PDF_setlinejoin -- linejoin parameter를 정한다.

Description

void pdf_setlinejoin(int pdf document, long value);

The PDF_setlinejoin() function set the linejoin parameter between a value of 0 and 2.

PDF_setlinecap

PDF_setlinecap -- linecap aparameter를 정한다.

Description

void pdf_setlinecap(int pdf document, int value);

The PDF_setlinecap() function set the linecap parameter between a value of 0 and 2.

PDF_setmiterlimit

PDF_setmiterlimit -- miter limit을 정한다.

Description

void pdf_setmiterlimit(int pdf document, double value);

The PDF_setmiterlimit() function set the miter limit to a value greater of equal than 1.

PDF_setlinewidth

PDF_setlinewidth -- 한 라인의 폭을 정한다.

Description

void pdf_setlinewidth(int pdf document, double width);

The PDF_setlinewidth() function set the line width to width.

PDF_setdash

PDF_setdash -- 점선의 무늬를 정한다.

Description

void pdf_setdash(int pdf document, double white, double black);

The PDF_setdash() function set the dash pattern white white units and black black units. If both are 0 a solid line is set.

PDF_moveto

PDF_moveto -- 현재 위치를 바꾼다.

Description

void pdf_moveto(int pdf document, double x-koor, double y-koor);

The PDF_moveto() function set the current point to the coordinates x-koor and y-koor.

PDF_curveto

PDF_curveto -- 곡선을 그린다.

Description

void pdf_curveto(int pdf document, double x1, double y1, double x2, double y2, double x3, double y3);

The PDF_curveto() function draws a Bezier curve from the current point to the point (x3, y3) using (x1, y1) and (x2, y2) as control points.

See also PDF_moveto(), PDF_lineto().

PDF_lineto

PDF_lineto -- 직선을 그린다.

Description

void pdf_lineto(int pdf document, double x-koor, double y-koor);

The PDF_lineto() function draws a line from the current point to the point with coordinates (x-koor, y-koor).

See also PDF_moveto(), PDF_curveto().

PDF_circle

PDF_circle -- 원을 그린다.

Description

void pdf_circle(int pdf document, double x-koor, double y-koor, double radius);

The PDF_circle() function draws a circle with center at point (x-koor, y-koor) and radius radius.

See also PDF_arc().

PDF_arc

PDF_arc -- 원호를 그린다.

Description

void pdf_arc(int pdf document, double x-koor, double y-koor, double radius, double start, double end);

The PDF_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.

See also PDF_circle().

PDF_rect

PDF_rect -- 사각형을 그린다.

Description

void pdf_rect(int pdf document, double x-koor, double y-koor, double width, double height);

The PDF_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.

PDF_closepath

PDF_closepath -- path를 닫는다.

Description

void pdf_closepath(int pdf document);

The PDF_closepath() function closes the current path.

PDF_stroke

PDF_stroke -- path를 따라 선을 그린다.

Description

void pdf_stroke(int pdf document);

The PDF_stroke() function draws a line along current path.

See also PDF_closepath(), PDF_closepath_stroke().

PDF_closepath_stroke

PDF_closepath_stroke -- path를 따라 선을 그리고 path를 닫는다.

Description

void pdf_closepath_stroke(int pdf document);

The PDF_closepath_stroke() function is a combination of PDF_closepath() and PDF_stroke(). Than clears the path.

See also PDF_closepath(), PDF_stroke().

PDF_fill

PDF_fill -- 현재 path안을 칠한다.

Description

void pdf_fill(int pdf document);

The PDF_fill() function fills the interior of the current path with the current fill color.

See also PDF_closepath(), PDF_stroke(), PDF_setgray_fill(), PDF_setgray(), PDF_setrgbcolor_fill(), PDF_setrgbcolor().

PDF_fill_stroke

PDF_fill_stroke -- 현재 path의 안쪽을 칠하고, 현재 path를 따라 그린다.

Description

void pdf_fill_stroke(int pdf document);

The PDF_fill_stroke() function fills the interior of the current path with the current fill color and draws current path.

See also PDF_closepath(), PDF_stroke(), PDF_fill(), PDF_setgray_fill(), PDF_setgray(), PDF_setrgbcolor_fill(), PDF_setrgbcolor().

PDF_closepath_fill_stroke

PDF_closepath_fill_stroke -- 현재 path의 안쪽을 칠하고, 현재 path를 따라 그린 후, path를 닫는다.

Description

void pdf_closepath_fill_stroke(int pdf document);

The PDF_closepath_fill_stroke() function closes, fills the interior of the current path with the current fill color and draws current path.

See also PDF_closepath(), PDF_stroke(), PDF_fill(), PDF_setgray_fill(), PDF_setgray(), PDF_setrgbcolor_fill(), PDF_setrgbcolor().

PDF_endpath

PDF_endpath -- 현재 path를 종료한다.

Description

void pdf_endpath(int pdf document);

The PDF_endpath() function ends the current path but does not close it.

See also PDF_closepath().

PDF_clip

PDF_clip -- 현재 path를 clip한다.

Description

void pdf_clip(int pdf document);

The PDF_clip() function clips all drawing to the current path.

PDF_setgray_fill

PDF_setgray_fill -- 칠하는 색을 회색톤으로 설정한다.

Description

void pdf_setgray_fill(int pdf document, double value);

The PDF_setgray_fill() function sets the current gray value to fill a path.

See also PDF_setrgbcolor_fill().

PDF_setgray_stroke

PDF_setgray_stroke -- 그리는 색을 회색톤으로 설정한다.

Description

void pdf_setgray_stroke(int pdf document, double gray value);

The PDF_setgray_stroke() function sets the current drawing color to the given gray value.

See also PDF_setrgbcolor_stroke().

PDF_setgray

PDF_setgray -- 칠하고 그리는 색을 회색톤으로 설정한다.

Description

void pdf_setgray(int pdf document, double gray value);

The PDF_setgray_stroke() function sets the current drawing and filling color to the given gray value.

See also PDF_setrgbcolor_stroke(), PDF_setrgbcolor_fill().

PDF_setrgbcolor_fill

PDF_setrgbcolor_fill -- 칠하는 색을 rgb color로 설정한다.

Description

void pdf_setrgbcolor_fill(int pdf document, double red value, double green value, double blue value);

The PDF_setrgbcolor_fill() function sets the current rgb color value to fill a path.

See also PDF_setrgbcolor_fill().

PDF_setrgbcolor_stroke

PDF_setrgbcolor_stroke -- 그리는 색을 rgb color로 설정한다.

Description

void pdf_setrgbcolor_stroke(int pdf document, double red value, double green value, double blue value);

The PDF_setrgbcolor_stroke() function sets the current drawing color to the given rgb color value.

See also PDF_setrgbcolor_stroke().

PDF_setrgbcolor

PDF_setrgbcolor -- 칠하고 그리는 색을 rgb color로 설정한다.

Description

void pdf_setrgbcolor(int pdf document, double red value, double green value, double blue value);

The PDF_setrgbcolor_stroke() function sets the current drawing and filling color to the given rgb color value.

See also PDF_setrgbcolor_stroke(), PDF_setrgbcolor_fill().

PDF_add_outline

PDF_add_outline -- 현재 페이지에 bookmark를 추가한다.

Description

void pdf_add_outline(int pdf document, string text);

The PDF_add_outline() function adds a bookmark with text text that points to the current page.

PDF_set_transition

PDF_set_transition -- 페이지간의 transition을 지정한다.

Description

void pdf_set_transition(int pdf document, int transition);

The PDF_set_transition() 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)

PDF_set_duration

PDF_set_duration -- page간의 duration을 지정한다.

Description

void pdf_set_duration(int pdf document, double duration);

The PDF_set_duration() function set the duration between following pages in seconds.

PDF_open_jpeg

PDF_open_jpeg -- JPEG image를 연다.

Description

int pdf_open_jpeg(int pdf document, string file name);

The PDF_open_jpeg() function opens an image stored in the file with the name file name. The format of the image has to be jpeg.

See also PDF_close_image(),

PDF_close_image

PDF_close_image -- image를 닫는다.

Description

void pdf_close_image(int image);

The PDF_close_image() function closes an image which has been opened with any of the PDF_open_xxx() functions.

See also PDF_open_jpeg(),

PDF_place_image

PDF_place_image -- image를 page에 위치시킨다.

Description

void pdf_place_image(int pdf document, int image, double x-koor, double y-koor, double skale);

The PDF_place_image() function places an image on the page at postion (x-koor, x-koor). The image can be skaled at the same time.

PDF_put_image

PDF_put_image -- 나중에 쓰기 위해 image를 PDF에 저장한다.

Description

void pdf_put_image(int pdf document, int image);

The PDF_put_image function places an image in the PDF file without showing it. The stored image can be displayed with the PDF_execute_image() function. This is useful when using the same image multiple times.

PDF_execute_image

PDF_execute_image -- 저장된 image를 page에 위치시킨다.

Description

void pdf_execute_image(int pdf document, int image, double x-coor, double y-coor, double scale);

The PDF_execute_image function displays an image that has been put in the PDF file with the PDF_put_image() function on the current page at the given coordinates.

The image can be scaled while displaying it. A scale of 1.0 will show the image in the original size.

XXXV. PostgreSQL functions

Table of Contents
pg_Close
pg_cmdTuples
pg_Connect
pg_DBname
pg_ErrorMessage
pg_Exec
pg_Fetch_Array
pg_Fetch_Object
pg_Fetch_Row
pg_FieldIsNull
pg_FieldName
pg_FieldNum
pg_FieldPrtLen
pg_FieldSize
pg_FieldType
pg_FreeResult
pg_GetLastOid
pg_Host
pg_loclose
pg_locreate
pg_loopen
pg_loread
pg_loreadall
pg_lounlink
pg_lowrite
pg_NumFields
pg_NumRows
pg_Options
pg_pConnect
pg_Port
pg_Result
pg_tty

UC Berkeley Computer Science Department에서 처음 개발된 Postgres는 이제는 일부 상용 database에서 가능한 object-relational 개념의 많은 것을 개척하였다. 이것은 SQL92/SQL3 언어를 지원하고, transaction integrity와 type 확장가능성을 제공한다. PostgreSQL은 public-domain이고, original Berkeley code의 발전된 소스를 제공한다.

PostgreSQL은 무료로 사용가능하다. 현재 버젼은 6.3.3까지 나와있고, www.postgreSQL.org에서 찾을 수 있다.

version 6.3 (03/02/1998)이후로 PostgreSQL은 unix domain socket을 사용하고, 이 기능을 위해 table이 주어진다. 이 소켓은 /tmp/.s.PGSQL.5432에서 찾을 수 있다. 이 옵션은 postmaster에 '-i' flag를 주어서 enable시킬 수 있는데, 이것은 "TCP/IP sockets뿐 아니라 Unix domain socket의 요청도 받아들여라."는 의미이다.

Table 1. Postmaster and PHP

Postmaster

PHP

Status

postmaster &

pg_connect("", "", "", "", "dbname");

OK

postmaster -i &

pg_connect("", "", "", "", "dbname");

OK

postmaster &

pg_connect("localhost", "", "", "", "dbname");

PostgreSQL server에 연결할 수 없음: connectDB() failed: Is the postmaster running and accepting TCP/IP (with -i) connection at 'localhost' on port '5432'? in /path/to/file.php3 on line 20.

postmaster -i &

pg_connect("localhost", "", "", "", "dbname");

OK

large object (lo) interface를 사용하려면 transaction block으로 둘러 싸는 것이 필요하다. transaction block은 begin으로 시작하고, transaction이확실하다면 commitend로 끝낸다. 만약 transaction이 오류가있거나 실패하면 transaction block은 abortrollback으로 끝내야 할 것이다.

Example 1. Using Large Objects

<?php
$database = pg_Connect ("", "", "", "", "jacarta");
pg_exec ($database, "begin");
    $oid = pg_locreate ($database);
    echo ("$oid\n");
    $handle = pg_loopen ($database, $oid, "w");
    echo ("$handle\n");
    pg_lowrite ($handle, "gaga");
    pg_loclose ($handle);
pg_exec ($database, "commit")
pg_exec ($database, "end")
?>


pg_Close

pg_Close -- PostgreSQL connection을 닫는다.

Description

void pg_close(int connection);

Returns false if connection is not a valid connection index, true otherwise. Closes down the connection to a PostgreSQL database associated with the given connection index.

pg_cmdTuples

pg_cmdTuples -- 해당하는 tuple의 개수를 구한다.

Description

int pg_cmdtuples(int result_id);

pg_cmdTuples() returns the number of tuples (instances) affected by INSERT, UPDATE, and DELETE queries. If no tuple is affected the function will return 0.

Example 1. pg_cmdtuples

<?php
$result = pg_exec($conn, "INSERT INTO verlag VALUES ('Autor')");
$cmdtuples = pg_cmdtuples($result);
echo $cmdtuples . " <- cmdtuples affected.";
?>

pg_Connect

pg_Connect -- connection을 연다.

Description

int pg_connect(string host, string port, string options, string tty, string dbname);

Returns a connection index on success, or false if the connection could not be made. Opens a connection to a PostgreSQL database. Each of the arguments should be a quoted string, including the port number. The options and tty arguments are optional and can be left out. This function returns a connection index that is needed by other PostgreSQL functions. You can have multiple connections open at once.

A connection can also established with the following command: $conn = pg_connect("dbname=marliese port=5432"); Other parameters besides dbname and port are host, tty and options.

See also pg_pConnect().

pg_DBname

pg_DBname -- database 이름

Description

string pg_dbname(int connection);

Returns the name of the database that the given PostgreSQL connection index is connected to, or false if connection is not a valid connection index.

pg_ErrorMessage

pg_ErrorMessage -- 에러 메세지

Description

string pg_errormessage(int connection);

Returns a string containing the error message, false on failure. Details about the error probably cannot be retrieved using the pg_errormessage() function if an error occured on the last database action for which a valid connection exists, this function will return a string containing the error message generated by the backend server.

pg_Exec

pg_Exec -- 질의를 실행한다.

Description

int pg_exec(int connection, string query);

Returns a result index if query could be executed, false on failure or if connection is not a valid connection index. Details about the error can be retrieved using the pg_ErrorMessage() function if connection is valid. Sends an SQL statement to the PostgreSQL database specified by the connection index. The connection must be a valid index that was returned by pg_Connect(). The return value of this function is an index to be used to access the results from other PostgreSQL functions.

NOTE: PHP2 returned 1 if the query was not expected to return data (inserts or updates, for example) and greater than 1 even on selects that did not return anything. No such assumption can be made in PHP3.

pg_Fetch_Array

pg_Fetch_Array -- row를 배열로 가져온다.

Description

array pg_fetch_array(int result, int row);

Returns: An array that corresponds to the fetched row, or false if there are no more rows.

pg_fetch_array() is an extended version of pg_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 pg_fetch_array() is NOT significantly slower than using pg_fetch_row(), while it provides a significant added value.

For further details, also see pg_fetch_row()

Example 1. PostgreSQL fetch array

<?php
$conn = pg_pconnect("","","","","publisher");
if (!$conn) {
echo "An error occured.\n";
exit;
}
$result = pg_Exec ($conn, "SELECT * FROM authors");
if (!$result) {
echo "An error occured.\n";
exit;
}
$arr = pg_fetch_array ($result, 0);
echo $arr[0] . " <- array\n";
$arr = pg_fetch_array ($result, 1);
echo $arr["author"] . " <- array\n";
?>

pg_Fetch_Object

pg_Fetch_Object -- row를 object로 가져온다.

Description

object pg_fetch_object(int result, int row);

Returns: An object with properties that correspond to the fetched row, or false if there are no more rows.

pg_fetch_object() is similar to pg_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 pg_fetch_array(), and almost as quick as pg_fetch_row() (the difference is insignificant).

See also: pg_fetch_array() and pg_fetch_row().

Example 1. Postgres fetch object

<?php
$database = "verlag";
$db_conn = pg_connect ("localhost", "5432", "", "", $database);
if (!$db_conn): ?>
<H1>Failed connecting to postgres database <? echo $database ?></H1> <?
exit;
endif;
$qu = pg_exec ($db_conn, "SELECT * FROM verlag ORDER BY autor");
$row = 0; // postgres needs a row counter other dbs might not
while ($data = pg_fetch_object ($qu, $row)):
echo $data->autor." (";
echo $data->jahr ."): ";
echo $data->titel."<BR>";
$row++;
endwhile; ?>
<PRE><?
$fields[] = Array ("autor", "Author");
$fields[] = Array ("jahr", " Year");
$fields[] = Array ("titel", " Title");
$row= 0; // postgres needs a row counter other dbs might not
while ($data = pg_fetch_object ($qu, $row)):
echo "----------\n";
reset ($fields);
while (list (,$item) = each ($fields)):
echo $item[1].": ".$data->$item[0]."\n";
endwhile;
$row++;
endwhile;
echo "----------\n"; ?>
</PRE>

pg_Fetch_Row

pg_Fetch_Row -- row를 배열(enumerated array)로 가져온다.

Description

array pg_fetch_row(int result, int row);

Returns: An array that corresponds to the fetched row, or false if there are no more rows.

pg_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 pg_fetch_row() would return the next row in the result set, or false if there are no more rows.

See also: pg_fetch_array(), pg_fetch_object(), pg_result().

Example 1. Postgres fetch row

<?php
$conn = pg_pconnect("","","","","publisher");
if (!$conn) {
echo "An error occured.\n";
exit;
}
$result = pg_Exec ($conn, "SELECT * FROM authors");
if (!$result) {
echo "An error occured.\n";
exit;
}
$row = pg_fetch_row ($result, 0);
echo $row[0] . " <- row\n";
$row = pg_fetch_row ($result, 1);
echo $row[0] . " <- row\n";
$row = pg_fetch_row ($result, 2);
echo $row[1] . " <- row\n";
?>

pg_FieldIsNull

pg_FieldIsNull -- field가 NULL인가 검사한다.

Description

int pg_fieldisnull(int result_id, int row, mixed field);

Test if a field is NULL or not. Returns 0 if the field in the given row is not NULL. Returns 1 if the field in the given row is NULL. Field can be specified as number or fieldname. Row numbering starts at 0.

pg_FieldName

pg_FieldName -- field의 이름을 반환한다.

Description

string pg_fieldname(int result_id, int field_number);

pg_FieldName() will return the name of the field occupying the given column number in the given PostgreSQL result identifier. Field numbering starts from 0.

pg_FieldNum

pg_FieldNum -- column의 개수를 반환한다.

Description

string pg_fieldnum(int result_id, int field_name);

pg_FieldNum() will return the number of the column slot that corresponds to the named field in the given PosgreSQL result identifier. Field numbering starts at 0. This function will return -1 on error.

pg_FieldPrtLen

pg_FieldPrtLen -- 프린드될 길이(문자 개수)를 구한다.

Description

int pg_fieldprtlen(int result_id, int row_number, string field_name);

pg_FieldPrtLen() will return the actual printed length (number of characters) of a specific value in a PostgreSQL result. Row numbering starts at 0. This function will return -1 on an error.

pg_FieldSize

pg_FieldSize -- 지정된 field의 저장을 위해 할당된 공간(internal storage)의 크기

Description

int pg_fieldsize(int result_id, string field_name);

pg_FieldSize() will return the internal storage size (in bytes) of the named field in the given PostgreSQL result. A field size of -1 indicates a variable length field. This function will return false on error.

pg_FieldType

pg_FieldType -- 해당 필드 번호에 대응하는 type이름을 반환한다.

Description

int pg_fieldtype(int result_id, int field_number);

pg_FieldType() will return a string containing the type name of the given field in the given PostgreSQL result identifier. Field numbering starts at 0.

pg_FreeResult

pg_FreeResult -- result memory를 해제한다.

Description

int pg_freeresult(int result_id);

pg_FreeResult() 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 is finished. But, if you are sure you are not going to need the result data anymore in a script, you may call pg_FreeResult() with the result identifier as an argument and the associated result memory will be freed.

pg_GetLastOid

pg_GetLastOid -- 최근의 object identifier를 반환한다.

Description

int pg_getlastoid(int result_id);

pg_GetLastOid() can be used to retrieve the Oid assigned to an inserted tuple if the result identifier is used from the last command sent via pg_Exec() and was an SQL INSERT. This function will return a positive integer if there was a valid Oid. It will return -1 if an error occured or the last command sent via pg_Exec() was not an INSERT.

pg_Host

pg_Host -- host 이름을 반환한다.

Description

string pg_host(int connection_id);

pg_Host() will return the host name of the given PostgreSQL connection identifier is connected to.

pg_loclose

pg_loclose -- large object를 닫는다.

Description

void pg_loclose(int fd);

pg_loclose() closes an Inversion Large Object. fd is a file descriptor for the large object from pg_loopen().

pg_locreate

pg_locreate -- large object를 생성한다.

Description

int pg_locreate(int conn);

pg_locreate() creates an Inversion Large Object and returns the oid of the large object. conn specifies a valid database connection. PostgreSQL access modes INV_READ, INV_WRITE, and INV_ARCHIVE are not supported, the object is created always with both read and write access. INV_ARCHIVE has been removed from PostgreSQL itself (version 6.3 and above).

pg_loopen

pg_loopen -- large object를 연다.

Description

int pg_loopen(int conn, int objoid, string mode);

pg_loopen() open an Inversion Large Object and returns file descriptor of the large object. The file descriptor encapsulates information about the connection. Do not close the connection before closing the large object file descriptor. objoid specifies a valid large object oid and mode can be either "r", "w", or "rw".

pg_loread

pg_loread -- large object를 읽는다.

Description

string pg_loread(int fd, int len);

pg_loread() reads at most len bytes from a large object and returns it as a string. fd specifies a valid large object file descriptor andlen specifies the maximum allowable size of the large object segment.

pg_loreadall

pg_loreadall -- large object 전체를 읽는다.

Description

void pg_loreadall(int fd);

pg_loreadall() reads a large object and passes it straight through to the browser after sending all pending headers. Mainly intended for sending binary data like images or sound.

pg_lounlink

pg_lounlink -- large object를 지운다.

Description

void pg_lounlink(int conn, int lobjid);

pg_lounlink() deletes a large object with the lobjid identifier for that large object.

pg_lowrite

pg_lowrite -- large object에 쓴다.

Description

int pg_lowrite(int fd, string buf);

pg_lowrite() writes at most to a large object from a variable buf and returns the number of bytes actually written, or false in the case of an error. fd is a file descriptor for the large object from pg_loopen().

pg_NumFields

pg_NumFields -- field의 개수를 반환한다.

Description

int pg_numfields(int result_id);

pg_NumFields() will return the number of fields (columns) in a PostgreSQL result. The argument is a valid result identifier returned by pg_Exec(). This function will return -1 on error.

pg_NumRows

pg_NumRows -- row의 개수를 반환한다.

Description

int pg_numrows(int result_id);

pg_NumRows() will return the number of rows in a PostgreSQL result. The argument is a valid result identifier returned by pg_Exec(). This function will return -1 on error.

pg_Options

pg_Options -- option들을 반환한다.

Description

string pg_options(int connection_id);

pg_Options() will return a string containing the options specified on the given PostgreSQL connection identifier.

pg_pConnect

pg_pConnect -- 영구적인 database connection을 만든다.

Description

int pg_pconnect(string host, string port, string options, string tty, string dbname);

Returns a connection index on success, or false if the connection could not be made. Opens a persistent connection to a PostgreSQL database. Each of the arguments should be a quoted string, including the port number. The options and tty arguments are optional and can be left out. This function returns a connection index that is needed by other PostgreSQL functions. You can have multiple persistent connections open at once. See also pg_Connect().

A connection can also established with the following command: $conn = pg_pconnect("dbname=marliese port=5432"); Other parameters besides dbname and port are host, tty and options.

pg_Port

pg_Port -- port 번호를 반환한다.

Description

int pg_port(int connection_id);

pg_Port() will return the port number that the given PostgreSQL connection identifier is connected to.

pg_Result

pg_Result -- result identifier로 부터 값들을 구한다.

Description

mixed pg_result(int result_id, int row_number, mixed fieldname);

pg_Result() will return values from a result identifier produced by pg_Exec(). The row_number and fieldname sepcify what cell in the table of results to return. Row numbering starts from 0. Instead of naming the field, you may use the field index as an unquoted number. Field indices start from 0.

PostgreSQL has many built in types and only the basic ones are directly supported here. All forms of integer, boolean and oid types are returned as integer values. All forms of float, and real types are returned as double values. All other types, including arrays are returned as strings formatted in the same default PostgreSQL manner that you would see in the psql program.

pg_tty

pg_tty -- tty 이름을 반환한다.

Description

string pg_tty(int connection_id);

pg_tty() will return the tty name that server side debugging output is sent to on the given PostgreSQL connection identifier.

XXXVI. Regular expression functions

Table of Contents
ereg
ereg_replace
eregi
eregi_replace
split
sql_regcase

ereg

ereg -- regular expression 이 주어진 패턴에 맞는지 검사한다.

Description

int ereg(string pattern, string string, array [regs]);

Searchs string for matches to the regular expression given in pattern.

If matches are found for parenthesized substrings of pattern and the function is called with the third argument regs, the matches will be stored in the elements of regs. $regs[1] will contain the substring which starts at the first left parenthesis; $regs[2] will contain the substring starting at the second, and so on. $regs[0] will contain a copy of string.

Searching is case sensitive.

Returns true if a match for pattern was found in string, or false if no matches were found or an error occurred.

The following code snippet takes a date in ISO format (YYYY-MM-DD) and prints it in DD.MM.YYYY format:

Example 1. ereg() example

if ( ereg( "([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs ) ) {
echo "$regs[3].$regs[2].$regs[1]";
} else {
echo "Invalid date format: $date";
}

See also eregi(), ereg_replace(), and eregi_replace().

ereg_replace

ereg_replace -- regular expression의 문장을 대치한다.

Description

string ereg_replace(string pattern, string replacement, string string);

This function scans string for matches to pattern, then replaces the matched text with replacement.

If pattern contains parenthesized substrings, replacement may contain substrings of the form \\digit, which will be replaced by the text matching the digit'th parenthesized substring; \\0 will produce the entire contents of string. Up to nine substrings may be used. Parentheses may be nested, in which case they are counted by the opening parenthesis. For example, the following code snippet prints "This was a test" three times:

Example 1. ereg_replace() example

$string = "This is a test";
echo ereg_replace( " is", " was", $string );
echo ereg_replace( "( )is", "\\1was", $string );
echo ereg_replace( "(( )is)", "\\2was", $string );

See also ereg(), eregi(), and eregi_replace().

eregi

eregi -- regular expression 이 주어진 패턴에 맞는지 대,소문자 가리지 않고 검사한다.

Description

int eregi(string pattern, string string, array [regs]);

This function is identical to ereg() save that this ignores case distinction when matching alphabetic characters.

See also ereg(), ereg_replace(), and eregi_replace().

eregi_replace

eregi_replace -- regular expression의 문장을 대,소문자 가리지 않고 대치한다.

Description

string eregi_replace(string pattern, string replacement, string string);

This function is identical to ereg_replace() save that this ignores case distinction when matching alphabetic characters.

See also ereg(), eregi(), and ereg_replace().

split

split -- 문자열을 regular expression에 의해 나눈다.

Description

array split(string pattern, string string, int [limit]);

Returns an array of strings, each of which is a substring of string formed by splitting it on boundaries formed by pattern. If an error occurs, returns false.

To get the first five fields from a line from /etc/passwd:

Example 1. split() example

$passwd_list = split( ":", $passwd_line, 5 );

Note that pattern is case-sensitive.

See also explode() and implode().

sql_regcase

sql_regcase -- 대,소문자 가리지 않는 검사를 위한 regular expression을 만든다.

Description

string sql_regcase(string string);

Returns a valid regular expression which will match string, ignoring case. This expression is string with each character converted to a bracket expression; this bracket expression contains that character's uppercase and lowercase form if applicable, otherwise it contains the original character twice.

Example 1. sql_regcase() example

echo sql_regcase( "Foo bar" );

prints

[Ff][Oo][Oo][  ][Bb][Aa][Rr]

.

This can be used to achieve case insensitive pattern matching in products which support only case sensitive regular expressions.

XXXIV. Semaphore and Shared Memory Functions

Table of Contents
sem_get
sem_acquire
sem_release
shm_attach
shm_detach
shm_remove
shm_put_var
shm_get_var
shm_remove_var

이 모듈은 System V 세마포어를 사용하는 세마포어 함수를 제공한다. 세마포어는 보통 현재 컴퓨터의 자원(resources)에 대해 배타적으로 접근하거나, 한 자원에 동시에 사용 가능한 프로세스의 수를 제한 할 때 사용한다.

또한 이모듈은 System V 공유 메모리를 사용하는 공유 메모리 함수를 제공한다. 공유 메모리(Shared memory)는 전역 변수에 접근하기위해 사용된다. 다른점은 httpd-daemon이나 심지어 Perl이나 C로 작성된 다른 프로그램에서도 이 변수에 접근할 수 있으므로 광범위한 데이터 교환이 가능하다. 주의할 점은 공유 메모리는 동시에 두군데서 접근하는 것에 대해 절대로 안전하지 않다. 따라서 이를 방지하기위해 세마포어를 사용하여 동기화(synchronize)하여야 한다.

Table 1. Limits of shared memory by the Unix OS

SHMMAX

max size of shared memory, normally 131072 bytes

SHMMIN

minimum size of shared memory, normally 1 byte

SHMMNI

max amount of shared memory segments, normally 100

SHMSEG

max amount of shared memory per process, normally 6

 

sem_get

sem_get -- semaphore id를 얻는다.

Description

int sem_get(int key, int [max_acquire], int [perm]);

Returns: A positive semaphore identifier on success, or false on error.

sem_get() returns an id that can be used to access the System V semaphore with the given key. The semaphore is created if necessary using the permission bits specified in perm (defaults to 0666). The number of processes that can acquire the semaphore simultaneously is set to max_acquire (defaults to 1). Actually this value is set only if the process finds it is the only process currently attached to the semaphore.

A second call to sem_get() for the same key will return a different semaphore identifier, but both identifiers access the same underlying semaphore.

See also: sem_acquire() and sem_release().

sem_acquire

sem_acquire -- semaphore를 얻는다.

Description

int sem_acquire(int sem_identifier);

Returns: true on success, false on error

sem_acquire() blocks (if necessary) until the semaphore can be acquired. A process attempting to acquire a semaphore which it has already acquired will block forever if acquiring the semaphore would cause its max_acquire value to be exceeded.

After processing a request, any semaphores acquired by the process but not explicitly released will be released automatically and a warning will be generated.

See also: sem_get() and sem_release().

sem_release

sem_release -- semaphore를 풀어준다.

Description

int sem_release(int sem_identifier);

Returns: true on success, false on error

sem_release() releases the semaphore if it is currently acquired by the calling process, otherwise a warning is generated.

After releasing the semaphore, sem_acquire() may be called to re-acquire it.

See also: sem_get() and sem_acquire().

shm_attach

shm_attach -- 공유 메모리의 segment를 만들거나 연다.

Description

int shm_attach(int key, int [memsize], int [perm]);

shm_attach() returns an id that that can be used to access the System V shared memory with the given key, the first call creates the shared memory segment with mem_size (default: sysvshm.init_mem in php3.ini, otherwise 10000 bytes) and the optional perm-bits (default: 666).

A second call to shm_attach() for the same key will return a different shared memory identifier, but both identifiers access the same underlying shared memory. memsize and perm will be ignored.

shm_detach

shm_detach -- Disconnects from shared memory segment

Description

int shm_detach(int shm_identifier);

shm_detach() disconnects from the shared memory given by the shm_identifier created by shm_attach(). Remember, that shared memory still exist in the Unix system and the data is still present.

shm_get_var

shm_get_var -- Returns a variable from shared memory

Description

mixed shm_get_var(int id, int variable_key);

shm_get_var() returns the variable with a given variable_key. The variable is still present in the shared memory.

shm_put_var

shm_put_var -- Inserts or updates a variable in shared memory

Description

int shm_put_var(int shm_identifier, int variable_key, mixed variable);

Inserts or updates a variable with a given variable_key. All variable-types (double, int, string, array) are supported.

shm_remove

shm_remove -- Removes shared memory from Unix systems

Description

int shm_remove(int shm_identifier);

Removes shared memory from Unix systems. All data will be destroyed.

shm_remove_var

shm_remove_var -- Removes a variable from shared memory

Description

int shm_remove_var(int id, int variable_key);

Removes a variable with a given variable_key and frees the occupied memory.

XXXVIII. Solid Functions

Table of Contents
solid_close
solid_connect
solid_exec
solid_fetchrow
solid_fieldname
solid_fieldnum
solid_freeresult
solid_numfields
solid_numrows
solid_result

Solid 함수들은 좋은 평가를 받지 못하고 있다. 아마도 Unified ODBC functions을 대신 사용하는 것이 좋을 것이다.

solid_close

solid_close -- Solid connection을 닫는다.

Description

See odbc_close().

solid_connect

solid_connect -- Solid data source에 연결한다.

Description

See odbc_connect().

solid_exec

solid_exec -- Solid 질의를 실행한다.

Description

See odbc_exec().

solid_fetchrow

solid_fetchrow -- Solid 질의로부터 데이타의 row를 가져온다.

Descriptio

See odbc_fetch_row()

solid_fieldname

solid_fieldname -- Solid 질의로부터 column의 이름을 구한다.

Description

See odbc_field_name().

solid_fieldnum

solid_fieldnum -- Solid 질의로부터 column의 index를 구한다.

Description

See odbc_field_num().

solid_freeresult

solid_freeresult -- Solid 질의로부터 result memory를 해제한다.

Description

See odbc_free_result().

solid_numfields

solid_numfields -- Solid result의 field 개수를 구한다.

Description

See odbc_num_fields().

solid_numrows

solid_numrows -- Solid result의 row 개수를 구한다.

Description

See odbc_num_rows().

solid_result

solid_result -- Solid result로부터 data를 구한다.

Description

See odbc_result().

XXXIX. SNMP Functions

Table of Contents
snmpget
snmpwalk

이 SNMP 함수들을 사용하려면 ucd-snmp package를 설치하여야 한다. 최신버전이 있는 곳에 대해서는 PHP FAQ를 참조하도록한다. Windows에서 이 함수들은 NT환경에서만 동작하며 Win95/98에서는 동작하지 않는다.

snmpget

snmpget -- SNMP object를 가져온다.

Description

int snmpget(string hostname, string community, string object_id);

Returns SNMP object value on success and false on error.

The snmpget() function is used to read the value of an SNMP object specified by the object_id. SNMP agent is specified by the hostname and the read community is specified by the community parameter.

snmpget("127.0.0.1", "public", "system.SysContact.0")

snmpwalk

snmpwalk -- agent로 부터 모든 SNMP object들을 가져온다.

Description

int snmpwalk(int hostname, string community, string object_id);

Returns an array of SNMP object values starting from the object_id as root and false on error.

snmpwalk() function is used to read all the values from an SNMP agent specified by the hostname. Community specifies the read community for that agent. A null object_id is taken as the root of the SNMP objects tree and all objects under that tree are returned as an array. If object_id is specified, all the SNMP objects below that object_id are returned.

 $a = snmpwalk("127.0.0.1", "public", "");     

Above function call would return all the SNMP objects from the SNMP agent running on localhost. One can step through the values with a loop

for($i=0; $i<count($a); $i++) {
        echo $a[$i];
}

XL. String functions

Table of Contents
AddSlashes
Chop
Chr
chunk_split
convert_cyr_string
crypt
echo
explode
flush
get_meta_tags
htmlspecialchars
htmlentities
implode
join
ltrim
md5
nl2br
Ord
parse_str
print
printf
quoted_printable_decode
QuoteMeta
rawurldecode
rawurlencode
setlocale
similar_text
soundex
sprintf
strchr
strcmp
strcspn
StripSlashes
strlen
strrpos
strpos
strrchr
strrev
strspn
strstr
strtok
strtolower
strtoupper
str_replace
strtr
substr
trim
ucfirst
ucwords

이 함수들은 문자열을 다루는 함수들이다. 더 자세한 사항은 regular expression 이나 URL handling 절에 설명된 부분을 참조하라.

AddSlashes

AddSlashes -- 필요한 곳을 backslash러 감싼다.

Description

string addslashes(string str);

Returns a string with backslashes before characters that need to be quoted in database queries etc. These characters are single quote ('), double quote ("), backslash (\) and NUL (the null byte).

See also stripslashes(), htmlspecialchars() and quotemeta().

Chop

Chop -- 뒤쪽의 여백를 삭제한다.

Description

string chop(string str);

Returns the argument string without trailing whitespace.

Example 1. chop() example

$trimmed = Chop($line);

See also trim().

Chr

Chr -- 지정된 문자를 반환한다.

Description

string chr(int ascii);

Returns a one-character string containing the character specified by ascii.

Example 1. chr() example

$str .= chr(27); /* add an escape character at the end of $str */
/* Often this is more useful */
$str = sprintf("The string ends in escape: %c", 27);

This function complements ord(). See also sprintf() with a format string of %c.

chunk_split

chunk_split -- 문자열을 비슷한 크기로 나눈다.

Description

string chunk_split(string string, int [chunklen] , string [end] );

Can be used to split a string into smaller chunks which is useful for e.g. converting base64_encode output to match RFC 2045 behaviour. It inserts every chunklen (defaults to 76) chars the string end (defaults to "\r\n"). It returns the new string leaving the original string untouched.

Example 1. chr_replace() example

# format $data using RFC 2045 semantics
$new_string = chunk_split(base64_encode($data));

This function is significantly faster than ereg_replace().

convert_cyr_string

convert_cyr_string -- 문자열을 특정 Cyrillic 문자에서 다른 것으로 바꾼다.

Description

string convert_cyr_string(string str, string from, string to);

This function converts the given string from one Cyrillic character set to another. The from and to arguments are single characters that represent the source and target Cyrillic character sets. The supported types are:

crypt

crypt -- 문자열을 DES encryption방법으로 변환(encrypt)한다.

Description

string crypt(string str, string [salt]);

crypt() will encrypt a string using the standard Unix DES encryption method. Arguments are a string to be encrypted and an optional two-character salt string to base the encryption on. See the Unix man page for your crypt function for more information.

If the salt argument is not provided, it will be randomly generated by PHP.

Some operating systems support more than one type of encryption. In fact, sometimes the standard DES encryption is replaced by an MD5 based encryption algorithm. The encryption type is triggered by the salt argument. At install time, PHP determines the capabilities of the crypt function and will accept salts for other encryption types. If no salt is provided, PHP will auto-generate a standard 2-character DES salt by default unless the default encryption type on the system is MD5 in which case a random MD5-compatible salt is generated.

The standard DES encryption crypt() contains the salt as the first two characters of the output.

There is no decrypt function, since crypt() uses a one-way algorithm.

echo

echo -- 하나 이상의 문자열을 출력한다.

Description

echo(string arg1, string [argn]...);

Outputs all parameters.

echo() is not actually a function (it is a language construct) so you are not required to use parantheses with it.

Example 1. echo example

echo "Hello World";

See also: print() printf() flush()

explode

explode -- 문자열을 문자열 기준으로 나눈다.

Description

array explode(string separator, string string);

Returns an array of strings containing the elements separated by separator.

Example 1. explode() example

$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);

See also split() and implode().

flush

flush -- output buffer를 Flush한다.

Description

void flush(void);

Flushes the output buffers of PHP and whatever backend PHP is using (CGI, a web server, etc.) This effectively tries to push all the output so far to the user's browser.

get_meta_tags

get_meta_tags -- 파일에서 모든 meta tag의 content 속성을 추출하여 배열에 저장한다.

Description

array get_meta_tags(string filename, int [use_include_path]);

Opens filename and parses it line by line for <meta> tags of the form

Example 1. Meta Tags Example

<meta name="author" content="name">
<meta name="tags" content="php3 documentation">
</head> <!-- parsing stops here -->

(pay attention to line endings - PHP3 uses a native function to parse the input, so a Mac file won't work on Unix).

The value of the name property becomes the key, the value of the content property becomes the value of the returned array, so you can easily use standard array functions to traverse it or access single values. Special characters in the value of the name property are substituted with '_', the rest is converted to lower case.

Setting use_include_path to 1 will result in PHP3 trying to open the file along the standard include path.

htmlspecialchars

htmlspecialchars -- 특수문자들을 HTML entity로 변환한다.

Description

string htmlspecialchars(string string);

Certain characters have special significance in HTML, and should be represented by HTML entities if they are to preserve their meanings. This function returns a string with these conversions made.

This function is useful in preventing user-supplied text from containing HTML markup, such as in a message board or guest book application.

At present, the translations that are done are:

Note that this functions does not translate anything beyond what is listed above. For full entity translation, see htmlentities().

See also htmlentities() and nl2br().

htmlentities

htmlentities -- 모든 가능한 문자들을 HTML entity로 바꾼다.

Description

string htmlentities(string string);

This function is identical to htmlspecialchars() in all ways, except that all characters which have HTML entity equivalents are translated into these entities.

At present, the ISO-8859-1 character set is used.

See also htmlspecialchars() and nl2br().

implode

implode -- 배열의 원소들을 문자열을 사용해 연결한다.

Description

string implode(array pieces, string glue);

Returns a string containing a string representation of all the array elements in the same order, with the glue string between each element.

Example 1. implode() example

$colon_separated = implode($array, ":");

See also explode(), join(), and split().

join

join -- 배열의 원소들을 문자열을 사용해 연결한다

Description

string join(array pieces, string glue);

join() is an alias to implode(), and is identical in every way.

ltrim

ltrim -- 문자열의 앞 여백을 제거한다.

Description

string ltrim(string str);

This function strips whitespace from the start of a string and returns the stripped string.

See also chop() and trim().

md5

md5 -- 문자열의 md5 hash 값을 계산한다.

Description

string md5(string str);

Calculates the MD5 hash of str using the RSA Data Security, Inc. MD5 Message-Digest Algorithm.

( 역자주 : MD5 algorithm에 관한자세한 설명은 RFC 1321을 보세요. )

nl2br

nl2br -- newline을 HTML line break로 변환한다.

Description

string nl2br(string string);

Returns string with '<BR>' inserted before all newlines.

See also htmlspecialchars() and htmlentities().

Ord

Ord -- 문자의 ASCII 값을 구한다.

Description

int ord(string string);

Returns the ASCII value of the first character of string. This function complements chr().

Example 1. ord() example

if (ord($str) == 10) {
    echo("The first character of \$str is a line feed.\n");
}

See also chr().

parse_str

parse_str -- 문자열을 변수로 해석(parse)한다.

Description

void parse_str(string str);

Parses str as if it were the query string passed via an URL and sets variables in the current scope.

Example 1. Using parse_str()

$str = "first=value&second[]=this+works&second[]=another";
parse_str($str);
echo $first; /* prints "value" */
echo $second[0]; /* prints "this works" */
echo $second[1]; /* prints "another" */

print

print -- 문자열을 출력한다.

Description

print(string arg);

Outputs arg.

See also: echo() printf() flush()

printf

printf -- 문자열을 format하여 출력한다.

Description

int printf(string format, mixed [args]...);

Produces output according to format, which is described in the documentation for sprintf().

See also: print(), sprintf(), and flush().

quoted_printable_decode

quoted_printable_decode -- quoted-printable 문자열을 8 bit 문자열로 바꾼다.

Description

string quoted_printable_decode(string str);

This function returns an 8-bit binary string corresponding to the decoded quoted printable string. This function is similar to imap_qprint(), except this one does not require the IMAP module to work.

QuoteMeta

QuoteMeta -- meta character들을 backslash가 붙은 문자로 전환한다.

Description

int quotemeta(string str);

Returns a version of str with a backslash character (\) before every character that is among these:

. \\ + * ? [ ^ ] ( $ )

See also addslashes(), htmlentities(), htmlspecialchars(), nl2br(), and stripslashes().

rawurldecode

rawurldecode -- URL-encoded 문자열을 decode한다.

Description

string rawurldecode(string str);

Returns a string in which the sequences with percent (%) signs followed by two hex digits have been replaced with literal characters. For example, the string

foo%20bar%40baz

decodes into

foo bar@baz

See also rawurlencode().

rawurlencode

rawurlencode -- RFC1738을 따라 URL-encode한다.

Description

string rawurlencode(string str);

Returns a string in which all non-alphanumeric characters except

-_.

have been replaced with a percent (%) sign followed by two hex digits. This is the encoding described in RFC1738 for protecting literal characters from being interpreted as special URL delimiters, and for protecting URL's from being mangled by transmission media with character conversions (like some email systems). For example, if you want to include a password in an ftp url:

Example 1. rawurlencode() example 1

echo '<A HREF="ftp://user:', rawurlencode ('foo @+%/'),
     '@ftp.my.com/x.txt">';

Or, if you pass information in a path info component of the url:

Example 2. rawurlencode() example 2

echo '<A HREF="http://x.com/department_list_script/',
     rawurlencode ('sales and marketing/Miami'), '">';

See also rawurldecode().

setlocale

setlocale -- locale information을 설정한다.

Description

string setlocale(string category, string locale);

category is a string specifying the category of the functions affected by the locale setting:

If locale is the empty string "", the locale names will be set from the values of environment variables with the same names as the above categories, or from "LANG".

If locale is zero or "0", the locale setting is not affected, only the current setting is returned.

Setlocale returns the new current locale, or false if the locale functionality is not implemented in the plattform, the specified locale does not exist or the category name is invalid. An invalid category name also causes a warning message.

similar_text

similar_text -- 두 문자열 간의 비슷한 정도를 계산한다.

Description

int similar_text(string first, string second, double [percent]);

This calculates the similarity between two strings as described in Oliver [1993]. Note that this implementation does not use a stack as in Oliver's pseudo code, but recursive calls which may or may not speed up the whole process. Note also that the complexity of this algorithm is O(N**3) where N is the length of the longest string.

By passing a reference as third argument, similar_text() will calculate the similarity in percent for you. It returns the number of matching chars in both strings.

soundex

soundex -- 문자열의 soundex key를 구한다.(역자주: 비슷한 발음을 찾기 위해 사용, 영어만 가능)

Description

string soundex(string str);

Calculates the soundex key of str.

Soundex keys have the property that words pronounced similarly produce the same soundex key, and can thus be used to simplify searches in databases where you know the pronunciation but not the spelling. This soundex function returns a string 4 characters long, starting with a letter.

This particular soundex function is one described by Donald Knuth in "The Art Of Computer Programming, vol. 3: Sorting And Searching", Addison-Wesley (1973), pp. 391-392.

Example 1. Soundex Examples

soundex("Euler") == soundex("Ellery") == 'E460';
soundex("Gauss") == soundex("Ghosh") == 'G200';
soundex("Knuth") == soundex("Kant") == 'H416';
soundex("Lloyd") == soundex("Ladd") == 'L300';
soundex("Lukasiewicz") == soundex("Lissajous") == 'L222';

sprintf

sprintf -- format된 문자열을 반환한다.

Description

sprintf(string format, mixed [args]...);

Returns a string produced according to the formatting string format.

The format string is composed by zero or more directives: ordinary characters (excluding %) that are copied directly to the result, and conversion specifications, each of which results in fetching its own parameter. This applies to both sprintf() and printf()

Each conversion specification consists of these elements, in order:

See also: printf(), number_format()

Examples

Example 1. sprintf: zero-padded integers

$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);

Example 2. sprintf: formatting currency

$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money will output "123.1";
$formatted = sprintf ("%01.2f", $money);
// echo $formatted will output "123.10"

strchr

strchr -- 해당 문자가 처음 나타나는 곳을 찾는다.

Description

string strchr(string haystack, string needle);

This function is an alias for strstr(), and is identical in every way.

strcmp

strcmp -- binary 방식의 문자열 비교

Description

int strcmp(string str1, string str2);

Returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal.

Note that this comparison is case sensitive.

See also ereg(), substr(), and strstr().

strcspn

strcspn -- mask에 맞지 않는 initial segment의 길이를 구한다.

Description

int strcspn(string str1, string str2);

Returns the length of the initial segment of str1 which does not contain any of the characters in str2.

See also strspn().

StripSlashes

StripSlashes -- addslashes로 quote된 문자열을 un-quote한다.

Description

string stripslashes(string str);

Returns a string with backslashes stripped off. (\' becomes ' and so on.) Double backslashes are made into a single backslash.

See also addslashes().

strlen

strlen -- 문자열의 길이를 구한다.

Description

int strlen(string str);

Returns the length of string.

strrpos

strrpos -- 문자열에서 해당 문자가 나타나는 제일 마지막 위치를 구한다.

Description

string strrpos(string haystack, char needle);

Returns the numeric position of the last occurrence of needle in the haystack string. Note that the needle in this case can only be a single character. If a string is passed as the needle, then only the first character of that string will be used.

If needle is not found, returns false.

If needle is not a string, it is converted to an integer and applied as the ordinal value of a character.

See also strpos(), strrchr(), substr(), and strstr().

strpos

strpos -- 해당 문자열이 나타나는 첫 위치를 구한다.

Description

int strpos(string haystack, string needle, int [offset]);

Returns the numeric position of the first occurrence of needle in the haystack string. Unlike the strrpos(), this function can take a full string as the needle parameter and the entire string will be used.

If needle is not found, returns false.

If needle is not a string, it is converted to an integer and applied as the ordinal value of a character.

The optional offset parameter allows you to specify which character in haystack to start searching. The position returned is still relative to the the beginning of haystack.

See also strrpos(), strrchr(), substr(), and strstr().

strrchr

strrchr -- 문자열이 마지막으로 나타나는 위치를 구한다.

Description

string strrchr(string haystack, string needle);

This function returns the portion of haystack which starts at the last occurrence of needle and goes until the end of haystack.

Returns false if needle is not found.

If needle contains more than one character, the first is used.

If needle is not a string, it is converted to an integer and applied as the ordinal value of a character.

Example 1. strrchr() example

// get last directory in $PATH
$dir = substr( strrchr( $PATH, ":" ), 1 );
// get everything after last newline
$text = "Line 1\nLine 2\nLine 3";
$last = substr( strrchr( $text, 10 ), 1 );

See also substr() and strstr().

strrev

strrev -- 문자열을 Reverse한다.

Description

string strrev(string string);

Returns string, reversed.

strspn

strspn -- mask에 맞는 initial segment의 길이를 구한다.

Description

int strspn(string str1, string str2);

Returns the length of the initial segment of str1 which consists entirely of characters in str2.

See also strcspn().

strstr

strstr -- 문자열이 처음 나타나는 위치의 문자열을 반환한다.

Description

string strstr(string haystack, string needle);

Returns all of haystack from the first occurrence of needle to the end.

If needle is not found, returns false.

If needle is not a string, it is converted to an integer and applied as the ordinal value of a character.

See also strrchr(), substr(), and ereg().

strtok

strtok -- 문자열을 token화 한다.

Description

string strtok(string arg1, string arg2);

strtok() is used to tokenize a string. That is, if you have a string like "This is an example string" you could tokenize this string into its individual words by using the space character as the token.

Example 1. strtok() example

$string = "This is an example string";
$tok = strtok($string," ");
while($tok) {
echo "Word=$tok<br>";
$tok = strtok(" ");
}

Note that only the first call to strtok uses the string argument. Every subsequent call to strtok only needs the token to use, as it keeps track of where it is in the current string. To start over, or to tokenize a new string you simply call strtok with the string argument again to initialize it. Note that you may put multiple tokens in the token parameter. The string will be tokenized when any one of the characters in the argument are found.

Also be careful that your tokens may be equal to "0". This evaluates to false in conditional expressions.

See also split() and explode().

strtolower

strtolower -- 소문자로 만든다.

Description

string strtolower(string str);

Returns string with all alphabetic characters converted to lowercase.

Note that 'alphabetic' is determined by the current locale. This means that in i.e. the default "C" locale, characters such as umlaut-A (Ä) will not be converted.

See also strtoupper() and ucfirst().

strtoupper

strtoupper -- 대문자로 만든다.

Description

string strtoupper(string string);

Returns string with all alphabetic characters converted to uppercase.

Note that 'alphabetic' is determined by the current locale. For instance, in the default "C" locale characters such as umlaut-a (ä) will not be converted.

See also strtolower() and ucfirst().

str_replace

str_replace -- Replace all occurrences of needle in haystack with str

Description

string str_replace(string needle, string str, string haystack);

This function replaces all occurences of needle in haystack with the given str. If you don't need fancy replacing rules, you should always use this function instead of ereg_replace().

Example 1. str_replace() example

$bodytag = str_replace("%body%", "black", "<body text=%body%>");

This function is binary safe.

See also ereg_replace().

strtr

strtr -- 특정 문자열을 대치(translate)한다.

Description

string strtr(string str, string from, string to);

This function operates on str, translating all occurrences of each character in from to the corresponding character in to and returning the result.

If from and to are different lengths, the extra characters in the longer of the two are ignored.

Example 1. strtr() example

$addr = strtr($addr, "äåö", "aao");
 

See also ereg_replace().

substr

substr -- 문자열의 일부분을 반환한다.

Description

string substr(string string, int start, int [length]);

Substr returns the portion of string specified by the start and length parameters.

If start is positive, the returned string will start at the start'th character of string. Examples:

$rest = substr("abcdef", 1); // returns "bcdef"
$rest = substr("abcdef", 1, 3); // returns "bcd"

If start is negative, the returned string will start at the start'th character from the end of string. Examples:

$rest = substr("abcdef", -1); // returns "f"
$rest = substr("abcdef", -2); // returns "ef"
$rest = substr("abcdef", -3, 1); // returns "d"

If length is given and is positive, the string returned will end length characters from start. If this would result in a string with negative length (because the start is past the end of the string), then the returned string will contain the single character at start.

If length is given and is negative, the string returned will end length characters from the end of string. If this would result in a string with negative length, then the returned string will contain the single character at start. Examples:

$rest = substr("abcdef", -1, -1); // returns "bcde"

See also strrchr() and ereg().

trim

trim -- 문자열의 앞,뒤 여백 모두를 제거한다.

Description

string trim(string str);

This function strips whitespace from the start and the end of a string and returns the stripped string.

See also chop() and ltrim().

ucfirst

ucfirst -- 문자열의 처음 문자를 대문자로 만든다.

Description

string ucfirst(string str);

Capitalizes the first character of str if that character is alphabetic.

Note that 'alphabetic' is determined by the current locale. For instance, in the default "C" locale characters such as umlaut-a (ä) will not be converted.

See also strtoupper() and strtolower().

ucwords

ucwords -- Uppercase the first character of each word in a string

Description

string ucwords(string str);

Capitalizes the first character of each word in str if that character is alphabetic.

See also strtoupper(), strtolower() and ucfirst().

XLI. URL functions

Table of Contents
parse_url
urldecode
urlencode
base64_encode
base64_decode

parse_url

parse_url -- PHP가 form data를 해석하듯이 query string을 해석(parse)한다.

Description

array parse_url(string url);

This function returns an associative array returning any of the various components of the URL that are present. This includes the "scheme", "host", "port", "user", "pass", "path", "query", and "fragment".

urldecode

urldecode -- URL-encode된 문자열을 decode한다.

Description

string urldecode(string str);

Decodes any %## encoding in the given string. The decoded string is returned.

Example 1. urldecode() example

$a = split ('&', $querystring);
$i = 0;
while ($i < count ($a)) {
  $b = split ('=', $a [$i]);
  echo 'Value for parameter ', htmlspecialchars (urldecode ($b [0])),
       ' is ', htmlspecialchars (urldecode ($b [1])), "<BR>";
  $i++;
}

See also urlencode()

urlencode

urlencode -- 문자열을 URL-encode한다.

Description

string urlencode(string str);

Returns a string in which all non-alphanumeric characters except -_. have been replaced with a percent (%) sign followed by two hex digits and spaces encoded as plus (+) signs. It is encoded the same way that the posted data from a WWW form is encoded, that is the same way as in application/x-www-form-urlencoded media type. This differs from the RFC1738 encoding (see rawurlencode() ) in that for historical reasons, spaces are encoded as plus (+ ) signs. This function is convenient when encoding a string to be used in a query part of an URL, as a convinient way to pass variables to the next page:

Example 1. urlencode() example

echo '<A HREF="mycgi?foo=', urlencode ($userinput), '">';

See also urldecode()

base64_encode

base64_encode -- base64 방식으로 encode한다.

Description

string base64_encode(string data);

base64_encode() returns data encoded with base64. This encoding is designed to make binary data survive transport through transport layers that are not 8-bit clean, such as mail bodies.

Base64-encoded data takes about 33% more space than the original data.

See also: base64_decode(), RFC-2045 section 6.8.

base64_decode

base64_decode -- base64로 encode된 문자열을 decode 한다.

Description

string base64_decode(string encoded_data);

base64_decode() decodes encoded_data and returns the original data. The returned data may be binary.

See also: base64_encode(), RFC-2045 section 6.8.

XLII. Variable functions

Table of Contents
gettype
intval
doubleval
empty
is_array
is_double
is_float
is_int
is_integer
is_long
is_object
is_real
is_string
isset
settype
strval
unset

gettype

gettype -- 변수의 type을 구한다.

Description

string gettype(mixed var);

Returns the type of the PHP variable var.

Possibles values for the returned string are:

See also settype().

intval

intval -- 변수의 정수값을 구한다.

Description

int intval(mixed var, int [base]);

Returns the integer value of var, using the specified base for the conversion (the default is base 10).

var may be any scalar type. You cannot use intval() on arrays or objects.

See also doubleval(), strval(), settype() and Type juggling.

doubleval

doubleval -- 변수의 실수(double)값을 구한다.

Description

double doubleval(mixed var);

Returns the double (floating point) value of var.

var may be any scalar type. You cannot use doubleval() on arrays or objects.

See also intval(), strval(), settype() and Type juggling.

empty

empty -- 변수가 값이 비어 있는가 검사한다.

Description

int empty(mixed var);

Returns false if var exists and has a non-empty or non-zero value; true otherwise.

See also isset() and unset().

is_array

is_array -- 변수가 배열인가 검사한다.

Description

int is_array(mixed var);

Returns true if var is an array, false otherwise.

See also is_double(), is_float(), is_int(), is_integer(), is_real(), is_string(), is_long(), and is_object().

is_double

is_double -- 변수가 실수인가 검사한다.

Description

int is_double(mixed var);

Returns true if var is a double, false otherwise.

See also is_array(), is_float(), is_int(), is_integer(), is_real(), is_string(), is_long(), and is_object().

is_float

is_float -- 변수가 실수인가 검사한다.

Description

int is_float(mixed var);

This function is an alias for is_double().

See also is_double(), is_real(), is_int(), is_integer(), is_string(), is_object(), is_array(), and is_long().

is_int

is_int -- 변수가 정수인가 검사한다.

Description

int is_int(mixed var);

This function is an alias for is_long().

See also is_double(), is_float(), is_integer(), is_string(), is_real(), is_object(), is_array(), and is_long().

is_integer

is_integer -- 변수가 정수인가 검사한다.

Description

int is_integer(mixed var);

This function is an alias for is_long().

See also is_double(), is_float(), is_int(), is_string(), is_real(), is_object(), is_array(), and is_long().

is_long

is_long -- 변수가 정수인가 검사한다.

Description

int is_long(mixed var);

Returns true if var is an integer (long), false otherwise.

See also is_double(), is_float(), is_int(), is_real(), is_string(), is_object(), is_array(), and is_integer().

is_object

is_object -- 변수가 객체(object)인가 검사한다.

Description

int is_object(mixed var);

Returns true if var is an object, false otherwise.

See also is_long(), is_int(), is_integer(), is_float(), is_double(), is_real(), is_string(), and is_array().

is_real

is_real -- 변수가 실수인가 검사한다.

Description

int is_real(mixed var);

This function is an alias for is_double().

See also is_long(), is_int(), is_integer(), is_float(), is_double(), is_object(), is_string(), and is_array().

is_string

is_string -- 변수가 문자열인가 검사한다.

Description

int is_string(mixed var);

Returns true if var is a string, false otherwise.

See also is_long(), is_int(), is_integer(), is_float(), is_double(), is_real(), is_object(), and is_array().

isset

isset -- 변수에 값이 있는가 검사한다.

Description

int isset(mixed var);

Returns true if var exists; false otherwise.

If a variable has been unset with unset(), it will no longer be isset().

$a = "test";
echo isset($a); // true
unset($a);
echo isset($a); // false

See also empty() and unset().

settype

settype -- 변수의 type을 설정한다.

Description

int settype(string var, string type);

Set the type of variable var to type.

Possibles values of type are:

Returns true if successful; otherwise returns false.

See also gettype().

strval

strval -- 변수의 값을 문자열로 만든다.

Description

string strval(mixed var);

Returns the string value of var.

var may be any scalar type. You cannot use strval() on arrays or objects.

See also doubleval(), intval(), settype() and Type juggling.

unset

unset -- 변수를 Unset한다.

Description

int unset(mixed var);

unset() destroys the specified variable and returns true.

Example 1. unset() example

unset( $foo );
unset( $bar['quux'] );

See also isset() and empty().

XLIII. Vmailmgr Functions

Table of Contents
vm_adduser
vm_addalias
vm_passwd
vm_delalias
vm_deluser

이 함수들은 QMAIL (www.qmail.org) 과 vmailmgr 패키지를 필요로 한다. 이 패키지는 Bruce Guenter에 의해 제공되고 있고 http://www.qcc.sk.ca/~bguenter/distrib/vmailmgr/ 에서 찾을 수 있다.

아래의 함수들에서는 두 개의 변수가 정의되어 있다 : 여러분의 가상 domain (vdomain.com)의 도메인 이름을 값으로 가지는 vdomain이라는 string 변수와, 가상 user들을 가지고 있는 '진짜(real)' user의 password를 값으로 가지는 basepwd라는 string 변수이다.

가상 user들의 password는 8자까지만 인식되고 그 이후는 무시된다.

모든 함수들의 return 상태는 response.h 에 다음과 같이 정의되어 있다.

O ok

1 bad

2 error

3 error connecting

알려진 문제들: vm_deluser()는 사용자의 directory를 지우지 않는다. vm_addalias()는 현재 제대로 동작하지 않는다.

<?php
dl("php3_vmailmgr.so"); //load the shared library
$vdomain="vdomain.com";
$basepwd="password";
?>

vm_adduser

vm_adduser -- 주어진 password로 새 virtual user를 만든다.

Description

int vm_adduser(string vdomain, string basepwd, string newusername, string newuserpassword);

Add a new virtual user with a password. newusername is the email login name and newuserpassword the password for this user.

vm_addalias

vm_addalias -- virtual user에 alias를 추가한다.

Description

int vm_addalias(string vdomain, string basepwd, string username, string alias);

Add an alias to a virtual user. username is the email login name and alias is an alias for this vuser.

vm_passwd

vm_passwd -- virtual user의 password를 변경한다.

Description

int vm_passwd(string vdomain, string username, string password, string newpassword);

Changes a virtual users password. username is the email login name, password the old password for the vuser, and newpassword the new password.

vm_delalias

vm_delalias -- alias를 지운다.

Description

int vm_delalias(string vdomain, string basepwd, string alias);

Removes an alias.

vm_deluser

vm_deluser -- virtual user를 삭제한다.

Description

int vm_deluser(string vdomain, string username);

Removes a virtual user.

XLIV. WDDX functions

Table of Contents11
wddx_serialize_value
wddx_serialize_vars
wddx_packet_start
wddx_packet_end
wddx_add_vars
wddx_deserialize

이 함수들은 WDDX와 함께 동작하도록 되어있다.

Note that all the functions that serialize variables use the first element of an array to determine whether the array is to be serialized into an array or structure. If the first element has string key, then it is serialized into a structure, otherwise, into an array.

Example 1. Serializing a single value

<?php
print wddx_serialize_value("PHP to WDDX packet example", "PHP packet");
?>

This example will produce:

<wddxPacket version='0.9'><header comment='PHP packet'/><data>
<string>PHP to WDDX packet example</string></data></wddxPacket>

Example 2. Using incremental packets

<?php
$pi = 3.1415926;
$packet_id = wddx_packet_start("PHP");
wddx_add_vars($packet_id, "pi");
/* Suppose $cities came from database */
$cities = array("Austin", "Novato", "Seattle");
wddx_add_vars($packet_id, "cities");
$packet = wddx_packet_end($packet_id);
print $packet;
?>

This example will produce:

<wddxPacket version='0.9'><header comment='PHP'/><data><struct>
<var name='pi'><number>3.1415926</number></var><var name='cities'>
<array length='3'><string>Austin</string><string>Novato</string>
<string>Seattle</string></array></var></struct></data></wddxPacket>

wddx_serialize_value

wddx_serialize_value -- WDDX  패켓에 단일 값을 serialize 한다.

Description

string wddx_serialize_value(mixed var, string [comment]);

wddx_serialize_value() is used to create a WDDX packet from a single given value. It takes the value contained in var, and an optional comment string that appears in the packet header, and returns the WDDX packet.

wddx_serialize_vars

wddx_serialize_vars -- WDDX  패켓에 여러 변수를 serialize 한다.

Description

string wddx_serialize_vars(string var_name | array var_names [, ... ] );

wddx_serialize_vars() is used to create a WDDX packet with a structure that contains the serialized representation of the passed variables.

wddx_serialize_vars() takes a variable number of arguments, each of which can be either a string naming a variable or an array containing strings naming the variables or another array, etc.

Example 1. wddx_serialize_vars example

<?php
$a = 1;
$b = 5.5;
$c = array("blue", "orange", "violet");
$d = "colors";
$clvars = array("c", "d");
print wddx_serialize_vars("a", "b", $clvars);
?>

The above example will produce:

<wddxPacket version='0.9'><header/><data><struct><var name='a'><number>1</number></var>
<var name='b'><number>5.5</number></var><var name='c'><array length='3'>
<string>blue</string><string>orange</string><string>violet</string></array></var>
<var name='d'><string>colors</string></var></struct></data></wddxPacket>

wddx_packet_start

wddx_packet_start -- 내부에 있는 구조대로 새로운 WDDX 패켓을 만든다.

Description

int wddx_packet_start(string [comment]);

Use wddx_packet_start() to start a new WDDX packet for incremental addition of variables. It takes an optional comment string and returns a packet ID for use in later functions. It automatically creates a structure definition inside the packet to contain the variables.

wddx_packet_end

wddx_packet_end -- 지정된 ID의 WDDX 패켓을 종료한다.

Description

int wddx_packet_end(int packet_id);

wddx_packet_end() ends the WDDX packet specified by the packet_id and returns the string with the packet.

wddx_add_vars

wddx_add_vars -- 해당하는 패켓에 추가로 변수들을 serialize한다.

Description

wddx_add_vars(int packet_id, ...);

wddx_add_vars() is used to serialize passed variables and add the result to the packet specified by the packet_id. The variables to be serialized are specified in exactly the same way as wddx_serialize_vars().

wddx_deserialize

wddx_deserialize -- WDDX 패켓을 deserialize 한다.

Description

mixed wddx_deserialize(string packet);

wddx_deserialized() takes a packet string and deserializes it. It returns the result which can be string, number, or array. Note that structures are deserialized into associative arrays.

XLV. Gz-file Functions

Table of Contents
gzclose
gzeof
gzfile
gzgetc
gzgets
gzgetss
gzopen
gzpassthru
gzputs
gzread
gzrewind
gzseek
gztell
readgzfile
gzwrite

이 모듈은 gzip(.gz)으로 압축된 파일을 투명하게(압축되지 않은 것처럼) 읽고 쓰기 위해 Jean-loup Gailly와 Mark Adler에 의한 zlib >= 1.0.9 (http://www.cdrom.com/pub/infozip/zlib/) 함수들을 사용한다.

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().

readgzfile

readgzfile -- gz-file을 출력(output)한다.

Description

int readgzfile(string filename);

Reads a file, decompresses it and writes it to standard output.

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().

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().

XLVI. XML Parser Functions

Table of Contents
xml_parser_create
xml_set_element_handler
xml_set_character_data_handler
xml_set_processing_instruction_handler
xml_set_default_handler
xml_set_unparsed_entity_decl_handler
xml_set_notation_decl_handler
xml_set_external_entity_ref_handler
xml_parse
xml_get_error_code
xml_error_string
xml_get_current_line_number
xml_get_current_column_number
xml_get_current_byte_index
xml_parser_free
xml_parser_set_option
xml_parser_get_option
utf8_decode
utf8_encode


소개 (Introduction)


XML에 대하여 (About XML)

XML(eXtensible Markup Language)이란 웹에서 교환되는 문서를 위한 데이터 포맷의 하나이다. 이것은 W3C(World Wide Web consortium)에 의해 규정된 표준이다. XML에 대한 정보와 그에 관련된 기술들은 http://www.w3.org/XML/에서 찾아볼 수 있을 것이다.


설치 (Installation)

이 확장은 http://www.jclark.com/xml/에서 찾을 수 있는 expat라는 것을 사용하고 있다. expact와 함께 따라오는 Makefile은 그대로는 라이브러리를 만들어 내지 못한다. 다음과 같은 make rule을 사용해야 가능해 진다. :

libexpat.a: $(OBJS)
ar -rc $@ $(OBJS)
ranlib $@

expact의 소스 RPM 패키지는 http://www.guardian.no/~ssb/phpxml.html에서 찾을 수 있다.

유닉스에서는 configure--with-xml 옵션을 주어 실행한다. expat 라이브러리는 여러분의 컴파일러가 기본적으로 찾을 수 있는 곳에 설치되어 있어야 한다. 만약 설치한 expact가 컴파일러가 찾을 수 없는 곳에 있다면 configure를 실행하기 전에 환경변수 CPPFLAGS와 LDFLAGS를 여러분의 환경에서 해당 값으로 설정할 필요가 있다.

이제 PHP를 컴파일하면 된다.


이 확장에 대하여 (About This Extension)

이 확장은 PHP에서 James Clark의 expat를 지원하도록 해 준다. 이 Toolkit은 여러분이 XML을 해석(parse)하도록 하지만, 유효한가(validate)는 확인하지 않는다. 이 확장은 PHP가 제공하는 세가지 문자 형태(character encodings)를 지원한다. US-ASCII와 ISO-8859-1, UTF-8이 가능하다. UTF-16은 지원하지 않는다.

이 확장으로 여러분은 XML 파서를 만들고(create XML parsers), 서로다른 XML event에 대해 handlers를 정의한다. 각각의 XML 파서는 여러분이 조정가능한 몇 개의 parameters를 가지고 있다.

제공되는 XML event handlers는 다음과 같다. :

Table 1. Supported XML handlers

PHP function to set handler

Event description

xml_set_element_handler()

Element events are issued whenever the XML parser encounters start or end tags. There are separate handlers for start tags and end tags.

xml_set_character_data_handler()

Character data is roughly all the non-markup contents of XML documents, including whitespace between tags. Note that the XML parser does not add or remove any whitespace, it is up to the application (you) to decide whether whitespace is significant.

xml_set_processing_instruction_handler()

PHP programmers should be familiar with processing instructions (PIs) already. <?php ?> is a processing instruction, where php is called the "PI target". The handling of these are application-specific, except that all PI targets starting with "XML" are reserved.

xml_set_default_handler()

What goes not to another handler goes to the default handler. You will get things like the XML and document type declarations in the default handler.

xml_set_unparsed_entity_decl_handler()

This handler will be called for declaration of an unparsed (NDATA) entity.

xml_set_notation_decl_handler()

This handler is called for declaration of a notation.

xml_set_external_entity_ref_handler()

This handler is called when the XML parser finds a reference to an external parsed general entity. This can be a reference to a file or URL, for example. See the external entity example for a demonstration.


Case 겹치기 (Case Folding)

element handler 함수들은 그들의 요소를 case-folded하게 얻는다. Case-folding은 XML 표준에 다음과 같이 정의되어 있다. : "a process applied to a sequence of characters, in which those identified as non-uppercase are replaced by their uppercase equivalents" (일련의 문자들에서 대문자가 아닌 글자들을 대문자와 동일하게 다루는 방법). 다른 말로 하면 case-folding이란 단순히 uppercasing을 의미한다.

기본적으로, handler 함수에 전달되는 모든 요소들의 이름은 case-folded하다. case-folded 설정은 xml_parser_get_option() xml_parser_set_option() 함수로 XML 파서에 대해 질의하거나 원하는 대로 설정할 수 있다.


Error Codes

다음의 상수들이 XML 에러 코드로 정의되어 있다. (xml_parse()의 반환값이다.)

XML_ERROR_NONE

XML_ERROR_NO_MEMORY

XML_ERROR_SYNTAX

XML_ERROR_NO_ELEMENTS

XML_ERROR_INVALID_TOKEN

XML_ERROR_UNCLOSED_TOKEN

XML_ERROR_PARTIAL_CHAR

XML_ERROR_TAG_MISMATCH

XML_ERROR_DUPLICATE_ATTRIBUTE

XML_ERROR_JUNK_AFTER_DOC_ELEMENT

XML_ERROR_PARAM_ENTITY_REF

XML_ERROR_UNDEFINED_ENTITY

XML_ERROR_RECURSIVE_ENTITY_REF

XML_ERROR_ASYNC_ENTITY

XML_ERROR_BAD_CHAR_REF

XML_ERROR_BINARY_ENTITY_REF

XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF

XML_ERROR_MISPLACED_XML_PI

XML_ERROR_UNKNOWN_ENCODING

XML_ERROR_INCORRECT_ENCODING

XML_ERROR_UNCLOSED_CDATA_SECTION

XML_ERROR_EXTERNAL_ENTITY_HANDLING


Character Encoding

PHP의 XML 확장은 서로 다른 character encoding들을 위해 Unicode character set을 지원한다. character encoding에는 source encodingtarget encoding의 두가지 유형이 있다. 참고로 PHP는 내부적으로 모든 문서를 UTF-8으로 encode하고 있다.

Source encoding은 XML 문서가 해석(parse)될 때 일어난다. XML 파서를 만들 때(Upon creating an XML parser), source encoding은 지정될 수 있다. (이 encoding은 해당 XML 파서가 없어질 때 까지 변경될 수 없다.) 지원되는 source encoding은 ISO-8859-1US-ASCII, UTF-8의 세가지 이다. 앞의 두가지는 single-byte encoding이다. 이것은 각각의 문자가 1개의 byte로 표현된다는 의미이다. UTF-8은 1 바이트에서 4 바이트(21비트)까지 변경가능한 수의 비트수로 구성된 문자로 encode한다. PHP에서 기본 source encoding은 ISO-8859-1이다.

Target encoding은 PHP가 XML handler 함수로 데이터를 넘겨줄 때 일어난다. XML 파서가 생성될 때 target encoding은 source encoding과 같은 값으로 설정되지만, 그 값은 나중에 언제라도 바꿀 수 있다. target encoding은 문자 데이터뿐 아니라, tag 이름이나 processing instruction targets에도 적용된다.

만약 XML 파서가 그것의 source encoding이 표현할 수 없는 범위에 있는 문자를 만난다면, 파서는 에러를 반환한다.

PHP가 해석된(parsed) 문서중에서 선택된 target encoding안에서 표현이 불가능한 문자를 만났다면, 이 문제가 된 문자를 "demoted"한다. 현재 그런 문자들은 물음표(?)로 대치된다.


Some Examples

여기에 XML 문서를 해석하는 PHP 스크립트 예제가 있다.


XML Element Structure Example

문서에서 시작 요소들의 구조를 indentation하여 표시하는 예제. :

Example 1. Show XML Element Structure

$file = "data.xml";
$depth = array();
function startElement($parser, $name, $attrs)
{
global $depth;
for ($i = 0; $i < $depth[$parser]; $i++) {
print " ";
}
print "$name\n";
$depth[$parser]++;
}
function endElement($parser, $name, $attrs)
{
global $depth;
$depth[$parser]--;
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
if (!($fp = fopen($file, "r"))) {
die("could not open XML input");
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);


XML Tag Mapping Example

Example 2. Map XML to HTML

이 예제는 XML문서의 택을 직접적으로 HTML 택으로 map한다. "map array"에서 찾을 수 없는 요소는 무시된다. 물론, 이 예제는 특정한 문서 타입에서만 동작한다.

$file = "data.xml";
$map_array = array(
"BOLD" => "B",
"EMPHASIS" => "I",
"LITERAL" => "TT"
);
function startElement($parser, $name, $attrs)
{
global $map_array;
if ($htmltag = $map_array[$name]) {
print "<$htmltag>";
}
}
function endElement($parser, $name, $attrs)
{
global $map_array;
if ($htmltag = $map_array[$name]) {
print "</$htmltag>";
}
}
function characterData($parser, $data)
{
print $data;
}
$xml_parser = xml_parser_create();
// use case-folding so we are sure to find the tag in $map_array
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($file, "r"))) {
die("could not open XML input");
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);


XML External Entity Example

이 예제는 XML 코드의 하이라이트이다. 이것은 다른 문서를 포함(include)하고 해석(parse)하기 위해 external entity reference handler를 어떻게 사용하는가 보여주고, 어떻게 PI(processing instruction)가 수행되고, PI가 담고 있는 코드의 "신뢰(trust)"를 결정하는 가에 대한 방법을 보여준다.

이 예제를 사용하기 위한 XML 문서는 아래 예제에서 찾을 수 있다. (xmltest.xmlxmltest2.xml.)

Example 3. External Entity Example

$file = "xmltest.xml";
function trustedFile($file)
{
// only trust local files owned by ourselves
if (!eregi("^([a-z]+)://", $file) && fileowner($file) == getmyuid()) {
return true;
}
return false;
}
function startElement($parser, $name, $attribs)
{
print "&lt;<font color=\"#0000cc\">$name</font>";
if (sizeof($attribs)) {
while (list($k, $v) = each($attribs)) {
print " <font color=\"#009900\">$k</font>=\"<font color=\"#990000\">$v</font>\"";
}
}
print "&gt;";
}
function endElement($parser, $name)
{
print "&lt;/<font color=\"#0000cc\">$name</font>&gt;";
}
function characterData($parser, $data)
{
print "<b>$data</b>";
}
function PIHandler($parser, $target, $data)
{
switch (strtolower($target)) {
case "php":
global $parser_file;
// If the parsed document is "trusted", we say it is safe
// to execute PHP code inside it. If not, display the code
// instead.
if (trustedFile($parser_file[$parser])) {
eval($data);
} else {
printf("Untrusted PHP code: <i>%s</i>", htmlspecialchars($data));
}
break;
}
}
function defaultHandler($parser, $data)
{
if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {
printf('<font color="#aa00aa">%s</font>', htmlspecialchars($data));
} else {
printf('<font size="-1">%s</font>', htmlspecialchars($data));
}
}
function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId,
$publicId)
{
if ($systemId) {
if (!list($parser, $fp) = new_xml_parser($systemId)) {
printf("Could not open entity %s at %s\n", $openEntityNames,
$systemId);
return false;
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($parser, $data, feof($fp))) {
printf("XML error: %s at line %d while parsing entity %s\n",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser), $openEntityNames);
xml_parser_free($parser);
return false;
}
}
xml_parser_free($parser);
return true;
}
return false;
}
function new_xml_parser($file) {
global $parser_file;
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
xml_set_processing_instruction_handler($xml_parser, "PIHandler");
xml_set_default_handler($xml_parser, "defaultHandler");
xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");
if (!($fp = @fopen($file, "r"))) {
return false;
}
if (!is_array($parser_file)) {
settype($parser_file, "array");
}
$parser_file[$xml_parser] = $file;
return array($xml_parser, $fp);
}
if (!(list($xml_parser, $fp) = new_xml_parser($file))) {
die("could not open XML input");
}
print "<pre>";
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d\n",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
print "</pre>";
print "parse complete\n";
xml_parser_free($xml_parser);
?>

 

Example 4. xmltest.xml

<?xml version='1.0'?>
<!DOCTYPE chapter SYSTEM "/just/a/test.dtd" [
<!ENTITY plainEntity "FOO entity">
<!ENTITY systemEntity SYSTEM "xmltest2.xml">
]>
<chapter>
<TITLE>Title &plainEntity;</TITLE>
<para>
<informaltable>
<tgroup cols="3">
<tbody>
<row><entry>a1</entry><entry morerows="1">b1</entry><entry>c1</entry></row>
<row><entry>a2</entry><entry>c2</entry></row>
<row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
&systemEntity;
<sect1 id="about">
<title>About this Document</title>
<para>
<!-- this is a comment -->
<?php print 'Hi! This is PHP version '.phpversion(); ?>
</para>
</sect1>
</chapter>

 

이 파일은 xmltest.xml에 포함(include)된다.

Example 5. xmltest2.xml

<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY testEnt "test entity">
]>
<foo>
<element attrib="value"/>
&testEnt;
<?php print "This is some more PHP code being executed."; ?>
</foo>


xml_parser_create

xml_parser_create -- XML parser를 만든다.

Description

int xml_parser_create(string [encoding]);

encoding (optional)
Which character encoding the parser should use. The following character encodings are supported:

ISO-8859-1 (default)

US-ASCII

UTF-8

This function creates an XML parser and returns a handle for use by other XML functions. Returns false on failure.

xml_set_element_handler

xml_set_element_handler -- 시작 element handlers와 끝 element handlers를 설정한다.

Description

int xml_set_element_handler(int parser, string startElementHandler, string endElementHandler);

Sets the element handler functions for the XML parser parser. startElementHandler and endElementHandler are strings containing the names of functions that must exist when xml_parse() is called for parser.

The function named by startElementHandler must accept three parameters:

startElementHandler(int parser, string name, string attribs);

parser
The first parameter, parser, is a reference to the XML parser calling the handler.
name
The second parameter, name, contains the name of the element for which this handler is called. If case-folding is in effect for this parser, the element name will be in uppercase letters.
attribs
The third parameter, attribs, contains an associative array with the element's attributes (if any). The keys of this array are the attribute names, the values are the attribute values. Attribute names are case-folded on the same criteria as element names. Attribute values are not case-folded.
The original order of the attributes can be retrieved by walking through attribs the normal way, using each(). The first key in the array was the first attribute, and so on.

The function named by endElementHandler must accept two parameters:

endElementHandler(int parser, string name);

parser
The first parameter, parser, is a reference to the XML parser calling the handler.
name
The second parameter, name, contains the name of the element for which this handler is called. If case-folding is in effect for this parser, the element name will be in uppercase letters.

If a handler function is set to an empty string, or false, the handler in question is disabled.

True is returned if the handlers are set up, false if parser is not a parser.

There is currently no support for object/method handlers.

xml_set_character_data_handler

xml_set_character_data_handler -- character data handler를 설정한다.

Description

int xml_set_character_data_handler(int parser, string handler);

Sets the character data handler function for the XML parser parser. handler is a string containing the name of a function that must exist when xml_parse() is called for parser.

The function named by handler must accept two parameters:

handler(int parser, string data);

parser
The first parameter, parser, is a reference to the XML parser calling the handler.
data
The second parameter, data, contains the character data as a string.

If a handler function is set to an empty string, or false, the handler in question is disabled.

True is returned if the handler is set up, false if parser is not a parser.

There is currently no support for object/method handlers.

xml_set_processing_instruction_handler

xml_set_processing_instruction_handler -- processing instruction (PI) handler를 설정한다.

Description

int xml_set_processing_instruction_handler(int parser, string handler);

Sets the processing instruction (PI) handler function for the XML parser parser. handler is a string containing the name of a function that must exist when xml_parse() is called for parser.

A processing instruction has the following format:

<?target data?>

You can put PHP code into such a tag, but be aware of one limitation: in an XML PI, the PI end tag (?>) can not be quoted, so this character sequence should not appear in the PHP code you embed with PIs in XML documents. If it does, the rest of the PHP code, as well as the "real" PI end tag, will be treated as character data.

The function named by handler must accept three parameters:

handler(int parser, string target, string data);

parser
The first parameter, parser, is a reference to the XML parser calling the handler.
target
The second parameter, target, contains the PI target.
data
The third parameter, data, contains the PI data.

If a handler function is set to an empty string, or false, the handler in question is disabled.

True is returned if the handler is set up, false if parser is not a parser.

There is currently no support for object/method handlers.

xml_set_default_handler

xml_set_default_handler -- 기본 handler를 설정한다.

Description

int xml_set_default_handler(int parser, string handler);

Sets the default handler function for the XML parser parser. handler is a string containing the name of a function that must exist when xml_parse() is called for parser.

The function named by handler must accept two parameters:

handler(int parser, string data);

parser
The first parameter, parser, is a reference to the XML parser calling the handler.
data
The second parameter, data, contains the character data. This may be the XML declaration, document type declaration, entities or other data for which no other handler exists.

If a handler function is set to an empty string, or false, the handler in question is disabled.

True is returned if the handler is set up, false if parser is not a parser.

There is currently no support for object/method handlers.

xml_set_unparsed_entity_decl_handler

xml_set_unparsed_entity_decl_handler -- unparsed entity declaration handler를 설정한다.

Description

int xml_set_unparsed_entity_decl_handler(int parser, string handler);

Sets the unparsed entity declaration handler function for the XML parser parser. handler is a string containing the name of a function that must exist when xml_parse() is called for parser.

This handler will be called if the XML parser encounters an external entity declaration with an NDATA declaration, like the following:

<!ENTITY name {publicId | systemId} NDATA notationName>

See section 4.2.2 of the XML 1.0 spec for the definition of notation declared external entities.

The function named by handler must accept six parameters:

handler(int parser, string entityName, string base, string systemId, string publicId, string notationName);

parser
The first parameter, parser, is a reference to the XML parser calling the handler.
entityName
The name of the entity that is about to be defined.
base
This is the base for resolving the system identifier (systemId) of the external entity. Currently this parameter will always be set to an empty string.
systemId
System identifier for the external entity.
publicId
Public identifier for the external entity.
notationName
Name of the notation of this entity (see xml_set_notation_decl_handler()).

If a handler function is set to an empty string, or false, the handler in question is disabled.

True is returned if the handler is set up, false if parser is not a parser.

There is currently no support for object/method handlers.

xml_set_notation_decl_handler

xml_set_notation_decl_handler -- notation declaration handler를 설정한다.

Description

int xml_set_notation_decl_handler(int parser, string handler);

Sets the notation declaration handler function for the XML parser parser. handler is a string containing the name of a function that must exist when xml_parse() is called for parser.

A notation declaration is part of the document's DTD and has the following format:

<!NOTATION name {systemId | publicId}>

See section 4.7 of the XML 1.0 spec for the definition of notation declarations.

The function named by handler must accept five parameters:

handler(int parser, string notationName, string base, string systemId, string publicId);

parser
The first parameter, parser, is a reference to the XML parser calling the handler.
notationName
This is the notation's name, as per the notation format described above.
base
This is the base for resolving the system identifier (systemId) of the notation declaration. Currently this parameter will always be set to an empty string.
systemId
System identifier of the external notation declaration.
publicId
Public identifier of the external notation declaration.

If a handler function is set to an empty string, or false, the handler in question is disabled.

True is returned if the handler is set up, false if parser is not a parser.

There is currently no support for object/method handlers.

xml_set_external_entity_ref_handler

xml_set_external_entity_ref_handler -- external entity reference handler를 설정한다.

Description

int xml_set_external_entity_ref_handler(int parser, string handler);

Sets the notation declaration handler function for the XML parser parser. handler is a string containing the name of a function that must exist when xml_parse() is called for parser.

The function named by handler must accept five parameters, and should return an integer value. If the value returned from the handler is false (which it will be if no value is returned), the XML parser will stop parsing and xml_get_error_code() will return XML_ERROR_EXTERNAL_ENTITY_HANDLING.

int handler(int parser, string openEntityNames, string base, string systemId, string publicId);

parser
The first parameter, parser, is a reference to the XML parser calling the handler.
openEntityNames
The second parameter, openEntityNames, is a space-separated list of the names of the entities that are open for the parse of this entity (including the name of the referenced entity).
base
This is the base for resolving the system identifier (systemid) of the external entity. Currently this parameter will always be set to an empty string.
systemId
The fourth parameter, systemId, is the system identifier as specified in the entity declaration.
publicId
The fifth parameter, publicId, is the public identifier as specified in the entity declaration, or an empty string if none was specified; the whitespace in the public identifier will have been normalized as required by the XML spec.

If a handler function is set to an empty string, or false, the handler in question is disabled.

True is returned if the handler is set up, false if parser is not a parser.

There is currently no support for object/method handlers.

xml_parse

xml_parse -- XML document의 해석(parsing)을 시작한다.

Description

int xml_parse(int parser, string data, int [isFinal]);

parser
A reference to the XML parser to use.
data
Chunk of data to parse. A document may be parsed piece-wise by calling xml_parse() several times with new data, as long as the isFinal parameter is set and true when the last data is parsed.
isFinal (optional)
If set and true, data is the last piece of data sent in this parse.

When the XML document is parsed, the handlers for the configured events are called as many times as necessary, after which this function returns true or false.

True is returned if the parse was successful, false if it was not successful, or if parser does not refer to a valid parser. For unsuccessful parses, error information can be retrieved with xml_get_error_code(), xml_error_string(), xml_get_current_line_number(), xml_get_current_column_number() and xml_get_current_byte_index().

xml_get_error_code

xml_get_error_code -- XML parser error code를 얻는다.

Description

int xml_get_error_code(int parser);

parser
A reference to the XML parser to get error code from.

This function returns false if parser does not refer to a valid parser, or else it returns one of the error codes listed in the error codes section.

xml_error_string

xml_error_string -- XML parser error 문자열을 얻는다.

Description

string xml_error_string(int code);

code
An error code from xml_get_error_code().

Returns a string with a textual description of the error code code, or false if no description was found.

xml_get_current_line_number

xml_get_current_line_number -- XML parser의 현재 line number를 얻는다.

Description

int xml_get_current_line_number(int parser);

parser
A reference to the XML parser to get line number from.

This function returns false if parser does not refer to a valid parser, or else it returns which line the parser is currently at in its data buffer.

xml_get_current_column_number

xml_get_current_column_number -- XML parser의 현재 column number를 얻는다.

Description

int xml_get_current_column_number(int parser);

parser
A reference to the XML parser to get column number from.

This function returns false if parser does not refer to a valid parser, or else it returns which column on the current line (as given by xml_get_current_line_number()) the parser is currently at.

xml_get_current_byte_index

xml_get_current_byte_index -- XML parser의 현재 byte index를 얻는다.

Description

int xml_get_current_byte_index(int parser);

parser
A reference to the XML parser to get byte index from.

This function returns false if parser does not refer to a valid parser, or else it returns which byte index the parser is currently at in its data buffer (starting at 0).

xml_parser_free

xml_parser_free -- XML parser를 해제(free)한다.

Description

string xml_parser_free(int parser);

parser
A reference to the XML parser to free.

This function returns false if parser does not refer to a valid parser, or else it frees the parser and returns true.

xml_parser_set_option

xml_parser_set_option -- XML parser의 옵션을 설정한다.

Description

int xml_parser_set_option(int parser, int option, mixed value);

parser
A reference to the XML parser to set an option in.
option
Which option to set. See below.
value
The option's new value.

This function returns false if parser does not refer to a valid parser, or if the option could not be set. Else the option is set and true is returned.

The following options are available:

Table 1. XML parser options

Option constant

Data type

Description

XML_OPTION_CASE_FOLDING

integer

Controls whether case-folding is enabled for this XML parser. Enabled by default.

XML_OPTION_TARGET_ENCODING

string

Sets which target encoding to use in this XML parser. By default, it is set to the same as the source encoding used by xml_parser_create(). Supported target encodings are ISO-8859-1, US-ASCII and UTF-8.

xml_parser_get_option

xml_parser_get_option -- XML parser의 옵션을 구한다.

Description

mixed xml_parser_get_option(int parser, int option);

parser
A reference to the XML parser to get an option from.
option
Which option to fetch. See xml_parser_set_option() for a list of options.

This function returns false if parser does not refer to a valid parser, or if the option could not be set. Else the option's value is returned.

See xml_parser_set_option() for the list of options.

utf8_decode

utf8_decode -- UTF-8으로 encode된 문자열을 ISO-8859-1로 변환한다.

Description

string utf8_decode(string data);

This function decodes data, assumed to be UTF-8 encoded, to ISO-8859-1.

See utf8_encode() for an explaination of UTF-8 encoding.

utf8_encode

utf8_encode -- ISO-8859-1로 encode된 문자열을 UTF-8으로 변환한다.

Description

string utf8_encode(string data);

This function encodes the string data to UTF-8, and returns the encoded version. UTF-8 is a standard mechanism used by Unicodefor encoding wide character values into a byte stream. UTF-8 is transparent to plain ASCII characters, is self-synchronized (meaning it is possible for a program to figure out where in the bytestream characters start) and can be used with normal string comparison functions for sorting and such. PHP encodes UTF-8 characters in up to four bytes, like this:

Table 1. UTF-8 encoding

bytes

bits

representation

1

7

0bbbbbbb

2

11

110bbbbb 10bbbbbb

3

16

1110bbbb 10bbbbbb 10bbbbbb

4

21

11110bbb 10bbbbbb 10bbbbbb 10bbbbbb

Each b represents a bit that can be used to store character data.


III. 부록 (Appendixes)

Table of Contents
A. Migrating from PHP/FI 2.0 to PHP 3.0
B. PHP development
C. The PHP Debugger


Appendix A. Migrating from PHP/FI 2.0 to PHP 3.0


(역자주: 이부분은 별로 이용되지 않을 것으로 생각되므로 번역을 생략한다.)

About the incompatbilities in 3.0

PHP 3.0 is rewritten from the ground up. It has a proper parser that is much more robust and consistent than 2.0's. 3.0 is also significantly faster, and uses less memory. However, some of these improvements have not been possible without compatibility changes, both in syntax and functionality.

In addition, PHP's developers have tried to clean up both PHP's syntax and semantics in version 3.0, and this has also caused some incompatibilities. In the long run, we believe that these changes are for the better.

This chapter will try to guide you through the incompatibilities you might run into when going from PHP/FI 2.0 to PHP 3.0 and help you resolve them. New features are not mentioned here unless necessary.

A conversion program that can automatically convert your old PHP/FI 2.0 scripts exists. It can be found in the convertor subdirectory of the PHP 3.0 distribution. This program only catches the syntax changes though, so you should read this chapter carefully anyway.


Start/end tags

The first thing you probably will notice is that PHP's start and end tags have changed. The old <? > form has been replaced by three new possible forms:

Example 0-1. Migration: old start/end tags

<? echo "This is PHP/FI 2.0 code.\n"; >

As of version 2.0, PHP/FI also supports this variation:

Example 0-2. Migration: first new start/end tags

<? echo "This is PHP 3.0 code!\n"; ?>

Notice that the end tag now consists of a question mark and a greater-than character instead of just greater-than. However, if you plan on using XML on your server, you will get problems with the first new variant, because PHP may try to execute the XML markup in XML documents as PHP code. Because of this, the following variation was introduced:

Example 0-3. Migration: second new start/end tags

<?php echo "This is PHP 3.0 code!\n"; ?>

Some people have had problems with editors that don't understand the processing instruction tags at all. Microsoft FrontPage is one such editor, and as a workaround for these, the following variation was introduced as well:

Example 0-4. Migration: third new start/end tags

<script language="php">
echo "This is PHP 3.0 code!\n";
</script>


if..endif syntax

The `alternative' way to write if/elseif/else statements, using if(); elseif(); else; endif; cannot be efficiently implemented without adding a large amount of complexity to the 3.0 parser. Because of this, the syntax has been changed:

Example 0-5. Migration: old if..endif syntax

if ($foo);
echo "yep\n";
elseif ($bar);
echo "almost\n";
else;
echo "nope\n";
endif;

Example 0-6. Migration: new if..endif syntax

if ($foo):
echo "yep\n";
elseif ($bar):
echo "almost\n";
else:
echo "nope\n";
endif;

Notice that the semicolons have been replaced by colons in all statements but the one terminating the expression (endif).


while syntax

Just like with if..endif, the syntax of while..endwhile has changed as well:

Example 0-7. Migration: old while..endwhile syntax

while ($more_to_come);
...
endwhile;

Example 0-8. Migration: new while..endwhile syntax

while ($more_to_come):
...
endwhile;

Warning

If you use the old while..endwhile syntax in PHP 3.0, you will get a never-ending loop.


Expression types

PHP/FI 2.0 used the left side of expressions to determine what type the result should be. PHP 3.0 takes both sides into account when determining result types, and this may cause 2.0 scripts to behave unexpectedly in 3.0.

Consider this example:

$a[0]=5;
$a[1]=7;
$key = key($a);
while ("" != $key) {
echo "$keyn";
next($a);
}

In PHP/FI 2.0, this would display both of $a's indices. In PHP 3.0, it wouldn't display anything. The reason is that in PHP 2.0, because the left argument's type was string, a string comparison was made, and indeed "" does not equal "0", and the loop went through. In PHP 3.0, when a string is compared with an integer, an integer comparison is made (the string is converted to an integer). This results in comparing atoi("") which is 0, and variablelist which is also 0, and since 0==0, the loop doesn't go through even once.

The fix for this is simple. Replace the while statement with:

while ((string)$key != "") {


Error messages have changed

PHP 3.0's error messages are usually more accurate than 2.0's were, but you no longer get to see the code fragment causing the error. You will be supplied with a file name and a line number for the error, though.


Short-circuited boolean evaluation

In PHP 3.0 boolean evaluation is short-circuited. This means that in an expression like (1 || test_me()), the function test_me() would not be executed since nothing can change the result of the expression after the 1.

This is a minor compatibility issue, but may cause unexpected side-effects.


Function true/false return values

Most internal functions have been rewritten so they return TRUE when successful and FALSE when failing, as opposed to 0 and -1 in PHP/FI 2.0, respectively. The new behaviour allows for more logical code, like $fp = fopen("/your/file") or fail("darn!");. Because PHP/FI 2.0 had no clear rules for what functions should return when they failed, most such scripts will probably have to be checked manually after using the 2.0 to 3.0 convertor.

Example 0-9. Migration from 2.0: return values, old code

$fp = fopen($file, "r");
if ($fp == -1);
echo("Could not open $file for reading<br>\n");
endif;

Example 0-10. Migration from 2.0: return values, new code

$fp = @fopen($file, "r") or print("Could not open $file for reading<br>\n");


Other incompatibilities

Example 0-11. Migration from 2.0: concatenation for strings

echo "1" + "1";

In PHP 2.0 this would echo 11, in PHP 3.0 it would echo 2. Instead use:

echo "1"."1";
$a = 1;
$b = 1;
echo $a + $b;

This would echo 2 in both PHP 2.0 and 3.0.

$a = 1;
$b = 1;
echo $a.$b;

This will echo 11 in PHP 3.0.

 


Appendix B. PHP development


Adding functions to PHP3


Function Prototype

모든 함수는 다음과 같은 모양을 취한다. :

void php3_foo(INTERNAL_FUNCTION_PARAMETERS) {
}

비록 함수가 어떤 인수(argument)도 가지고 있지 않아도, 이런 방식으로 호출된다.


Function Arguments

인수(Argument)는 한상 pval type이다. 이 type은 argument의 actual type을 가진 union을 포함하고 있다. 따라서, 만약 함수가 두 개의 argument를 가진다면, 함수의 맨 처음에서 다음과 같은 동작을 취한다. :

Example 0-1. Fetching function arguments

pval *arg1, *arg2;
if (ARG_COUNT(ht) != 2 || getParameters(ht,2,&arg1,&arg2)==FAILURE) {
WRONG_PARAM_COUNT;
}

NOTE: argument는 by value와 by reference의 방식중에 하나로 전달된다. 두 방식 모두 getParameters에 &(pval *)을 전달할 필요가 있다. 만역 여러분이 n번째 parameter가 by reference로 전달되었는가를 검사하려면, ParameterPassedByReference(ht,n) 함수를 사용한다. 이 함수는 1이나 0을 반환한다.

When you change any of the passed parameters, whether they are sent by reference or by value, you can either start over with the parameter by calling pval_destructor on it, or if it's an ARRAY you want to add to, you can use functions similar to the ones in internal_functions.h which manipulate return_value as an ARRAY.

Also if you change a parameter to IS_STRING make sure you first assign the new estrdup()'ed string and the string length, and only later change the type to IS_STRING. If you change the string of a parameter which already IS_STRING or IS_ARRAY you should run pval_destructor on it first.


Variable Function Arguments

A function can take a variable number of arguments. If your function can take either 2 or 3 arguments, use the following:

Example 0-2. Variable function arguments

pval *arg1, *arg2, *arg3;
int arg_count = ARG_COUNT(ht);
if (arg_count < 2 || arg_count > 3 ||
getParameters(ht,arg_count,&arg1,&arg2,&arg3)==FAILURE) {
WRONG_PARAM_COUNT;
}


Using the Function Arguments

개별 argument의 type은 pval type 필드에 저장된다. 이 type은 다음중 한 개다. :

Table 0-1. PHP Internal Types

IS_STRING

String

IS_DOUBLE

Double-precision floating point

IS_LONG

Long integer

IS_ARRAY

Array

IS_EMPTY

None

IS_USER_FUNCTION

??

IS_INTERNAL_FUNCTION

?? (if some of these cannot be passed to a function - delete)

IS_CLASS

??

IS_OBJECT

??

If you get an argument of one type and would like to use it as another, or if you just want to force the argument to be of a certain type, you can use one of the following conversion functions:

convert_to_long(arg1);
convert_to_double(arg1);
convert_to_string(arg1);
convert_to_boolean_long(arg1); /* If the string is "" or "0" it becomes 0, 1 otherwise */
convert_string_to_number(arg1); /* Converts string to either LONG or DOUBLE depending on string */

These function all do in-place conversion. They do not return anything.

The actual argument is stored in a union; the members are:


Memory Management in Functions

함수가 필요한 모든 메모리는 emalloc()이나 estrdup()을 사용해서 확보한다. 이 함수들은 일반적인 malloc(), strdup()과 비슷하게 느껴지는 추상적인 메모리 관리 함수이다. 이 메모리는 efree()함수를 사용하여 해제(free)된다.

프로그램에서는 다음과 같은 두 종류의 종류의 메모리가 사용된다. : 변수에서 사용하여 파서에 돌려지는 메모리와, 여러분의 내부 함수(internal function)에서 임시 저장 공간으로 필요한 메모리. 만약 여러분이 문자열을 파서에 돌려줄 변수에 저장하려 한다면, 이 변수는 우선 emalloc()이나 estrdup()의 함수를 사용하여 메모리의 공간을 확보할 필요가 있다. 이 메모리는 절대 여러분이 풀어줄 수 없다. 단지, 후에 같은 함수내에서 원래의 대입된 값을 바꾸어 줄 수 있을 뿐이다.

여러분이 함수나 라이브러리에서 필요한 어떠한 임시/영구적인 메모리에 대해서도, 여러분은 emalloc()과 estrdup(), efree()의 3개의 함수를 사용해야 한다. 이 함수들은 반드시 그것에 대응되는 함수들과 함께 작동해야 한다. emalloc()이나 estrdup()을 사용한 메모리에는, 이 메모리가 프로그램이 종료될 때까지 필요한 것이 아닌 한, 반드시 efree()가 필요하다. 만약 그렇게 하지 않으면 메모리 누설(leak)이 발생한다. "그 함수가 그것에 대응되는 함수와 함께 작동해야 한다"는 것의 의미는, emalloc()이나 estrdup()없이 efree()를 사용한다면 여러분은 segment fault 오류를 만나게 될 것이다. 그러므로 필요없는 메모리에 대한 해제는 충분한 주의를 기울여야 할 것이다.

PHP3을 "-DDEBUG"를 주고 컴파일하였다면, PHP3는 emalloc()이나 estrdup()에 의해 확보된 모든 메모리의 list를 표시할 것이다. 그러나, efree()함수를 사용해도 해제되지 않고, 해당 프로그램이 종료될 때 해제된다.


Setting Variables in the Symbol Table

symbol table에 변수를 설정하기 쉽게하기 위해 다음과 같은 몇 개의 macro가 있다. :

[1]

PHP 3.0의 Symbol tables은 hash table의 형태로 되어 있다. 언제나 &symbol_table은 'main' symbol table을 가리키고 있고, active_symbol_table은 현재 active된 symbol table을 가리키고 있다. (이 두가지는 시작(startup)시는 같지만, 함수안에서는 달라진다.)

The following examples use 'active_symbol_table'. You should replace it with &symbol_table if you specifically want to work with the 'main' symbol table. Also, the same functions may be applied to arrays, as explained below.

Example 0-3. Checking whether $foo exists in a symbol table

if (hash_exists(active_symbol_table,"foo",sizeof("foo"))) { exists... }
else { doesn't exist }

Example 0-4. Finding a variable's size in a symbol table

hash_find(active_symbol_table,"foo",sizeof("foo"),&pvalue);
check(pvalue.type);

Arrays in PHP 3.0 are implemented using the same hashtables as symbol tables. This means the two above functions can also be used to check variables inside arrays.

If you want to define a new array in a symbol table, you should do the following.

First, you may want to check whether it exists and abort appropiately, using hash_exists() or hash_find().

Next, initialize the array:

Example 0-5. Initializing a new array

pval arr;
if (array_init(&arr) == FAILURE) { failed... };
hash_update(active_symbol_table,"foo",sizeof("foo"),&arr,sizeof(pval),NULL);

This code declares a new array, named $foo, in the active symbol table. This array is empty.

Here's how to add new entries to it:

Example 0-6. Adding entries to a new array

pval entry;
entry.type = IS_LONG;
entry.value.lval = 5;
/* defines $foo["bar"] = 5 */
hash_update(arr.value.ht,"bar",sizeof("bar"),&entry,sizeof(pval),NULL);
/* defines $foo[7] = 5 */
hash_index_update(arr.value.ht,7,&entry,sizeof(pval),NULL);
/* defines the next free place in $foo[],
* $foo[8], to be 5 (works like php2)
*/
hash_next_index_insert(arr.value.ht,&entry,sizeof(pval),NULL);

If you'd like to modify a value that you inserted to a hash, you must first retrieve it from the hash. To prevent that overhead, you can supply a pval ** to the hash add function, and it'll be updated with the pval * address of the inserted element inside the hash. If that value is NULL (like in all of the above examples) - that parameter is ignored.

hash_next_index_insert() uses more or less the same logic as "$foo[] = bar;" in PHP 2.0.

If you are building an array to return from a function, you can initialize the array just like above by doing:

if (array_init(return_value) == FAILURE) { failed...; }

...and then adding values with the helper functions:

add_next_index_long(return_value,long_value);
add_next_index_double(return_value,double_value);
add_next_index_string(return_value,estrdup(string_value));

Of course, if the adding isn't done right after the array initialization, you'd probably have to look for the array first:

pval *arr;
if (hash_find(active_symbol_table,"foo",sizeof("foo"),(void **)&arr)==FAILURE) { can't find... }
else { use arr->value.ht... }

Note that hash_find receives a pointer to a pval pointer, and not a pval pointer.

Just about any hash function returns SUCCESS or FAILURE (except for hash_exists(), which returns a boolean truth value).


Returning simple values

함수에서 쉽게 값을 반환하기 위해 다음과 같은 몇 개의 매크로가 있다. :

모든 RETURN_* 매크로들은 return값을 설정하고, 해당 함수로부터 복귀한다. :

모든 RETVAL_* 매크로들은 return값을 설정하지만, 해당 함수로부터 복귀하지는 않는다. :

The string macros above will all estrdup() the passed 's' argument, so you can safely free the argument after calling the macro, or alternatively use statically allocated memory.

If your function returns boolean success/error responses, always use RETURN_TRUE and RETURN_FALSE respectively.


Returning complex values

함수는 object나 array같은 complex data도 반환할 수 있다.

Returning an object:

The functions used to populate an object are:

Returning an array:

The functions used to populate an array are:


Using the resource list

PHP 3.0은 여러 자원의 가지 형태를 다루는 표준적인 방법을 가지고 있다. 이것은 PHP 2.0의 모든 지역적인 linked list를 대체한다.

Available functions:

Typically, these functions are used for SQL drivers but they can be used for anything else; for instance, maintaining file descriptors.

Typical list code would look like this:

Example 0-7. Adding a new resource

RESOURCE *resource;
/* ...allocate memory for resource and acquire resource... */
/* add a new resource to the list */
return_value->value.lval = php3_list_insert((void *) resource, LE_RESOURCE_TYPE);
return_value->type = IS_LONG;

Example 0-8. Using an existing resource

pval *resource_id;
RESOURCE *resource;
int type;
convert_to_long(resource_id);
resource = php3_list_find(resource_id->value.lval, &type);
if (type != LE_RESOURCE_TYPE) {
php3_error(E_WARNING,"resource index %d has the wrong type",resource_id->value.lval);
RETURN_FALSE;
}
/* ...use resource... */

Example 0-9. Deleting an existing resource

pval *resource_id;
RESOURCE *resource;
int type;
convert_to_long(resource_id);
php3_list_delete(resource_id->value.lval);

The resource types should be registered in php3_list.h, in enum list_entry_type. In addition, one should add shutdown code for any new resource type defined, in list.c's list_entry_destructor() (even if you don't have anything to do on shutdown, you must add an empty case).


Using the persistent resource table

PHP 3.0은 영구적인 자원(persistent resources; i.e., resources that are kept in between hits)을 저장하는 표준적인 방법을 가지고 있다. 이 방법은 MySQL 모듈에서 처음사용되었고, mSQL도 이것을 따르고 있다. 따라서 persistent resource를 어떻게 사용하는가에 대해 알고 싶다면 우선 mysql.c를 읽어보도록하자. 주의해서 볼 함수들은 다은과 같다. :

php3_mysql_do_connect

php3_mysql_connect()

php3_mysql_pconnect()

persistence 모듈의 일반적인 idea는 다음과 같다. :

If you read mysql.c, you'll notice that except for the more complex connect function, nothing in the rest of the module has to be changed.

The very same interface exists for the regular resource list and the persistent resource list, only 'list' is replaced with 'plist':

However, it's more than likely that these functions would prove to be useless for you when trying to implement a persistent module. Typically, one would want to use the fact that the persistent resource list is really a hash table. For instance, in the MySQL/mSQL modules, when there's a pconnect() call (persistent connect), the function builds a string out of the host/user/passwd that were passed to the function, and hashes the SQL link with this string as a key. The next time someone calls a pconnect() with the same host/user/passwd, the same key would be generated, and the function would find the SQL link in the persistent list.

Until further documented, you should look at mysql.c or msql.c to see how one should use the plist's hash table abilities.

One important thing to note: resources going into the persistent resource list must *NOT* be allocated with PHP's memory manager, i.e., they should NOT be created with emalloc(), estrdup(), etc. Rather, one should use the regular malloc(), strdup(), etc. The reason for this is simple - at the end of the request (end of the hit), every memory chunk that was allocated using PHP's memory manager is deleted. Since the persistent list isn't supposed to be erased at the end of a request, one mustn't use PHP's memory manager for allocating resources that go to it.

When you register a resource that's going to be in the persistent list, you should add destructors to it both in the non-persistent list and in the persistent list. The destructor in the non-persistent list destructor shouldn't do anything. The one in the persistent list destructor should properly free any resources obtained by that type (e.g. memory, SQL links, etc). Just like with the non-persistent resources, you *MUST* add destructors for every resource, even it requires no destructotion and the destructor would be empty. Remember, since emalloc() and friends aren't to be used in conjunction with the persistent list, you mustn't use efree() here either.


Adding runtime configuration directives

많은 PHP3의 기능(feature)들이 실행중에 설정 가능하다. 이 설정 지시자(configuration directives)는 php3.ini에 설정되거나, Apache 모듈의 경우 .conf 파일에 설정가능하도록 되어 있다. Apache .conf 파일에 설정하는 것의 장점은 디렉토리별로 설정을 다르게 할 수 있다는 점이다. 이것은 예를들어 어떤 디렉토리가 다른 디렉토리를 가지고 있어도, 해당하는 한 디렉토리에만 safemodeexecdir 설정을 할 수 있다는 것이다. 이 개별 설정 기능은 서버가 multiple virtual hosts를 지원할 때 무척 유용하다.

The steps required to add a new directive:


Calling User Functions

내부 함수(internal function)에서 사용자 함수를 부르려면, call_user_function() 함수를 사용하여야 한다.

call_user_function() returns SUCCESS on success, and FAILURE in case the function cannot be found. You should check that return value! If it returns SUCCESS, you are responsible for destroying the retval pval yourself (or return it as the return value of your function). If it returns FAILURE, the value of retval is undefined, and you mustn't touch it.

All internal functions that call user functions must be reentrant. Among other things, this means they must not use globals or static variables.

call_user_function() takes six arguments:


HashTable *function_table

This is the hash table in which the function is to be looked up.


pval *object

This is a pointer to an object on which the function is invoked. This should be NULL if a global function is called. If it's not NULL (i.e. it points to an object), the function_table argument is ignored, and instead taken from the object's hash. The object *may* be modified by the function that is invoked on it (that function will have access to it via $this). If for some reason you don't want that to happen, send a copy of the object instead.


pval *function_name

The name of the function to call. Must be a pval of type IS_STRING with function_name.str.val and function_name.str.len set to the appropriate values. The function_name is modified by call_user_function() - it's converted to lowercase. If you need to preserve the case, send a copy of the function name instead.


pval *retval

A pointer to a pval structure, into which the return value of the invoked function is saved. The structure must be previously allocated - call_user_function() does NOT allocate it by itself.


int param_count

The number of parameters being passed to the function.


pval *params[]

An array of pointers to values that will be passed as arguments to the function, the first argument being in offset 0, the second in offset 1, etc. The array is an array of pointers to pval's; The pointers are sent as-is to the function, which means if the function modifies its arguments, the original values are changed (passing by reference). If you don't want that behavior, pass a copy instead.


Reporting Errors

내부 함수에서 에러를 report할 때는 php3_error()함수를 사용하는 것이 좋다. 이 함수는 최소 두개의 인수를 가지고 호출된다. 첫번째는 에러의 level이고, 다른 하나는 에러 메세지를 위한 format string( printf()에서 사용되는 것과 같은 형태) 이다. 그리고 그 나머지는 주어진 format string의 parameter가 된다. 에러 level은 다음과 같다. :


E_NOTICE

Notice는 기본적으로는 출력되지 않는다. 이것은 스크립트가 뭔가 에러를 감지했지만, 그것이 정상적인 상황에서 발생하는 것이라는 의미이다. 예를들어 설정되지 않은 변수를 사용하려 했거나, 존재하지 않는 파일에 stat() 함수를 호출하는 것 등이다.


E_WARNING

Warning은 기본적으로 출력된다. 그러나, 스크립트의 실행을 멈추지는 않는다. 이것은 호출이 완료되기 전에 스크립트에 의해 잡혀져야 하는 문제를 가리킨다. 예를들어 잘못된 regular expression으로 ereg()를 호출하는 것 등이다.


E_ERROR

Error도 기본적으로 출력된다. 그리고, 함수의 실행이 완료된 직후, 스크립트의 실행을 멈춘다. 이것은 memory allocation 문제같은 복구가 불가능한 에러를 의미한다.


E_PARSE

Parse error는 오직 Parser만이 생성가능하다. code가 list된다.


E_CORE_ERROR

PHP의 core에의해 생성된다는 점을 제외하고는 E_ERROR와 동일하다. 일반 함수로는 이 형태의 에러를 만들지 못한다.


E_CORE_WARNING

PHP의 core에의해 생성된다는 점을 제외하고는 E_WARNING와 동일하다. 일반 함수로는 이 형태의 에러를 만들지 못한다.


Hitchhiker's guide to PHP internals


Appendix C. The PHP Debugger


Using the Debugger

PHP의 내장 디버거는 파악하기 힘든 버그를 찾아내는데 매우 유용한 도구이다. 디버거는 PHP가 시작될 때마다 TCP 포트에 접속하여 동작한다. 요구에 대한 모든 에러 메세지가 이 점속을 통해 전달된다. This information is intended for "debugging server" that can run inside an IDE or programmable editor (such as Emacs).

debugger 설정 방법:

이제, 모든 warning과 notice 등이 listener socket에 표시될 것이다. 만약 여러분이 error_reporting()를 사용해서 report하지 못하도록 해도 이 레포트는 동작한다.


Debugger Protocol

debugger protocol은 라인 단위이다. 각 라인은 type을 가지고 있고, 여러라인이 하나의 메세지를 구성한다. 각 메세지는 start type 으로 시작하고, end type으로 끝난다. PHP는 동시에 여러 다른 메세지의 라인을 보낼 수도 있다.

한 줄은 다음과 같은 format으로 되어 있다.:

date time host(pidtypemessage-data

date

Date in ISO 8601 format (yyyy-mm-dd)

time

Time including microseconds: hh:mm:uuuuuu

host

script error 가 생긴 DNS name 이나 IP address

pid

이 에러를 만든 PHP script process의 host의 PID (process id)

type

라인의 type. Tells the receiving program about what it should treat the following data as:

Table C-1. Debugger Line Types

Name

Meaning

start

Tells the receiving program that a debugger message starts here. The contents of data will be the type of error message, listed below.

message

The PHP error message.

location

File name and line number where the error occured. The first location line will always contain the top-level location. data will contain file:line. There will always be a location line after message and after every function.

frames

Number of frames in the following stack dump. If there are four frames, expect information about four levels of called functions. If no "frames" line is given, the depth should be assumed to be 0 (the error occured at top-level).

function

Name of function where the error occured. Will be repeated once for every level in the function call stack.

end

Tells the receiving program that a debugger message ends here.

 

data

Line data.

Table C-2. Debugger Error Types

Debugger

PHP Internal

warning

E_WARNING

error

E_ERROR

parse

E_PARSE

notice

E_NOTICE

core-error

E_CORE_ERROR

core-warning

E_CORE_WARNING

unknown

(any other)

 

Example C-1. Example Debugger Message

1998-04-05 23:27:400966 lucifer.guardian.no(20481) start: notice
1998-04-05 23:27:400966 lucifer.guardian.no(20481) message: Uninitialized variable
1998-04-05 23:27:400966 lucifer.guardian.no(20481) location: (null):7
1998-04-05 23:27:400966 lucifer.guardian.no(20481) frames: 1
1998-04-05 23:27:400966 lucifer.guardian.no(20481) function: display
1998-04-05 23:27:400966 lucifer.guardian.no(20481) location: /home/ssb/public_html/test.php3:10
1998-04-05 23:27:400966 lucifer.guardian.no(20481) end: notice

 

BACKRUSH  대화방입장  유닉스명령  다음  자료실  Ascii Table   Exploit   원격접속  달력,시간   프로세스  
지하철노선   Whois   RFC문서   SUN FAQ   SUN FAQ1   C메뉴얼   PHP메뉴얼   너구리   아스키월드 아이피서치