Gooday Note Scrap Source Android login
 
작성일 : 11-04-27 11:05
[PHP] Socket 통신
 글쓴이 : 기리 (124.♡.25.162)
조회 : 7,030  
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 121
번호 제   목 글쓴이 날짜 조회
31 [JavaScript] 이미지 드래그 (3) 기리 04-29 2563
30 [Linux] DNS 서버 설정 기리 04-29 2135
29 [JavaScript] 자바스크립트 프로퍼디 기리 04-28 2344
28 [PHP] Socket 통신 (3) 기리 04-27 7031
27 [MySql] 소켓에러 (3) 기리 04-25 7473
26 [PHP] PHP 세션에서 시작, 변수등록, 변수삭제, 부수… 기리 04-22 11072
25 [PHP] Date() 함수 (1) 기리 04-19 2538
24 [MySql] 테이블 변경 - Alter 기리 04-15 3056
23 [JavaScript] Group Radio Check Value 기리 04-07 2427
22 [PHP] foreach 기리 04-07 2505
21 [Html] CSS 속성 기리 04-05 2745
20 [Html] Style 속성 기리 04-05 2839
19 [JavaScript] 알파벳 대소문자 바꾸기, 대문자 소문자 변환… 관리자 04-01 4516
18 [PHP] PHP 문자, 문자열 대소문자 변환 함수, 대문자… 관리자 04-01 3688
17 [Html] HTML 특수 문자 코드 - 기호표 기리 04-01 3196
 1  2  3  4  5  6  7  8  9