PHP/제로보드2010.01.01 16:09

제로보드 XE Module 개발 관련 문서


제로보드 XE Skin 개발 관련 문서


네이버에서 제로보드의 모듈과 스킨의 개발 활성화를 위한 강연때 배포한 모듈과 스킨 제작 관련 문서
저작자 표시 비영리
신고

'PHP > 제로보드' 카테고리의 다른 글

제로보드 모듈/스킨 개발문서  (0) 2010.01.01
제로보드 게시판 RSS 주소  (0) 2009.12.20
게시판 권한  (0) 2009.12.18
Posted by 코멧'★
PHP/제로보드2009.12.20 13:52

각 게시판별 RSS주소 사용하기

각 게시판별 RSS 주소를 사용하기 위해서는 게시판의 설정에서 피드백 공개 설정을 해주어야 합니다.

XE 관리자 모드로 들어가셔서 서비스 관리 → 게시판 → RSS를 발행하고자하는 게시판 선택 → 추가설정으로 이동합니다.



위 그림과 같이 공개 설정을 한후

http://웹사이트 주소/?mid=게시판ID&act=rss 로 접속하면 해당 게시판의 RSS를 확인하실 수 있습니다.
저작자 표시 비영리
신고

'PHP > 제로보드' 카테고리의 다른 글

제로보드 모듈/스킨 개발문서  (0) 2010.01.01
제로보드 게시판 RSS 주소  (0) 2009.12.20
게시판 권한  (0) 2009.12.18
Posted by 코멧'★
TAG RSS, xe
PHP/제로보드2009.12.18 21:00
제로보드 게시판 권한

$grant->access : 접근권한
$grant->list : 목록보기
$grant->write_document : 글쓰기
$grant->write_comment : 댓글쓰기
$grant->view : 보기
$grant->manager : 관리권한
저작자 표시 비영리
신고

'PHP > 제로보드' 카테고리의 다른 글

제로보드 모듈/스킨 개발문서  (0) 2010.01.01
제로보드 게시판 RSS 주소  (0) 2009.12.20
게시판 권한  (0) 2009.12.18
Posted by 코멧'★
PHP2009.10.29 23:14

Flash Builder 4에서 PHP와 Flash Builder 간의 연동을 보여주는 동영상입니다.
저같이 PHP 프로그래머에서 플렉스로 전향한 사람들에겐 아주 유익한 동영상이네요 ^^;

PART 1. WORKING WITH PHP SERVICES IN FLASH BUILDER 4



PART 2. VIEW THE CODE : PHP SERVICES IN FLASH BUILDER 4




또 다른 동영상

USING THE PHP DATA WIZARD



다음 영상은 PHP 개발자들을 위한 COLDFUSION 이라는 동영상입니다.

COLDFUSION FOR PHP DEVELOPERS



저작자 표시 비영리
신고

'PHP' 카테고리의 다른 글

PHP 개발자들을 위한 Flash Builder 4 동영상  (2) 2009.10.29
PHP로 소켓 서버 작성하기  (0) 2009.10.27
Exif 함수  (0) 2009.08.24
Posted by 코멧'★
PHP2009.10.27 12:11

[출처] - http://skystory.kr/567


PHP로 소켓 서버 작성하기


대상 독자
요구사항
1 개요 - 소켓 서버란 무엇인가?
1.1 소켓의 형태
2 PHP 소켓 함수
2.1 PHP에서 소켓 만들기
2.2 실용 서버 만들기
2.3 실용적인 예
2.4 보안
가능한 기능 추가와 확장
저자에 관해

알아두기

이 자료는 http://www.zend.com/zend/tut/tutorial-staub3.php/에 있는
Writing Socket Servers in PHP를 제가 허접번역 및 내용을 추가 및 생략한 것입니다.
이미 다 아시는 내용 이시겠지만, 이해해 주시면 감사하겠습니다.
질문이나 번역을 바라는 주제가 있으시면,
이메일 또는 코멘트를 이용해 주세요. 참고로 전 영어, PHP 둘다 왕초보^^;.

대상 독자
인터넷 소켓 서버를 만들기 위해 PHP 소켓 함수 사용에 관심있는 분들..

미리 준비할 것
       
        * PHP 소켓 라이브러리. 이것은 컴파일 할 때 -enable-sockets 설정 옵션을 주시면 됩니다.
        * PHP의 CLI (Command Line Interface) 버전. 이것은 소켓서버가 커멘드 라인에서 실행하기 때문입니다.
        * 리눅스 운영체제
비록 리눅스를 사용한 따라하기이지만, 윈도우나 유닉스환경에서도 됩니다.
윈도우에서, PHP 소켓은 php.ini에서 externsion=php_sockets.dll부분의 주석을 제거해야
사용할 수 있습니다.

1 개요 - 소켓 서버란 무엇인가?

소켓 서버는 소켓 서버에 들어오는 요청과 응답을 대기하고있는 특정 포트에 할당하는 서비스입니다.
이메일 서비스(POP3, SMTP)와 웹서버는 소켓 서버의 좋은 예입니다.
HTTP(Web)서버는 들어오는 요청에 대해 포트 80에서 대기하고,
서버 안에 있는 HTML과 다른 파일(이미지, 동영상,문서)을 클라이언트 사용자에게 서비스 합니다.

소켓 서버는 주로 서비스나 데몬으로 끊임없이 실행됩니다.

쉽게 설명하자면, 우리가 네트워크 프로그래밍을 한다는 의미는 소켓이 제공하는 함수를 이용하여 프로그래밍을 한다는 의미입니다.
일상적으로, 소켓 프로그래밍과 네트워크 프로그래밍은 거의 같은 의미로 사용되고 있습니다.

1.1 소켓의 종류

정보가 인터넷으로 보내질 때, 그것은 주로 패킷으로 나누어집니다.  
왜냐하면 큰 용량을 패킷이라는 작은 단위로 쪼갠후에 보내야 하기 때문입니다.

패킷으로 정보를 쪼갤 때 두가지 다른 프로토콜이 있는데, 정보 형태에 대해 전송 필요조건에 의존하기 때문입니다.        
        * TCP(Transmmission Control Protocol) - 전송 패킷은 다른 끝에서 번호가 붙여지고 끝에가서 조립된다. 그들은전체 메시지를 형성하기 위해 조립된다 .
        TCP는 데이터의 손실이 없습니다.(만약 패킷을 잃어버리면, 재전송합니다.), 이메일처럼 완전한 받아야 하는 파일을 보낼때 적합합니다.
         * UDP(User Datagram Protocol) - 이것은 비연결 프로토콜입니다.
        TCP처럼 IP 프로토콜 위에서 실행됩니다.
그 차이는 UDP는 약간의 에러 복구 서비스를 제공하고 신뢰성이 없습니다.
UDP는 특별히 음악, 동영상 스트리밍처럼 스트리밍 데이타에 적합합니다.

2. PHP 소켓  함수

PHP 는 저 수준에서 소켓을 처리할 수 있습니다.
PHP3에서, PHP는 fsockopen()과 관련 함수로 처리하는 소켓을 도입하였습니다.
(네트워크 부분은 PHP공식 매뉴얼 http://php.net/network를 보세요).
PHP4에서는, PHP의 소켓은  BSD 스타일 소켓에 저수준 연결의 도입으로 멋지게 확장되었습니다.

참고: PHP에서 소켓 함수는 여전히 실험적이지만, 다음 버전에서 더욱 강화될 것입니다.
PHP 소켓함수는 잘만 작성하면 쓸만하다는 것을 테스트는 보여줍니다.

2.1. PHP로 소켓 만들기

PHP에서 저수준 소켓을 만드는 것은 C와 유닉스 소켓 프로그래밍에서 소켓 함수를 사용한것과 매우 비슷합니다.

간단한 예제로 시작해봅시다. 9000 포트에서 연결을 대기하는 소켓 서버는 입력으로 문자열을 받아들이고, 모든 공백 문자는 제거하고, 반환한다.


#!/usr/local/bin/php -q

<?
// 무한정 실행하기 위해 시간한계를 0으로 설정한다.
set_time_limit (0);

// 대기할 IP 주소와 포트번호를 설정한다
$address = '192.168.0.100';
$port = 9000;

// TCP 소켓을 만든다.
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
// IP 주소와 포트번호를 소켓에 결합
socket_bind($sock, $address, $port) or die('Could not bind to address');
// 접속을 위해 대기를 시작한다
socket_listen($sock);

/* 들어오는 요청을 받아들이고 자식 프로세스로 그들을 처리한다 */
$client = socket_accept($sock);

// 클라이언트가 입력한 1024 바이트를 읽는다.
$input = socket_read($client, 1024);

// 입력받은 문자열에서 공백을 제거한다.
$output = ereg_replace("[ \t\n\r]","",$input).chr(0);

// 클라이언드에 출력을 보낸다.
socket_write($client, $output);

// 자식 프로세스를 닫는다
socket_close($client);

// 주 소켓을 닫는다
socket_close($sock);
?>

이 프로그램을 실행하려면, 첫 줄 #!/usr/local/bin/php -q 가 PHP CLI(or CGI) binary의 위치에 있어야 합니다.
여러분은 소스파일의 실행모드를 바꾸는 것이 필요합니다.
(chmod 755 socket_server.php)
실행하려면,  커멘드 라인에서 ./socket_server.php치고 엔터.
외관상 이 프로그램은 아무일도 않합니다.

그럼 각각의 라인을 자세히 살펴봅시다.

        * #!/usr/local/bin/php -q
        PHP CLI 실행파일을 실행합니다. -q 옵션을 쓰면 HTTP 헤더를 출력하지 않습니다.

        * $sock =sock_create(AF_INET, SOCK_STREAM, 0)
        '주인' 소켓을 만듭니다. 이 소켓은  들어오는 요청을 위해 대기할 것이고, 클라이언트를 위해 새로운 소켓을 생성할것입니다.

PHP manual에 보면 (http://www.php.net/socket_create): AF_INET는 IPV4 프로토콜의 도메인 타입입니다.
참고: 만약 UDP 소켓을 열기위해서는, SOCK_STREAM을 지우고 SOCK_DGRAM을 쓰십시오.

        * socket_bind($sock, $address, $port) or die('Could not bind to address')
        소켓을 입력된 주소와 포트에 결합합니다.

        * socket_listen($sock)
        저장된 포트번호에서, 들어오는 연결을 대기합니다. 만약 연결되면, 자식 소켓을 생성할 것이다.

        * $cliend = socket_accept($sock)
        마스터 소켓에서 접속을 받아들인다.

        * $input = socket_read($client, 1024)
        받아들인 소켓에서 1024 바이트를 읽는다,
       
        * $output = ereg_replace("[\t\n\r]","",$input).chr(0)
        정규식을 사용하여 모든 공백 문자를 제거한다.
       
        *socket_write($client, $output)
        스트림 소켓으로 테이터를 전송한다.
       

2.2 실제 서버 제작하기

지금 여러분은 소켓을 설정하고 대기하기 위해 필요한 기본 절차를 배웠습니다.
여러분은 쓸모있는 서버를 만들 준비가 되어있습니다.

위에 있는 소스코드를 보면, 이 프로그램은 단 한번 실행되고 종료됩니다.
그것은 소켓서버를 생성하기위해 요구되는 단계를 설명하기에는 좋습니다.
그러나 그것은 현실 상황에서는 적합하지 않다.
여러분의 프로그램이 실행 되고, 들어오는 요청에 응답하자마다. 프로그램이 종료되기를 원치않을 것입니다.
다시말하면, 계속 실행되야만 한다.

우리는 그러므로 프로그램은 계속 실행하기 위한 방법이 필요합니다.

우리가 명확히 exit 문을 명령할때까지, 우리는 while(true) { /* 놀지말고 일 좀 해라 */ } 이렇게 반복문을 계속적으로 사용할수 있습니다.
우리는 위의 예를 다음과 같은 기능을 추가하여 확장할 것입니다.

        *  끝없이 프로그램을 실행하게한다.
        * 종료 기능을 만든다.
        * 여러명이 접속해도 처리할수 있도록 한다.

#!/usr/local/bin/php -q
<?

// 끝없이 실행하기 위해 시간 한계를 0으로 설정한다
set_time_limit (0);

// 서버가 대기할 ip 주소와 port 번호를 설정한다.
$address = '192.168.0.100';
$port = 9000;
// 동시에 접속할 수 있는 사용자를 10명으로 한정한다.
$max_clients = 10;

// 클라이언드 정보를 얻을 배열
// 다시 말하자면, 사용자가 10명을 동시에 받아들이겠다면,
// 배열 크기를 10개로 잡아야 합니다.
$clients = Array();

// TCP 스트림 소켓 생성
$sock = socket_create(AF_INET, SOCK_STREAM, 0);

// 소켓을 아이피주소/포트에 결합
socket_bind($sock, $address, $port) or die('주소 지정에 실패했습니다.');

// 연결을 대기를 시작한다.
socket_listen($sock);

// 무한 루프 실행
while (true) {
    // 읽기위해 클라이언트 대기 소켓을 설정한다
    $read[0] = $sock;
    for ($i = 0; $i < $max_clients; $i++)
    {
        if ($client[$i]['sock']  != null)
            $read[$i + 1] = $client[$i]['sock'] ;
    }
    // socket_select()에 블럭킹 호출을 설정한다.
    $ready = socket_select($read,null,null,null);

    /* 만약 새로운 접속이 되면, 그것을 클라이언트 배열에 추가한다 */
    if (in_array($sock, $read)) {
        for ($i = 0; $i < $max_clients; $i++)
        {
            if ($client[$i]['sock'] == null) {
                $client[$i]['sock'] = socket_accept($sock);
                break;
            }
            elseif ($i == $max_clients - 1)
                print ("너무 많은 사용자")
        }
        if (--$ready <= 0)
            continue;
    } // 조건문 if in_array의 끝
    
    // 만약 클라이언트가 쓰기를 시도하면, 바로 그것을 처리한다
    for ($i = 0; $i < $max_clients; $i++) // for each client
    {
        if (in_array($client[$i]['sock'] , $read))
        { // 사용자로부터 입력을 받아서..
            $input = socket_read($client[$i]['sock'] , 1024);
        // 만약 입력이 없으면...
            if ($input == null) {
                // Zero length string meaning disconnected
                unset($client[$i]);
            }
            $n = trim($input);
        // 만약 클라이언트가 'exit'를 입력하면,
            if ($input == 'exit') {
             // 요청에 따라 연결을 종료한다
                socket_close($client[$i]['sock']);
                                // 만약 아니면...
            } elseif ($input) {
             // 공백문자를 제거하고,
                $output = ereg_replace("[ \t\n\r]","",$input).chr(0);
                // 사용에게 소켓 스트림을 통하여 문자열을 보낸다.
                socket_write($client[$i]['sock'],$output);
            }
        } else {
            // 소켓 종료
            socket_close($client[$i]['sock']);
            unset($client[$i]);
        }
    }
} // while문 끝
// 주인 소켓 종료
socket_close($sock);
?>

기본 기능은 처음 예제와 같다. 다만 추가된 특징은 사용자가 문자열 'exit'를 프로그램에 보내면,
프로그램은 연결을 끝낼것이다.

이 프로그램은 반복문을 제외하고, 처음 프로그램과 매우 비슷하다.
소스는 4개의  기본 블럭이 있다.

        1 읽기위해 소켓 설정
        2 새로운 클라이언트를 대기하고 $client 배열로 그것을 설정한다.
         3 클라이언트 대기하고 입력을 기록한다.
        4 클라이언트 입력을 처리한다.

이 예에서, 새 함수는 socket_select($read, null, null, null)입니다.
이 함수는 소켓 배열에서 select() 시스템 호출을 실행하고 상태가 바뀔때까지 기다립니다.
이것은 그 상태가 바뀔때까지 막고 있다가, 누군가 접속하여 그 상태가 바뀌면 그것을 처리합니다.

마지막 요점으로, 여러분은 연결된 다른 클라이언드에 정보를 뿌리고 싶을때(예를 들면 다-대-다 채팅 환경을 말한다)를 알아낼 수있습니다.
이것은 다음과 같은 코드로 저장될수 있다.
<PRE>
$output = '이것은 제가 여러명에게 보내고 싶은 메시지입니다'.chr(0);
for ($j = 0; $j < MAX_CLIENTS; $j++) // 각각의 클라이언트
{
    if ($client[$j]['sock']) {
        socket_write($client[$j]['sock'], $output);
    }
}

원문에서 broadcast라는 말이 나오는데 우리 말로는 '방송'으로 번역하고, &nbsp;
여기서는 한번에 여러명에게 정보를 보내는 것을 애기합니다. 다르게 애기하면 '대량 살포' 이런 의미입니다.

socket_select()함수 역시 중요한데. 부가 설명을 하자면,
select라는 말처럼 기다리고 있다가, 튀는 놈, 예를 들면 사용자가 접속하면, 그 놈을 선택(select)하여
넘겨주면 그걸 처리해주는 것입니다.

2.3 실용적인 사용

지금 우리는 소켓 서버 생성의 기초를 배웠다. 만약 한계가 있다면, 우리의 상상력입니다.

        *  채팅 서버(텍스트 또는 그래픽 기반). 이것은 재미있으면서 진짜 어플리케이션이 될 수 있습니다.
        *  실시간 정보 스트리밍 (뉴스, 주식..기타등등)
        *  스트리밍 멀티미디어 (이미지, 동영상과 사운드)
        *  인증 서버
        *  간단한 웹, POP3, SMTP 그리고 FTP 서버.

좀더 자세하게 말하자면, 소켓 라이브러리는 서버와 마찬가지로 클라이언트 프로그램을 만들 수 있다.

2.4 보안

보안은 접근 가능한 온라인 프로그램 생성할때 고려되어야 한다.
이것은  계속 실행되는 서버 소켓과같이 일반적인 PHP 스크립트에도 해당됩니다.

여러분이 보안 정책을 계획할때, 고려하는 많은 사실이 있다. 여기 몇가지 나열하겠다.


        * 파일 접근 - 여러분은 파일 접근을 제한해야한다. 만약 웹서버같은 것이 파일 접근을 허락하면
        , 여러분은 특정 폴더에서 파일에 접근하게 해야한다. 다른 좋은 개념은
       
        * 인증 - 보안에 약한 서버를 위해, 여러분은 인증을 사용하기를 추천한다. 여러분이
        플래시나, 비주얼 베이직으로 사용자 프론트-엔드를 만들더라도, 그것은 신뢰성이 없습니다.
        누군가 네트워크 접속과 "sniff"할수 없을 것이다.

인증을 하기 위한 한가지 좋은 방법으로, 사용자가 성공적으로 스스로 인증하기 전까지 어떤 시도도 허락하지 않는 것이다.
(위에서 예를 들면 인증 하자마자, $client[$i]['authenticated'] = true )
       
        * 암호화 - 암호화는 중요한 정보를 막기위한 대단히 좋은 방법입니다. 암호화는 특히 위에 애기한 인증과 함께 사용하면
대단히  유용합니다. 운이 좋게도 PHP는 뛰어난 암호화 라이브러리를 제공합니다.
자세한 내용은 (http://www.php.net/mcrypt)

3. 가능한 기능 추가와 확장
        * PCNTL을 사용하여 프로세스 제어와 쓰레드를 추가한다.
         * 프론트-앤드 인터페이스(다시 말해 GUI 화면)는 C++, VB, Flash (XMLSockets를 사용), 자바 또는 TCP/IP 또는 UDP 소켓을 지원하는 모든 소프트 웨어를 사용하려 작성할 수 있다.
        * 만약 서버가  시험삼아 돌아가게되면, 당신은 모니터에 에러 메시지에 출력하는 대신 텍스트 화일이나 데이터 베이스 기록되는 사용자 에러 핸들링 함수를 생성을 원할것이다.

저작자 표시 비영리
신고

'PHP' 카테고리의 다른 글

PHP 개발자들을 위한 Flash Builder 4 동영상  (2) 2009.10.29
PHP로 소켓 서버 작성하기  (0) 2009.10.27
Exif 함수  (0) 2009.08.24
Posted by 코멧'★
PHP2009.08.24 11:44

[출처] http://kr.php.net/manual/kr/ref.exif.php

이 글은 번역본이 아니며 Manual을 보고 각 함수에 대해 알기쉽게 풀어쓴 글입니다. (직역본이 아닙니다.;;)

  • exif_imagetype — Determine the type of an image
  • exif_read_data — Reads the EXIF headers from JPEG or TIFF
  • exif_tagname — Get the header name for an index
  • exif_thumbnail — Retrieve the embedded thumbnail of a TIFF or JPEG image
  • read_exif_data — 별칭: exif_read_data

  • exif_imagetype

    Description (설명)


    이미지의 타입이 실제 맞는지 검사한다.

    int exif_imagetype ( string $filename )

    실제 파일의 bytes를 읽어 검사하여 파일의 진위 여부를 판단할 수 있다.
    악성 파일을 이미지 파일로 변경하여 업로드하는 것을 방지하는 등으로 사용하거나 파일의 확장자를 제한하는 용도로 사용할 수 있다.
    인자 값으로 파일의 절대/상대경로를 받는다.


    Parameters (인수)


    filename
    파일경로를 포함한 파일명


    RETURN VALUE (반환값)


    파일의 signature(서명-파일의 헤더 hex값)을 확인하여 그에 해당하는 상수 값을 리턴합니다.
    만약 적절한 값이 없다면 FALSE를 반환합니다.


    Changelog (변경된 점)


    4.3.2 - JPC, JP2, JPX, JB2, XBM, and WBMP 지원
    4.3.0 - SWC 지원


    Predefined Constants (예약된 상수)


    Imagetype Constants
    Value Constant
    1 IMAGETYPE_GIF
    2 IMAGETYPE_JPEG
    3 IMAGETYPE_PNG
    4 IMAGETYPE_SWF
    5 IMAGETYPE_PSD
    6 IMAGETYPE_BMP
    7 IMAGETYPE_TIFF_II (intel byte order)
    8 IMAGETYPE_TIFF_MM (motorola byte order)
    9 IMAGETYPE_JPC
    10 IMAGETYPE_JP2
    11 IMAGETYPE_JPX
    12 IMAGETYPE_JB2
    13 IMAGETYPE_SWC
    14 IMAGETYPE_IFF
    15 IMAGETYPE_WBMP
    16 IMAGETYPE_XBM

    해당 이미지가 위에 정의된 이미지 파일과 같다면 위의 예약상수 중 해당 타입의 상수를 반환한다.
    만약 해당 상수가 없다면 FALSE를 반환한다.


    Example (예제)


    <?php
    if (exif_imagetype('image.gif') != IMAGETYPE_GIF
    ) {
        echo 
    'The picture is not a gif'
    ;
    }
    ?>


    See Also (참고)


    getimagesize() - Get the size of an image


    exif_read_data

    Description (설명)


    이미지 파일의 EXIF 정보를 읽어온다.

    array exif_read_data ( string $filename [, string $sections= NULL [, bool $arrays= false [, bool $thumbnail= false ]]] )

    디지털 카메라로 찍은 사진의 정보를 가져올 수 있다.

    Exif 관련 정보는 http://exif.org/Exif2-2.PDF 에서 확인할 수 있다.


    Parameters (인수)


    filename

    The name of the image file being read. This cannot be an URL.

    sections

    Is a comma separated list of sections that need to be present in file to produce a result array. If none of the requested sections could be found the return value is FALSE.

    FILE FileName, FileSize, FileDateTime, SectionsFound
    COMPUTED html, Width, Height, IsColor, and more if available. Height and Width are computed the same way getimagesize() does so their values must not be part of any header returned. Also, html is a height/width text string to be used inside normal HTML.
    ANY_TAG Any information that has a Tag e.g. IFD0, EXIF, ...
    IFD0 All tagged data of IFD0. In normal imagefiles this contains image size and so forth.
    THUMBNAIL A file is supposed to contain a thumbnail if it has a second IFD. All tagged information about the embedded thumbnail is stored in this section.
    COMMENT Comment headers of JPEG images.
    EXIF The EXIF section is a sub section of IFD0. It contains more detailed information about an image. Most of these entries are digital camera related.

    arrays

    Specifies whether or not each section becomes an array. The sections COMPUTED, THUMBNAIL, and COMMENT always become arrays as they may contain values whose names conflict with other sections.

    thumbnail

    When set to TRUE the thumbnail itself is read. Otherwise, only the tagged data is read.



    RETURN VALUE (반환값)


    It returns an associative array where the array indexes are the header names and the array values are the values associated with those headers. If no data can be returned, exif_read_data() will return FALSE.


    Changelog (변경된 점)


    Version Description
    4.3.0 Can read all embedded IFD data including arrays (returned as such). Also the size of an embedded thumbnail is returned in a THUMBNAIL subarray, and can return thumbnails in TIFF format. Also, there is no longer a maximum length for returned values (not until the memory limit has been reached)
    4.3.0 If PHP has mbstring support, the user comment can automatically change encoding. Also, if the user comment uses Unicode or JIS encoding this encoding will automatically be changed according to the exif ini settings in php.ini
    4.3.0 If the image contains any IFD0 data then COMPUTED contains the entry ByteOrderMotorola which is 0 for little-endian (intel) and 1 for big-endian (motorola) byte order. Also, COMPUTED and UserComment no longer only contain the first copyright entry if the datatype was wrong.


    Examples (예제)


    <?php
    echo "test1.jpg:<br />\n"
    ;
    $exif exif_read_data('tests/test1.jpg''IFD0'
    );
    echo 
    $exif===false "No header data found.<br />\n" "Image contains headers<br />\n"
    ;

    $exif exif_read_data('tests/test2.jpg'0true
    );
    echo 
    "test2.jpg:<br />\n"
    ;
    foreach (
    $exif as $key => $section
    ) {
        foreach (
    $section as $name => $val
    ) {
            echo 
    "$key.$name$val<br />\n"
    ;
        }
    }
    ?>

    The first call fails because the image has no header information.

    The above example will output something similar to:

    test1.jpg:
    No header data found.
    test2.jpg:
    FILE.FileName: test2.jpg
    FILE.FileDateTime: 1017666176
    FILE.FileSize: 1240
    FILE.FileType: 2
    FILE.SectionsFound: ANY_TAG, IFD0, THUMBNAIL, COMMENT
    COMPUTED.html: width="1" height="1"
    COMPUTED.Height: 1
    COMPUTED.Width: 1
    COMPUTED.IsColor: 1
    COMPUTED.ByteOrderMotorola: 1
    COMPUTED.UserComment: Exif test image.
    COMPUTED.UserCommentEncoding: ASCII
    COMPUTED.Copyright: Photo (c) M.Boerger, Edited by M.Boerger.
    COMPUTED.Copyright.Photographer: Photo (c) M.Boerger
    COMPUTED.Copyright.Editor: Edited by M.Boerger.
    IFD0.Copyright: Photo (c) M.Boerger
    IFD0.UserComment: ASCII
    THUMBNAIL.JPEGInterchangeFormat: 134
    THUMBNAIL.JPEGInterchangeFormatLength: 523
    COMMENT.0: Comment #1.
    COMMENT.1: Comment #2.
    COMMENT.2: Comment #3end
    THUMBNAIL.JPEGInterchangeFormat: 134
    THUMBNAIL.Thumbnail.Height: 1
    THUMBNAIL.Thumbnail.Height: 1


    exif_tagname

    Description (설명)


    태그명
    http://cvs.php.net/viewvc.cgi/php-src/ext/exif/exif.c?view=markup
    string
    exif_tagname ( int $index )


    Parameters (인수)


    index

    The image index


    Return Values (반환 값)


    Returns the header name, or FALSE if index is undefined.


    See Also (참고)


    exif_imagetype() - Determine the type of an image


    exif_thumbnail

    Description (설명)


    string exif_thumbnail ( string $filename [, int &$width [, int &$height [, int &$imagetype ]]] )

    exif_thumbnail() reads the embedded thumbnail of a TIFF or JPEG image.

    If you want to deliver thumbnails through this function, you should send the mimetype information using the header() function.

    It is possible that exif_thumbnail() cannot create an image but can determine its size. In this case, the return value is FALSE but width and height are set.


    Parameters (인수)


    filename

    The name of the image file being read. This image contains an embedded thumbnail.

    width

    The return width of the returned thumbnail.

    height

    The returned height of the returned thumbnail.

    imagetype

    The returned image type of the returned thumbnail. This is either TIFF or JPEG.


    Return Values (반환 값)


    Returns the embedded thumbnail, or FALSE if the image contains no thumbnail.


    Changelog (변경된 점)


    Version Description
    4.3.0 The optional parameters width , height , and imagetype all became available.
    4.3.0 May return thumbnails in the TIFF format.


    Examples (예제)


    <?php
    if (array_key_exists('file'$_REQUEST
    )) {
        
    $image exif_thumbnail($_REQUEST['file'], $width$height$type
    );
    } else {
        
    $image false
    ;
    }
    if (
    $image!==false
    ) {
        
    header('Content-type: ' .image_type_to_mime_type($type
    ));
        echo 
    $image
    ;
        exit;
    } else {
        
    // no thumbnail available, handle the error here
        
    echo 'No thumbnail available'
    ;
    }
    ?>


    See Also (참고)


  • exif_read_data() - Reads the EXIF headers from JPEG or TIFF
  • image_type_to_mime_type() - Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype

  • read_exif_data

    Description (설명)


    This function is an alias of: exif_read_data().

    저작자 표시 비영리 변경 금지
    신고

    'PHP' 카테고리의 다른 글

    PHP 개발자들을 위한 Flash Builder 4 동영상  (2) 2009.10.29
    PHP로 소켓 서버 작성하기  (0) 2009.10.27
    Exif 함수  (0) 2009.08.24
    Posted by 코멧'★

    티스토리 툴바