독도 광고 모금 캠페인

XML POST 전송

XML 데이터를 POST로 전송받아 처리할때 사용된다

관련된 함수는 $GLOBALS['HTTP_RAW_POST_DATA'] 이녀석이다.
이녀석은 php.ini에서 always_populate_raw_post_data = On 이 되어 있든지
페이지 상단에 ini_set("always_populate_raw_post_data", "true"); 라고 설정을 해줘야 사용할 수 있다.

send.php에서 샘플용 xml 데이터를 만들고 receive.php 페이지로 보낸 다음,
receive.php 페이지는 xml데이터를 받아서 xml 파싱을 한다음 관련 처리를 하면 된다.


send.php

<?php

    /*--------------샘플 XML ---------------
    <?xml version='1.0' encoding='UTF-8' ?>
    <contents>
    <userid>deuxign</userid>
    <point>91035</point>
    </contents>
    --------------------------------------*/

    // XML 데이터 생성 - 페이지 인코딩이 euc-kr이라 iconv로 UTF-8 형식으로 변환
    $member_info_xml  = '<'.chr(63).'xml version="1.0" encoding="UTF-8" '.chr(63).'>'.chr(10);
    $member_info_xml .= '<contents>'.chr(10);
    $member_info_xml .= '<userid>'.iconv('EUC-KR','UTF-8','deuxign').'</userid>'.chr(10);
    $member_info_xml .= '<point>'.iconv('EUC-KR','UTF-8','91035').'</point>'.chr(10);
    $member_info_xml .= '<contents>'.chr(10);


    // fsock으로 POST 전송
    $host = '211.xxx.xxx.xxx'; //'http://www.example.com';
    $path = '/receive.php';
    $xmlData = $member_info_xml;


    // 헤더를 설정해서 POST로 전송
    $fp = fsockopen($host, '80', $errno, $errstr, 30);
    if($fp)
    {

      $header  = "POST ".$path." HTTP/1.1\r\n";
      $header .= "Host: ".$host."\r\n";
      $header .= "User-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n";
      $header .= "Content-type: text/html\r\n";
      $header .= "Content-length: ".strlen($xmlData)."\r\n\r\n";
      $header .= $xmlData."\r\n";

       fputs($fp, $header.$xmlData."\r\n\r\n");

       while(!feof($fp))
      {
           $result .= fgets($fp, 1024);
       }

        fclose($fp);

        echo $result; // 결과를 출력한다.

    }

?>

receive.php

<?php     // raw_post_data 설정
    ini_set("always_populate_raw_post_data", "true");

    // xml 데이터를 받는다
    $receive_xml = $GLOBALS['HTTP_RAW_POST_DATA'];


    /*--------------------------------------
     * XML Parse - simple_XML
    ----------------------------------------*/

    $dom = new DOMDocument;
    $dom->loadXML($receive_xml);

    if (!$dom) {
        echo 'Error while parsing the document';
        exit;
    }

    $XML = simplexml_import_dom($dom);


    /* $XML 은 이런 형태를 가진다.
    SimpleXMLElement Object
    (
     [userid] => deuxign
     [point] => 91035
    )
    */


    // 받은 데이터 처리
    // UTF-8을 euc-kr로 변경
    $userid  = iconv('UTF-8','EUC-KR',$XML->userid);
    $point   = iconv('UTF-8','EUC-KR',$XML->point);

?>


- iconv로 UTF-8로 변경한 이유는 php페이지는 euc-kr이었는데, XML parsing 에 사용된 simple_xml이 UTF-8만 가능하기 때문이다.

이올린에 북마크하기(0) 이올린에 추천하기(0)

'PHP' 카테고리의 다른 글

XML POST 전송  (0) 2008/09/30
리눅스 쉘(shell)에서 php 실행  (0) 2007/11/07
파일 업로드 소스  (0) 2007/05/09
유니코드란 무엇인가?  (0) 2007/01/06
MYSQL DB Character_set 확인  (0) 2006/11/10
숫자만 리턴  (0) 2006/11/06
정규표현식  (0) 2006/10/23
태터이전시 주소리다이렉트  (0) 2006/09/22
파일 내용읽기/저장하기  (0) 2006/05/12
폴더에서 파일 목록 읽어오기  (0) 2006/05/12
정규식 치환  (0) 2006/04/27
Trackback 0 Comment 0

Trackback : http://deuxism.tistory.com/trackback/2694655 관련글 쓰기

prev 1 ... 2 3 4 5 6 7 8 9 10 ... 233 next