주어진 인터넷 호스트 또는 IP 주소, IPv6 에 해당하는 DNS 레코드를 확인하는 소스입니다.

입력값: ipv4, ipv6, 정수, 도메인, 이메일주소로 레코드 값을 확인합니다.


 

<?php
// 정수를 ip 주소로...

// 4294967290는 255.255.255.250임

// 결과: no
if(checkdns_record(4294967290
))
{
    echo 
"yes"
;
}
else
{
    echo 
"no"
;
}


// 결과: no
if(checkdns_record("ffff::"))
{
    echo 
"yes"
;
}
else
{
    echo 
"no"
;
}

// 결과: no
if(checkdns_record("180.10.0.1"
))
{
    echo 
"yes"
;
}
else
{
    echo 
"no"
;
}

// 결과: yes
if(checkdns_record("php.net"
))
{
    echo 
"yes"
;
}
else
{
    echo 
"no"
;
}

// 결과: yes
if(checkdns_record("habony@php.net"
))
{
    echo 
"yes"
;
}
else
{
    echo 
"no"
;
}

// 결과: no
if(checkdns_record("habony@php.po"
))
{
    echo 
"yes"
;
}
else
{
    echo 
"no"
;
}

// 결과: no
if(checkdns_record("land.naver.com"
))
{
    echo 
"yes"
;
}
else
{
    echo 
"no"
;
}


/*
*************************   email 체크   *************************
*/
function email_chk($email
)
{
    if(@
eregi("^[a-z\'0-9]+([._-][a-z\'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+$",$email
))
    {
        if(
strlen($email) <= 320
)
        {
            return 
true
;
        }
        return 
false
;
    }
    return 
false
;
}

/*
*************************   domain 체크   *************************
*/
function domain_chk($haystack
)
{
    if(@
eregi("([a-z0-9]+([._-][a-z0-9]+))+$",$haystack
))
    { 

        
$strlen strlen(substr($haystack0strpos($haystack"."
)));
        if((
$strlen 1) && ($strlen <= 63
))
        {
            if(
extension_doms(substr(strrchr($haystack"."), 1
)))
            {
                return 
true
;
            }
            else
            {
                return 
false
;
            }
        }
        return 
false
;
    }
    return 
false
;
}

/*
*************************   ipv6, ipv4   *************************
*/
function is_ipv6($ip

{
    if(!
preg_match("/^([0-9a-f\.\/:]+)$/",strtolower($ip
))) 
    { 
        return 
false

    } 

    if(
substr_count($ip,":") < 2

    { 
        return 
false

    } 

    
$part preg_split("/[:\/]/"$ip
); 
    foreach(
$part as $i

    {
        if(
strlen($i) > 4

        {
            return 
false
;
        }
    }
    return 
true
;
}

/*
*************************   1차 도메인 체크   *************************
*/
function extension_doms($key
)
{
    if(@
eregi($key,
 
"biz|co|com|cc|eu|jp|in|info|kr|me|mobi|name|net|org|
  pro|so|sx|tel|tv|xxx|ac|ae|ag|am|asia|at|be|bz|ch|cm|cn|
  cx|cz|de|es|eu|fm|fr|gd|gs|hk|hn|ht|im|in|io|jp|ki|la|lc|
  lt|lu|md|mg|mn|ms|mu|mx|nf|nu|nz|pe|ph|pk|pl|sb|sc|sg|sh|si|
  sk|tc|tk|tl|tm|tw|us|uk|vc|vg|ws"
))
    {
        return 
true
;
    }
    return 
false
;
}

/*
*************************   ipv6 dns   *************************
*/
function checkdnsrr6($haystack
)
{
    if(
function_exists("dns_get_record"
))
    {
        
$haystack trim($haystack
);
        
$dnsrr dns_get_record($haystackDNS_AAAA
);
        
$records 
= array();
        foreach(
$dnsrr as $v
)
        {
            if(!empty(
$v['ipv6']) && isset($v['ipv6'
]))
            {
                
$records['chk'] = true
;
                
$records['dns'] = $v['ipv6'
];
                if(
$v['type'] == "AAAA"
)
                {
                    
$records['try'] = true
;
                }
            }
        }
        return 
$records
;
    }
    return 
false
;
}

/*
*************************   레코드 존재 여부 체크   ********************
*/
function checkdns_record($haystack$records="MX"
)
{
    
$haystack trim($haystack
);
    if(empty(
$haystack) && !isset($haystack
))
    {
        return 
false
;
    }

    if(
strpos($haystack"@"
))
    {
        if(!
email_chk($haystack
))
        {
            return 
false
;
        }
        
$haystack substr(strrchr($haystack,"@"), 1
);
    }

    if(
is_numeric($haystack
))
    {
        
$haystack long2_ip($haystack
);
    }

    if(
domain_chk($haystack
))
    {
        
$mx checkdnsrr6($haystack
);
        if(
$mx['chk'] === true
)
        {
            if(
is_ipv6($mx['dns'
]))
            {
                return 
$mx['try'
];
            }
            return 
false
;
        }
    }

    if(
is_ipv6($haystack
))
    {
        return 
false
;
    }

    if(
function_exists('checkdnsrr'
))
    {
        if(
checkdnsrr($haystack$records
))
        {
            return 
true
;
        }
        else
        {
            return 
false
;
        }
    }
    else if(
substr(PHP_OS,0,1) === "W"
)
    {
        if(
checkdnsrw($haystack$records
))
        {
            return 
true
;
        }
        return 
false
;
    }
    else
    {
        return 
false
;
    }
}

function 
checkdnsrw($haystack$records
)
{
    
exec("nslookup -type=${records} ${haystack}"$resource
);
    foreach(
$resource as $record
)
    {
        if(@
eregi("^${haystack}",$record
))
        {
            return 
true
;
        }
    }
    return 
false
;
}

/*
*************************   ip를 정수로...   *************************
*/
function ip2_long($ip
)
{
    if(
is_ipv6($ip) === false
)
    {
        
$ip sprintf("%u",ip2long($ip
));
        if((
$ip 0) || ($ip 4294967295
))
        {
            return 
false
;
        }
        return 
$ip
;
    }
    else
    {
        
$resource inet_pton6($ip
);
        
$i 15
;
        while(
$i >= 0
)
        {
            
$integerip sprintf("%08b",(ord($resource[$i
])));
            
$resourceip $integerip.$resourceip
;
            
$i
--;
        }
        return 
gmp_strval(gmp_init($resourceip,2),10
); 
    }
}

/*
*************************   정수를 ip로...   *************************
*/
function long2_ip($ip
)
{
    if(
$ip 4294967295
)
    {
        return 
long2ip($ip
);
    }
    else
    {
        
$resource gmp_strval(gmp_init($ip,10),2
);
        
$resourcelen strlen($resource
);
        if(
$resourcelen 128
)
        {
            
$pad 128 $resourcelen
;
            for(
$i=1$i<=$pad$i
++)
            {
                
$resource '0'.$resource
;
            }
        }
        
$i 0
;
        while(
$i <= 7
)
        {
            
$resourceip .= 
dechex(bindec(substr($resource,($i*16),16))).":"
;
            
$i
++;
        }
        return 
inet_ntop6(inet_pton6(substr($resourceip,0,-1
)));
    }
}

/*
*************************   inet_pton   *************************
*/
function inet_pton6($ip
)
{
    if(
function_exists('inet_pton'
))
    {
        return 
inet_pton($ip
);
    }
    else
    {
        
$extract explode(":"$ip
);
        
$resource str_pad('', (4*(8-count($extract))), '0000'STR_PAD_LEFT
);
        foreach (
$extract as $val
)
        {
            
$resource .= str_pad($val4'0'STR_PAD_LEFT
);
        }
        return 
pack('H'.strlen($resource), $resource
);
    }
}

/*
*************************   inet_ntop   *************************
*/
function inet_ntop6($ip

{
    if(
function_exists('inet_ntop'
))
    {
        return 
inet_ntop($ip
);
    }
    else
    {
        
$extract explode(':',
          substr(chunk_split(bin2hex($ip),4,':'),0,-1
));
        foreach(
$extract as $val
)
        {
            while(
$val{0} == '0'
)
            {
                
$val substr($val,1
);
            }
            if(
$val != ''
)
            {
                if(
$resource != ''
)
                {
                    
$resource .= ':'
;
                }
                
$resource .= $val
;
            }
            else
            {
                if(
strpos($resource,'::') === false
)
                {
                    if(
substr($resource,-1) == ':'
)
                    {
                        continue;
                    }
                    
$resource .= ':'
;
                    continue;
                }
                if(
$resource != ''
)
                {
                    
$resource .= ':'
;
                }
                
$resource .= '0'
;
            }
        }
    }
    return 
$resource
;
}
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

string php_strip_whitespace ( string $filename ) (PHP 5)

php 파일내 주석과 공백을 제거한 소스를 반환하는 함수입니다.

예제(ex #1
 <?php
 // PHP comment here

 /*
 * Another PHP comment
 */

 echo        php_strip_whitespace(__FILE__
);
 // Newlines are considered whitespace, and are removed too:
 do_nothing
();

 /* 결과: <?php
 echo php_strip_whitespace(__FILE__); do_nothing(); ?>
 */

 ?>

예제(ex #2

 <?php
 echo        php_strip_whitespace(__FILE__
); 
 /**
 * @author Zulfugar Ismayilzadeh
 * @copyright 2011
 */ 
 function count_words($string
){ 
   
$string trim(preg_replace("/\s+/"," ",$string
)); 
   
$word_array explode(" "$string
); 
   
$num count($word_array
); 
   return 
$num

 } 
 $str "Hello fri3nd, you're               looking good today!"

 echo 
count_words($str
); 
 /* 결과: <?php
 echo php_strip_whitespace(__FILE__); function 
 count_words($string){ $string = trim(preg_replace("/\s+/"," ",
$string)); $word_array = explode(" ", $string); $num = count $word_array); return 
$num; } $str = "Hello fri3nd, you're looking good today!";
 echo count_words($str); ?> 
 */
 ?>


주석, 공백을 제거한 php 소스를 새로운 파일에 작성해 보겠습니다. 이렇게 따로 작성해서 배포를 해두면 일반 사용자가 읽기에 어려움이 있어 약간의 보안(?)성이 생기게 됩니다.

예제(ex #3
 <?php
 $fp 
fopen('oldfile.php''w+'
);
 $tmp php_strip_whitespace('newfile.php'
);
 fputs($fp$tmp
);
 fclose
(); 
 ?>
블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

array get_meta_tags ( string $filename [, bool $use_include_path ] ) (PHP 4, PHP 5)

파일에서 <head> 와 </head> 사이의 모든 메타 태그 내용 요소를 추출하여 배열로 반환합니다.

예제(ex #1
 <meta name="author" content="name">
 <meta name="keywords" content="php documentation">
 <meta name="DESCRIPTION" content="a php manual">
 <meta name="geo.position" content="49.33;-86.59">
 </head>

 <?php
 $tags get_meta_tags('http://www.example.com/');

 // 키가 전부 소문자이고, .이 _로 치환되었다는 점에 주의하십시오.
 echo $tags['author'];       
// 결과: name
 echo $tags['keywords'];     
// 결과: php documentation
 echo $tags['description'];  
// 결과: a php manual
 echo $tags['geo_position']; 
// 결과: 49.33;-86.59
 ?>

관련글: 2011/04/12 - 대기중이거나 전송한 응답 헤더(header) 목록을 반환하는 headers_list 함수
           2011/05/05 - HTTP 응답 헤더정보를 배열로 저장하는 $http_response_header변수
블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

출력 버퍼링 출력물이 php에 파싱되어 echo print에 의해 브라우저로 출력되는 방법이 일반적인, 필요에 의해 출력 결과물을 바로 브라우저로 보내지 않고, 내용물을 잠깐 동안 버퍼에 보관해 두었다가 출력이 필요할 곳 이를 사용할 수 있습니다.

이를 사용하기 위애서는 ob_start()함수를 호출하고, ob_end_flush로 버퍼링을 비워주면 되는데, 여기서 비운다는 의미는 버퍼에 저장되어 있는 내용을 브라우저로 출력하고, 버퍼를 비운다는 뜻입니다.

예제 (ex #1
 <?php
 
// 출력 버퍼링을 켭니다.
 
ob_start
();

 
// 출력 결과물을 호출합니다.
 
test
();

 
// 버퍼의 내용을 브라우저로 출력하고, 버퍼링을 비워 줍니다.
 // 그리고 출력 버퍼를 종료합니다.
 
ob_end_flush
();

 function 
test
(){
      echo 
"php 하보니입니다."
;
 }

 
// 결과: php 하보니입니다.
 
?>

출력물을 비우기 전에 변수에 저장하고자 할때는 ob_get_contents를 사용합니다.

예제 (ex #2
 <?php
 
// 출력 버퍼링을 켭니다.
 
ob_start
();

 
// 출력 결과물을 호출합니다.
 
test
();

 
// 출력 버퍼에 저장되어 있는 내용을 변수에 저장합니다.
 
$data ob_get_contents
();

 
// 버퍼의 내용을 브라우저로 출력하고, 버퍼링을 비워 줍니다.
 // 그리고 출력버퍼를 종료합니다.
 
ob_end_flush
();

 function 
test
(){
      echo 
"php 하보니입니다."
;
 }
 echo 
$data
;
 
// 결과: php 하보니입니다.php 하보니입니다.
 
?>

여기서 출력물을 ob_get_contents로 변수에 저장하고, 버퍼의 내용을 브라우저로 출력하지 않고, 그대로 비우길 원한다면, ob_end_clean를 사용하면 됩니다.

예제 (ex #3
 <?php
 
// 출력 버퍼링을 초기화 합니다.
 
ob_start
();

 
// 출력 결과물을 호출합니다.
 
test
();

 
// 출력 버퍼에 저장되어 있는 내용을 변수에 저장합니다.
 
$data ob_get_contents
();

 
// 버퍼의 내용을 브라우저로 출력하지 않고, 그대로 버퍼링을 비웁니다.
 // 그리고 출력버퍼를 종료합니다.
 
ob_end_clean
();

 function 
test
(){
      echo 
"php 하보니입니다."
;
 }
 echo 
$data
// 결과: php 하보니입니다.
 
?>

다음과 같이 사용해도 동일합니다.

예제 (ex #4
 <?php
 
// 출력 버퍼링을 초기화 합니다.
 
ob_start
();

 
// 출력 결과물을 호출합니다.
 
test
();

 
// 출력 버퍼에 저장되어 있는 내용을 변수에 저장하고,
 // 출력 버퍼를 비워 줍니다. 그러나 출력 버퍼는 종료하지 않습니다.
 
$data ob_get_clean
();

 
// 출력 결과물을 다시 호출합니다.
 
test
();

 
// 출력 버퍼에 저장되어 있는 내용을 다시 변수에 저장하고,
 // 출력 버퍼를 비워 줍니다. 그리고 버퍼를 종료합니다.
 
$data .= ob_get_clean
();

 
// 내용물을 출력하지 않고, 출력 버퍼를 비우고 종료합니다.
 
ob_end_clean
();

 function 
test
(){
      echo 
"php 하보니입니다."
;
 }
 echo 
$data
// 결과: php 하보니입니다.php 하보니입니다.
 
?>

다음 표의 함수 설명을 참조하면 도움이 되리라 봅니다.

 // 출력물을 브라우저로 출력하고, 버퍼를 비우고, 종료합니다.
 
ob_end_flush
();

 
// 출력 버퍼를 브라우저로 출력하고, 버퍼를 비웁니다.
 
ob_flush
();

 
// 출력물을 변수에 저장하고, 브라우저로 출력하고,
 // 출력 버퍼를 비우고 종료합니다.
 
ob_get_flush
();




 
// 출력없이 버퍼를 비우고, 종료합니다.
 
ob_end_clean
();

 
// 출력없이 버퍼만 비우고, 종료하지는 않습니다.
 
ob_clean
();

 
// 출력물을 변수에 저장하고, 버퍼를 비우고, 버퍼를 종료합니다.
 
ob_get_clean
();




 
// 출력물을 변수에 저장만 합니다.
 
ob_get_contents();

flush 함수는 출력물을 브라우저로 보내고, 출력 버퍼를 비우는 역할을 하지만, 서버나 클라이언트에 영향을 주지 않습니다.

그래서 ob_flushflush를 모두 호출해야 되는데, 몇몇 브라우저는 버퍼를 비우지 않고, 버퍼를 가지고 지속하는 경우가 있는데, 익스플로러 브라우저의 몇몇 버전은 256바이트를 출력받았을 때만 브라우저로 출력하기 때문에 여분의 공백 256바이트와 함께 실제적인 출력물을 전송하면 됩니다.

넷스케이프는 태그가 종료되거나 태그가 시작할 때까지 버퍼에 담아두는 경우도 있으니 참고하여야 합니다.

예제 (ex #5
 <?php
 
// 출력 버퍼를 호출하고,
 
ob_start
();

 
// 브라우저로 출력하고, 출력물을 비웁니다.
 
ob_flush
();
 
flush
();

 
// 실제적인 출력물을 비워 줍니다.
 
for($i=0;$i<1000;$i
++){
      echo 
str_repeat("\n"256
);
      echo 
'printing...<br />'
;
      
ob_flush
();
      
flush
();

      
ob_clean
();
      
usleep(300000
);
 }

 
// 출력 버퍼를 종료합니다.
 
ob_end_clean
();
 
?>
블로그 이미지

하보니

하보니와 함께하는 phP 초보

Tag flush

댓글을 달아 주세요

object apache_lookup_uri ( string $filename ) (PHP 4, PHP 5)

이 함수는 PHP를 아파치 모듈과 연동하였을 때만 작동합니다. 그리고 주어진 인자에 파일명 (URI)에 대한 정보, 헤더 정보를 다음 표의 값을 Object로 반환합니다.

 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

예제(ex #1

  <?php
 $info 
apache_lookup_uri('index.php?var=value&key=tempo'
);
 
print_r($info
);
 
/*
 결과:
 stdClass Object
 (
    [status] => 200
    [the_request] => GET /test.php HTTP/1.1
    [method] => GET
    [mtime] => 0
    [clength] => 0
    [chunked] => 0
    [content_type] => application/x-httpd-php
    [no_cache] => 0
    [no_local_copy] => 1
    [unparsed_uri] => /index.php?var=value&key=tempo
    [uri] => /index.php
    [filename] => /host/html/index.php
    [args] => var=value&key=tempo
    [allowed] => 0
    [sent_bodyct] => 0
    [bytes_sent] => 0
    [request_time] => 1307537760
 )
 */
 ?>


예제(ex #2
 <?php
 $info 
apache_lookup_uri('test.php'
);
 if(
file_exists($info->filename
)){
      echo 
"실제 존재하는 파일입니다."
;
 }
 
?> 

예제(ex #3
 <?php
 $info 
apache_lookup_uri('test.php'
);
 if(
$info->method === "GET"
){
      echo 
"이 파일은 GET으로 접속하였습니다."
;
 }
 
?> 
블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

void set_time_limit ( int $seconds ) (PHP 4, PHP 5)

자주 사용하지는 않지만 주요한 부분 스크립트에 사용되는 핵심 부품정도로 중요하다 할 수 있습니다. 꼭 알아 둘 필요가 있습니다. 이 함수의 역할은 스크립트 최대 실행 시간을 제어하며, 값이 0이면 시간이 무제한입니다.

스크립트가 실행 가능한 시간을 초 단위로 입력합니다. 설정 시간을 초과할경우 스크립트는 치명적인 오류를 일으킵니다. 기본 제한은 30초로 php.ini 에 정의한 max_execution_time값이며, 만약, max_execution_time를 설정할 수 없는 환경이면 ini_set()함수로 제어할 수 있습니다.

예제 (ex #1

  <?php
 
// php 안전모드에서는 동작하지 않으며,
 // php.ini를 수정할 수 없다면, 
 // max_execution_time 시간을 120초로 늘립니다.
 
ini_set('max_execution_time'120
); 
 
 echo 
ini_get('max_execution_time'); 
// 결과: 120
 
?>

예제 (ex #2
 <?php 
 
// php가 안전모드가 아니라면 25초로 늘립니다. 
 
if( !ini_get('safe_mode'
) ){ 
      
set_time_limit(25
); 
 } 
 
?>

다음은 무한으로 동작합니다. 당연히 서버에 큰 무리가 가겠죠. 그래서 30초내 스크립트가 종료되지 않으면, php오류코드와 함께 스크립트를 강제 종료해 버립니다.
   
예제 (ex #3
 <?php
 $i
=1

 while(
true
){
      echo 
"$i <br />\n"
;
      
$i
++;
 }
 
?>

그래서 다음과 같이 설정하면 300초가 지나서야 스크립트가 종료될 것입니다.
 
예제 (ex #4
 <?php
 $i
=1

 
set_time_limit(300
); 
 while(
true
){
      echo 
"$i <br />\n"
;
      
$i
++;
 }
 
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

array headers_list ( void )
(PHP 5)

headers_list 함수는 브라우저나 클라이언트로 전송한 헤더정보를 반환하는 함수입니다. 헤더가 이미 전송되었다면 목록을 만들어 보여줄 것입니다.

 <?php
 setcookie
('foo''bar'
);

 
header("X-Sample-Test: foo"
);

 
header('Content-type: text/plain'
);

 
print_r(headers_list
());

 
/*
 결과: 
 Array
 (
    [0] => X-Powered-By: PHP/5.2.13
    [1] => Set-Cookie: foo=bar
    [2] => X-Sample-Test: foo
    [3] => Content-type: text/plain
 )
 */
 
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요