Gooday Note Scrap Source Android login
 
작성일 : 11-04-27 11:05
[PHP] Socket 통신
 글쓴이 : 기리 (124.♡.25.162)
조회 : 18,626  
PHP로 소켓 서버 작성하기

기리 11-04-27 11:33
 124.♡.25.162  
* PHP 소켓 통신 예제

http://blog.naver.com/PostView.nhn?blogId=hongjae83&logNo=150107455446

======================================================
기리 11-04-27 11:35
 124.♡.25.162  
* PHP 소켓통신 예제

<?php
//
// Example usage...
//
$server  = '127.0.0.1';
$port    = '80';
$uri    = '/cgi-bin/random-cgi';
$content = 'Your post content...';

$post_results = httpPost($server,$port,$uri,$content);
if (!is_string($post_results)) {
    die('uh oh, something went wrong');
    } else {
    die('Here are your results: ' . $post_results);
    }

//
// Post provided content to an http server and optionally
// convert chunk encoded results.  Returns false on errors,
// result of post on success.  This example only handles http,
// not https.
//
function httpPost($ip=null,$port=80,$uri=null,$content=null) {
    if (empty($ip))        { return false; }
    if (!is_numeric($port)) { return false; }
    if (empty($uri))        { return false; }
    if (empty($content))    { return false; }
    // generate headers in array.
    $t  = array();
    $t[] = 'POST ' . $uri . ' HTTP/1.1';
    $t[] = 'Content-Type: text/html';
    $t[] = 'Host: ' . $ip . ':' . $port;
    $t[] = 'Content-Length: ' . strlen($content);
    $t[] = 'Connection: close';
    $t  = implode("\r\n",$t) . "\r\n\r\n" . $content;
    //
    // Open socket, provide error report vars and timeout of 10
    // seconds.
    //
    $fp  = @fsockopen($ip,$port,$errno,$errstr,10);
    // If we don't have a stream resource, abort.
    if (!(get_resource_type($fp) == 'stream')) { return false; }
    //
    // Send headers and content.
    //
    if (!fwrite($fp,$t)) {
        fclose($fp);
        return false;
        }
    //
    // Read all of response into $rsp and close the socket.
    //
    $rsp = '';
    while(!feof($fp)) { $rsp .= fgets($fp,8192); }
    fclose($fp);
    //
    // Call parseHttpResponse() to return the results.
    //
    return parseHttpResponse($rsp);
    }

//
// Accepts provided http content, checks for a valid http response,
// unchunks if needed, returns http content without headers on
// success, false on any errors.
//
function parseHttpResponse($content=null) {
    if (empty($content)) { return false; }
    // split into array, headers and content.
    $hunks = explode("\r\n\r\n",trim($content));
    if (!is_array($hunks) or count($hunks) < 2) {
        return false;
        }
    $header  = $hunks[count($hunks) - 2];
    $body    = $hunks[count($hunks) - 1];
    $headers = explode("\n",$header);
    unset($hunks);
    unset($header);
    if (!verifyHttpResponse($headers)) { return false; }
    if (in_array('Transfer-Coding: chunked',$headers)) {
        return trim(unchunkHttpResponse($body));
        } else {
        return trim($body);
        }
    }

//
// Validate http responses by checking header.  Expects array of
// headers as argument.  Returns boolean.
//
function validateHttpResponse($headers=null) {
    if (!is_array($headers) or count($headers) < 1) { return false; }
    switch(trim(strtolower($headers[0]))) {
        case 'http/1.0 100 ok':
        case 'http/1.0 200 ok':
        case 'http/1.1 100 ok':
        case 'http/1.1 200 ok':
            return true;
        break;
        }
    return false;
    }

//
// Unchunk http content.  Returns unchunked content on success,
// false on any errors...  Borrows from code posted above by
// jbr at ya-right dot com.
//
function unchunkHttpResponse($str=null) {
    if (!is_string($str) or strlen($str) < 1) { return false; }
    $eol = "\r\n";
    $add = strlen($eol);
    $tmp = $str;
    $str = '';
    do {
        $tmp = ltrim($tmp);
        $pos = strpos($tmp, $eol);
        if ($pos === false) { return false; }
        $len = hexdec(substr($tmp,0,$pos));
        if (!is_numeric($len) or $len < 0) { return false; }
        $str .= substr($tmp, ($pos + $add), $len);
        $tmp  = substr($tmp, ($len + $pos + $add));
        $check = trim($tmp);
        } while(!empty($check));
    unset($tmp);
    return $str;
    }

?>




http://kr.php.net/manual/kr/function.fsockopen.php
기리 11-04-27 16:11
 124.♡.25.162  
* PHP - tcp 소켓 통신을 이용한 HTTP Request

http://fdisk.tistory.com/12
 
 

Total 17
번호 제   목 글쓴이 날짜 조회
17 [PHP] PHP CodeSniffer 기리 10-07 2471
16 [PHP] PHP 웹메일 기리 02-06 5230
15 [PHP] PHP 5.3 버전 DEPRECATED 기리 05-14 8368
14 [PHP] 파일과 관련된 PHP 함수 정리 기리 10-07 3440
13 [PHP] Mobile 기기 확인 기리 08-05 2771
12 [PHP] 파일과 관련된 php함수 기리 08-01 3405
11 [PHP] PHP 소켓통신 (1) 기리 07-07 3464
10 [PHP] Ajax <--> PHP 한글 깨지는 현상 해결 기리 05-26 3846
9 [PHP] Socket 통신 (3) 기리 04-27 18627
8 [PHP] PHP 세션에서 시작, 변수등록, 변수삭제, 부수… 기리 04-22 11304
7 [PHP] Date() 함수 (1) 기리 04-19 3459
6 [PHP] foreach 기리 04-07 2625
5 [PHP] PHP 문자, 문자열 대소문자 변환 함수, 대문자… 관리자 04-01 3976
4 [PHP] 접속 정보 확인 기리 03-31 3310
3 [PHP] php (7) 관리자 06-23 5455
 1  2