'phP 함수 레퍼런스/함수 활용/응용'에 해당되는 글 48건

CURL에서는 POST 로 문자열이나 배열을 전송하면 상대 측에서 값을 받을 수 있습니다. 

 

 

 $_POST['name'] ='하보니';
 $_POST['email'] = 'habony@example.com';

 curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);

 

 

하지만 중첩된 배열을 전송하게 되면 어떤 문제가 발생하게 되는데, CURL에서 중첩된 배열을 전송하면 우리가 예상했던거와는 다르게 Array 라는 문자열이 전송됩니다.

 

그래서 이러한 문제를 해결하기 위해 http_build_query() 함수를 이용하거나 아래 사용자 함수를 만들어 원하는 값을 전송할 수 있습니다.

 

 

 function Curl_Postfields_Create($input, $prefix = '') {
  if(!is_array($input)) {
    return $input;
  }

  $output = array();
  foreach($input as $key => $value) {
    $final_key = $prefix ? $prefix[$key] : $key;
    if(is_array($value)) {
      $output += Curl_Postfields_Create($value, $final_key);
    } else {
      $output[$final_key] = $value;
    }
  }
  return $output;
 }

 

 $_POST['name'] = '하보니';

 $_POST['email'] = 'habony@emample.com';

 $_POST['type']['file']['name'] = 'habonyphp.bmp';

 $_POST['type']['mime'] = 'bmp';

 $output = Curl_Postfields_Create($_POST);

 

 curl_setopt($ch, CURLOPT_POSTFIELDS, $output);

 

 

CURL에서 단순한 배열 또는 문자열이 아니면 올바로 전송할 수 없으므로 중첩된 배열을 분해해서 단순한 문지열로 변환한 후 전송하는 방법입니다.

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

CURL 를 통해 데이터를 주고받으면 동일한 도메인이라도 세션을 공유할 수 없습니다. 이를 해결하기위해 상대 도메인에 브라우저의 쿠키 정보를 함께 전송해주면 공유가 가능하게 됩니다.

 

 function curl_trans_ssid( $query )
 {
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, BIRD_API_URL);
   curl_setopt($ch, CURLOPT_POST, true);
   curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_COOKIE, 
              session_name() . '=' . session_id()
   );

   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  

   $data = curl_exec($ch);
   curl_close($ch);

   return $data;

 }

 $query = array(
   'user_id' => 'habony',
   'user_pw' => '123456789'
 );
 $result = curl_trans_ssid($query);

 echo $result . " 님 로그인 성공하셨습니다.";

 

참고로 정상적으로 세션을 만들었다하더라도  CURL 로 요청할 때 마다 브라우저의 쿠키정보를 매번 전송해주어야 유지가 되며 세션을 삭제할  때는 클라이언트 측 브라우저에서 세션을 삭제합니다.

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

아래 배열의 형태라면 트리형태로 출력하고자 할 때 유용합니다.
특히 답글 형태 게시판에서 사용할 수 있습니다.


 $list = array(

  array('idx' => 1,  'parent_id' => 0),

  array('idx' => 2,  'parent_id' => 0),

  array('idx' => 3,  'parent_id' => 0),

  array('idx' => 4,  'parent_id' => 0),

  array('idx' => 5,  'parent_id' => 0),

  array('idx' => 6,  'parent_id' => 2),

  array('idx' => 7,  'parent_id' => 2),

  array('idx' => 8,  'parent_id' => 3),

  array('idx' => 9,  'parent_id' => 4),

  array('idx' => 10, 'parent_id' => 9)

 );

 $atr = Categories($list, 'idx');

 print_r($atr);


ex.1)

function Categories(
$atr, $id = 'id', 
$parent_id = 'parent_id', 
$children = 'children')
{
  $nlist = array(
    array( $children => array() )
  );
  $raw = array(&$nlist[0]);

  if(isset($atr))
  {
    foreach($atr as $q => $w)
    {
      $raw[$w[$parent_id]][$children][$w[$id]] = $w;
      $raw[$w[$id]] = 
          &$raw[$w[$parent_id]][$children][$w[$id]];
    }
  }

  if(is_array($raw[$atr[0][$parent_id]][$children]))
  {
    return ($raw[$atr[0][$parent_id]][$children]
           + $nlist[0][$children]);
  }

return $nlist[0][$children];
}

/* 
Categories( atr, id, parent_id);
  atr 인수: 정렬할 배열
  id 인수: 선택. 기본 값 : id
  parent_id 인수: 선택. 기본 값 : parent_id
  children 인수: 선택. 기본 값 : children
  반환 값: TREE 로 정렬한 배열
*/


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

서버의 상태가 느린지 다운되었는지 등을 체크하기 위해 보통 ping을 이용합니다.

서버 응답이 없으면 -1를 반환하고 응답이 있으면 지연율을 반환합니다.


 <?php

 function pingDomain($domain)

 {

    $starttime = microtime(true);

    $file      = fsockopen ($domain, 80, $errno, $errstr, 10);

    $stoptime  = microtime(true);

    $status    = 0;


    if(!$file)

    {

        $status = -1;

    }

    else

    {

        fclose($file);

        $status = ($stoptime - $starttime) * 1000;

        $status = floor($status);

    }

    return $status . ' ms';

 }



 print_r(pingDomain('habonyphp.com'));

 // 결과 : 829 ms

 ?>

출처: http://stackoverflow.com/questions/9841635/how-can-i-ping-a-server-port-with-php


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

순서 없는 재귀적 파일(또는 폴더) 목록을 배열로 저장하는 사용자 함수입니다.

Categories_Tree_File( directory, f );


directory 인수: 배열로 저장할 폴더 이름

f 인수: 임의의 값을 지정하면 파일을 배열로 저장합니다.

; 반환 값: 재귀적 파일(또는 폴더) 배열 목록

; key 값 끝에 / 가 붙으면 폴더를 의미하고,
      숫자 key 이면 value 값에 파일 이름을 저장합니다.
; count 변수에 파일 개수가 저장됩니다.


 <?php
function Categories_Tree_File($directory$f null)
{
    
$raw = array();     $directory preg_replace(array("@[\.]+@""@[/]+@", ),  array(".""/"), $directory);     if(substr($directory, -1) === '/')     {         $directory substr($directory0, -1);     }     if(is_dir($directory))     {         $count 1;         clearstatcache();         foreach(@scandir($directory) as $node)         {             if( ($node !== ".") && ($node !== "..") )             {                 if(is_file($directory '/' $node))                 {                     clearstatcache();                     if($f)                     {                         $raw[] = rawurlencode($node);                    }                     $raw['count'] = $count++;
                    continue;                 }                 
$raw[rawurlencode($node) . '/'] =  Categories_Tree_File($directory '/' $node$f);             }         }     }     return $raw; } /*     ex.)     $atr = Categories_Tree_File( './example', true );     print_r($atr);     결과 :     Array     (         [0] => README.txt         [1] => add.htm         [2] => add_dir.htm         [3] => bbs_mysql         [4] => bbsdir_mysql         [count] => 5         [file/] => Array             (                 [5/] => Array                     (                         [0] => addfind.gif                         [count] => 1                     )                 [8/] => Array                     (                         [0] => write.gif                         [count] => 1                     )             )        } */ ?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

일반 배열을 카테고리 및 하위 카테고리 형태로 구현한 소스입니다.

 <?php
 $list = array(
        array(
'idx' => 1,  'parent_id' => 0),
        array(
'idx' => 2,  'parent_id' => 0),
        array(
'idx' => 3,  'parent_id' => 0),
        array(
'idx' => 4,  'parent_id' => 0),
        array(
'idx' => 5,  'parent_id' => 0),
        array(
'idx' => 6,  'parent_id' => 2),
        array(
'idx' => 7,  'parent_id' => 2),
        array(
'idx' => 8,  'parent_id' => 3),
        array(
'idx' => 9,  'parent_id' => 4),
        array(
'idx' => 10'parent_id' => 9)
 );
$tree Tree_Array($list'idx''parent_id');
print_r($tree);

function 
Tree_Array($atr$id='id'$parent_id='parent'$children='children')
{
    
$nlist = array(
        array( 
$children => array() )
    );
    
$raw = array(&$nlist[0]);
    if(isset(
$atr))
    {
        foreach(
$atr as $q => $w)
        {
            
$raw[$w[$parent_id]][$children][$w[$id]] = $w;
            
$raw[$w[$id]] = &$raw[$w[$parent_id]][$children][$w[$id]];
        }
    }
    return 
$nlist[0][$children];
}
/*
결과:
Array
(
    [1] => Array
        (
            [idx] => 1
            [parent_id] => 0
        )
    [2] => Array
        (
            [idx] => 2
            [parent_id] => 0
            [children] => Array
                (
                    [6] => Array
                        (
                            [idx] => 6
                            [parent_id] => 2
                        )
                    [7] => Array
                        (
                            [idx] => 7
                            [parent_id] => 2
                        )
                )
        )
    [3] => Array
        (
            [idx] => 3
            [parent_id] => 0
            [children] => Array
                (
                    [8] => Array
                        (
                            [idx] => 8
                            [parent_id] => 3
                        )
                )
        )
    [4] => Array
        (
            [idx] => 4
            [parent_id] => 0
            [children] => Array
                (
                    [9] => Array
                        (
                            [idx] => 9
                            [parent_id] => 4
                            [children] => Array
                                (
                                    [10] => Array
                                        (
                                            [idx] => 10
                                            [parent_id] => 9
                                        )
                                )
                        )
                )
        )
    [5] => Array
        (
            [idx] => 5
            [parent_id] => 0
        )
)
*/
?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

아래 예는 폴더 내의 내용을 재귀적으로 배열로 만들어 반환하는 사용자 함수입니다.


폴더이면 key 값의 끝에 / 가 붙고, 숫자 key 이면 value 값에 파일 이름이 저장한 재귀적 배열을 반환합니다.


$f 인수에 임의의 값을 지정하면 파일도 배열에 저장합니다.


 <?php
 function file_dir($dir$f null)
 {
    $raw = array();

   $dirpreg_replace(
array("@[\.]+@""@[/]+@"), array(".""/"), trim($dir)
);    if(substr($dir, -1) === '/')    {      $dirsubstr($dir0, -1);    }
   if(
is_dir($dir))    {      clearstatcache();      foreach(@scandir($dir) as $node)      {        if( ($node !== ".") && ($node !== "..") )        {           if(is_file($dir'/' $node))           {              clearstatcache();              if($f)              {                 $raw[] = rawurlencode($node);              }              continue;           }      $raw[rawurlencode($node) . '/'] = 
file_dir($dir'/' $node$f);       }     }   }     return $raw; }
$row file_dir('..../dirbbs/////'true); print_r($row); /* 결과 : Array (     [0] => README.txt     [1] => add.htm     [2] => add_dir.htm     [3] => bbs_mysql     [4] => bbsdir_mysql     [5] => config.inc     [6] => dberror.htm     [7] => delete.htm     [8] => delete_dir.htm     [9] => detail.htm     [file/] => Array         (             [5/] => Array                 (                     [0] => addfind.gif                 )             [8/] => Array                 (                     [0] => write.gif                 )         )
.... } */ ?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

ipv4 주소 형식은 255.255.255.255 또는 255.255.255.255/0 ~ 32 이면 true, 아니면 false 입니다.


ex.1)

 function ipv4_check($block)
 {
    if(preg_match('@^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)((?:(?:/(?:3[0-2]|2[0-9]|1[0-9]|[0-9])))?)$@'$block) && (preg_last_error() === PREG_NO_ERROR))
 {
    return true;

 }
    return 
false;
}
echo 
ipv4_check("127.0.0.1"); // true
 echo ipv4_check("127.0.0.1/32"); // true

echo ipv4_check("127.0.0.256"); // false
echo ipv4_check("127.0.0.1/33"); // false


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

http://openovate.com 에서 제공하는 PHP 라이브러리를 이용하면 페이스북이나 트위터, 페이팔, 구글, 아마존 등 인증 API 를 쉽게 구현할 수 있습니다.


아래는 페이스북 활용의 예입니다.


 <?php

 include ('eden.php');
 session_start();

// 페이스북 애플리케이션 ID
$FACEBOOK_KEY '';
// 페이스북 애플리케이션 비밀번호
$FACEBOOK_SECRET '';
// 페이스북 인증 후에 되돌아갈 콜백 URL
$FACEBOOK_CALLBACK_UTL 'http://example.com/login/';
$auth eden('facebook')->auth(
$FACEBOOK_KEY$FACEBOOK_SECRET$FACEBOOK_CALLBACK_UTL );

if(!isset($_GET['code']) && !isset($_SESSION['fb_token'])) {
    
$login $auth->getLoginUrl();
    
header('Location: '.$login);
    exit;
}
if(isset(
$_GET['code'])) {
    
$access $auth->getAccess($_GET['code']);
    
$_SESSION['fb_token'] = $access['access_token'];
}
?>

파일 다운로드 :  eden.php

다운로드 링크 : http://eden.openovate.com/download
메뉴얼 링크 : http://eden.openovate.com/documentation/start


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

img 태그에 이미지 파일을 연결하는 방법이 가장 기본적이지만 여기서 소개하는 방법은 이미지 파일을 base64 로 인코딩한 텍스트 문자로 img 태그에 적용하는 것입니다.


방법은 src 에 이미지 파일 경로를 지정하는 대신에 data:// 를 설정해서 이미지를 표현하는데, 문자열은 text/plan 이고, base64 로 인코딩되어 있음을 지정합니다.


 <img src="data:image/gif;base64, ...>

ex .1)

<?php  
 $data 
base64_encode(file_get_contents("test.png")); 
 echo 
"<img src='data:image/gif;base64, $data'>"
?>


위 예제와 같이 이미지 파일을 base64 로 인코딩하면 아래 결과에서 처럼 텍스트 문자를 얻을 수 있고, 브라우저에서는 그림으로 출력되게 됩니다.


 <img src="data:image/gif;base64, R0lGODlhZABkAPQAAP///wAAAI6OjmhoaDY2Njw8

PFxcXBwcHBISEiwsLFRUVExMTH5+foaGhiQkJAAAAHZ2dkRERAoKCgAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH+GkNyZWF0ZWQgd2l0aCBha

F4bG9hZC5pbmZvACH5BAAHAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAA....">


결과:


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요



다이렉트로 SSL 소켓 접속의 예입니다.

 <?php 
 // note that "ssl" is the protocol, NOT "https" 
 $hostname  "ssl://your-secure-site.com"
 $port      443

 // create and configure the client socket 
 $fp fsockopen($hostname$port); 
 if (
$fp) { 
    
stream_set_timeout($fp30); 
     
  
// send data (or build HTTPS headers similar to first example) 
  
fwrite($fp"your message goes here"); 
     
    
// read response 
    
while (!feof($fp)) { 
        echo 
fgets($fp128); 
    } 
     
    
// close the socket 
    
fclose($fp); 
 } 
 ?>


다음은 HTTP 소켓 접속의 방법입니다.


 <?php 
 // don't need to specify http, it's the default protocol 
 $hostname "www.google.com"
 $port     80

 // create and configure the client socket 
 $fp fsockopen($hostname$port); 
 // optional: $error_number, $error_string, $connect_timeout 

 if (
$fp) { 

    // seconds to wait for i/o operations 
    
stream_set_timeout($fp30);
     
    // send request headers 
    
fwrite($fp"GET / HTTP/1.1\r\n"); 
    
fwrite($fp"Host: $hostname\r\n");


    // Accept, User-Agent, Referer, etc.  
    
fwrite($fp$additional_headers); 

    
fwrite($fp"Connection: close\r\n"); 
     
    
// read response 
  
$response ""
    while (!
feof($fp)) { 
        
$response .= fgets($fp128); 
    } 
  echo 
$response
     
    
// close the socket 
    
fclose($fp); 
 } 
 ?>


출처: http://arguments.callee.info/2009/02/10/http-https-and-ssl-via-php/


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

php 로 함수 오버로딩를 만들 수 있습니다.

이미 알려진 방법이지만 어려운 방법도 아닙니다.


 <?php 
 function overloading() 
 { 
    
$raw = array(); 
    
$size func_num_args(); 
    for(
$i=0$i<$size$i++) 
    { 
        
$raw[] = func_get_arg($i); 
    } 
    
print_r($raw); 
 } 


 overloading('hello','world','foobar'); 
 /* 
 결과: 
 Array 
 ( 
    [0] => hello 
    [1] => world 
    [2] => foobar 
 ) 
 */ 
 ?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

HTTP 로 접속한 사용자를 HTTPS 로 redirect 시키거나 HTTPS 로 접속한 사용자를 HTTP 로 redirect 처리하는 함수입니다.


 <?php

 function https_redirect($ssl=false
 { 
    
$https = array( 
        
'HTTP_X_FORWARDED_PROTO' => 'HTTPS'
        
'HTTP_X_SSL' => 'ON'
        
'HTTPS' => 'ON'
        
'SSL' => 'ON' 
    
); 

    
$protocol 'https://'
    foreach(
$https as $q=>$w
    { 
        if(
strtoupper($_SERVER[$q]) === $w
        { 
            
$protocol false
            break; 
        } 
    } 

    if(
$ssl === true
    { 
        
$protocol = (false === $protocol) ? 'http://' false
    } 

    if(
false !== $protocol
    { 
        
header('HTTP/1.0 301 Moved Permanently'); 
        
header('Location: ' $protocol 

                          $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 
        die(); 
    } 
 } 

 // http 사용자를 https 로 redirect 처리 예제 
 https_redirect();


 // https 사용자를 http 로 redirect 처리 예제 

 https_redirect(true);  

 ?>


관련글: 2014/08/25 - [php] http 로 접속시 SSL(https) 로 redirect 시키기


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

다음은 cURL 를 이용해 HTTPS 로 접속해서 데이터를 받아오는 소스입니다.

HTTPS 로 접속하는 방법은 조금만 이해한다면 그리 어려운 부분은 아닙니다.


 <?php 
 $url 
'https://example.com/test'

 // POST 로 넘길 데이터가 있을 경우 작성합니다.
 $postfields = array( 
    
'Username'=>'habony'
    
'Password'=>'123456'
    
'Submit'=>'전송' 
 ); 


 $ch curl_init(); 
 curl_setopt($chCURLOPT_URL$url); 

 curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE); 
 curl_setopt($chCURLOPT_SSL_VERIFYHOST0); 

 curl_setopt($chCURLOPT_HEADER0); 
 curl_setopt($chCURLOPT_USERAGENT

                         $_SERVER['HTTP_USER_AGENT']); 
 curl_setopt($chCURLOPT_RETURNTRANSFER1); 
 curl_setopt($chCURLOPT_POST1); 
 curl_setopt($chCURLOPT_POSTFIELDS$postfields); 

 $data curl_exec($ch); 
 if (
curl_error($ch))  
 { 
    exit(
'CURL Error('.curl_errno$ch ).') '.

                                        curl_error($ch)); 
 } 
 curl_close($ch); 

 print_r($data); 

 ?>



블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

바이너리(또는 TEXT 파일)을 php 파일로 변환하는 함수


 <?php 
 function bin2php($input_file$output_file){ 
  
    
$i file_get_contents($input_file); 
  
    
$b = array(); 
    
$x 0$y 0
  
    for (
$c=0$c strlen($i); $c++){ 
        
$no bin2hex($i[$c]); 
        
$b[$x] = isset($b[$x]) ? $b[$x].'\\x'.$no '\\x'.$no
        if (
$y >= 10){  
            
$x++; $y 0
        } 
        
$y++; 
    } 
  
    
$output "<"."?php\n"
    
$output .= "\$f=\""
    
$output .= implode("\";\r\n\$f.=\""$b); 
    
$output .= "\";\nprint \$f;"
    
$output .= "\n?>"
  
    
$fp fopen($output_file'w+'); 
    
fwrite($fp$output); 
    
fclose($fp); 
 } 

 bin2php('test.png''test.php'); 
 /* 
 출력: 
 <?php 
 $f="\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00"; 
 $f.="\x0d\x49\x48\x44\x52\x00\x00\x00\x60\x00"; 
 $f.="\x00\x00\x14\x08\x02\x00\x00\x00\xfd\x49"; 
 $f.="\xaf\xb8\x00\x00\x00\x09\x70\x48\x59\x73"; 
 $f.="\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00"; 
 .... 
 ?>

 */
 ?>


출처: http://www.jonasjohn.de/snippets/php/bin2php.htm


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

파일에 내용을 쓸 때 탭 구분해서 작성하면 CSV 파일 등과 같은 곳에서 유용하게 사용할 수 있습니다.


 <?php 
 function write_tabbed_file($filepath$array
                                          $save_keys=false
 { 
    
$content ''
  
    
reset($array); 
    while(list(
$key$val) = each($array)) 
    { 
        
// replace tabs in keys and values to [space] 
        
$key str_replace("\t"" "$key); 
        
$val str_replace("\t"" "$val); 
  
        if (
$save_keys){ $content .=  $key."\t"; } 
  
        
// create line: 
        
$content .= (is_array($val)) ? 
implode("\t"$val) : $val
        
$content .= "\n"
    } 
  
    if (
file_exists($filepath) && !is_writeable($filepath)) 
    {  
        return 
false
    } 
    if (
$fp fopen($filepath'w+')) 
    { 
        
fwrite($fp$content); 
        
fclose($fp); 
    } 
    else { return 
false; } 
    return 
true
 } 
  
 // 
 // load a tab seperated text file as array 
 // 
 function load_tabbed_file($filepath$load_keys=false
 { 
    
$array = array(); 
  
    if (!
file_exists($filepath)){ return $array; } 
    
$content file($filepath); 
  
    for (
$x=0$x count($content); $x++) 
    { 
        if (
trim($content[$x]) != ''
        { 
            
$line explode("\t"trim($content[$x])); 
            if (
$load_keys
            { 
                
$key array_shift($line); 
                
$array[$key] = $line
            } 
            else { 
$array[] = $line; } 
        } 
    } 
    return 
$array
 } 
  
 /* 
 ** Example usage: 
 */ 
  
 $array = array( 
    
'line1'  => array('data-1-1''data-1-2''data-1-3'), 
    
'line2' => array('data-2-1''data-2-2''data-2-3'), 
    
'line3'  => array('data-3-1''data-3-2''data-3-3'), 
    
'line4' => 'foobar'
    
'line5' => 'hello world' 
 ); 
  
 // save the array to the data.txt file: 
 write_tabbed_file('data.txt'$arraytrue); 
  
 /* the data.txt content looks like this: 
 line1    data-1-1    data-1-2    data-1-3 
 line2    data-2-1    data-2-2    data-2-3 
 line3    data-3-1    data-3-2    data-3-3 
 line4    foobar 
 line5    hello world 
 */ 
  
 // load the saved array: 
 $reloaded_array load_tabbed_file('data.txt',true); 
  
 print_r($reloaded_array); 
 // returns the array from above 
 ?>

출처: http://www.jonasjohn.de/snippets/php/read-and-write-tab-files.htm


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

파일을 업로드하면 간혹 임시파일이 그대로 남아 있는 경우가 있습니다. 일정 시간이 흐른 임시파일을 강제로 삭제하는 소스입니다.


삭제할 임시 파일 확장자는 기본 *.tmp, 만료는 10분입니다.


 <?php 
 $tmpName 
sys_get_temp_dir() . '/'

 // 삭제할 파일 확장자 
 $ext '*.tmp'

 // 만료일 10분 
 $expire 10

 foreach (
glob($tmpName $ext) as $raw
 { 
    if (
time() - filectime($raw) > ($expire 60)) 
    { 
        
unlink($raw); 
        echo 
"\"$raw\" 파일 삭제 완료!<br />\n"
    } 
 } 
 ?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

임시 리디렉션 (상태코드 : 302)


이 방식은 흔히 사용되는 방법입니다.


  <?php 

 function Location_redirect($url)  
 

    
if (!headers_sent()) 
    { 

        
header('Location: http://$url); 

        header("Connection: close"); 
    } 
    print 
"<html>\n<body>\n";  
    print 
"<script>document.location.replace('http://$url "');</script>";  


    print 
"\n<br />\n<br />\n";  
    print 
"페이지 이동이 되지 않는 경우 <a href='http://$url "'>여기</a>를 클릭하여 주십시오."

    print "\n</body>\n</html>";  

    die();
 }  

 
Location_redirect("habonyphp.com");  
 ?>


영구 리디렉션(상태코드: 301)


페이지를 영구적으로 리디렉션 시키는 방법을 말합니다.  이 방법은 .htaccess 로만 구현 가능한 방법이 아니며 유명한 스크립트에서 자주 사용되는 방법이기도 합니다.


 <?php 

 function Permanent_redirect($url
 { 
    if (!
headers_sent()) 
    { 
        
header('HTTP/1.1 301 Moved Permanently'); 
        
header('Location: http://$url); 

        header("Connection: close"); 
    } 

    print 
"<html>\n<body>\n"
    print 
"<script>document.location.replace('http://$url "');</script>"


    print 
"\n<br />\n<br />\n"

    print "페이지 이동이 되지 않는 경우 <a href='http://$url "'>여기</a>를 클릭하여 주십시오.";

    print "\n</body>\n</html>"


    die(); 
 } 

 Permanent_redirect("habonyphp.com"); 
 ?>



조건부 리디렉션


다음은 조건부 리디렉션입니다. 같은 도메인에서 페이지가 변경된 경우 변경된 페이지로 영구히 이동시키는 방법입니다.


  <?php 

 function Conditional_redirect($url, $parse)  
 {

    if(
strpos($_SERVER['HTTP_REFERER']$url)!== false
    { 
        if (!
headers_sent()) 
        { 
            
header("HTTP/1.1 301 Moved Permanently"); 
            
header("Location: http://$url "/" $parse); 

            header("Connection: close"); 
        } 
        print 
"<html>\n<body>\n";  
        print 
"<script>document.location.replace(

          'http://$url "/" $parse . "'

        );</script>";  


        print 
"\n<br />\n<br />\n";  
        print 
"페이지 이동이 되지 않는 경우 

          <a href='http://$url "/" $parse . "'>여기</a>

       를 클릭하여 주십시오."

        print "\n</body>\n</html>";  

        die();  
    } 
 }  

 
Conditional_redirect("habonyphp.com", "news.php");  

 ?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

<?php 
function mb_str_pad($input$length$padStr ' '$type=STR_PAD_RIGHT){ 
     
  
$inputLen = mb_strlen($input); 
  if (
$length <= $inputLen) { 
    return 
$input
  } 
     
  
$padStrLen mb_strlen($padStr); 
  
$padLen $length $inputLen
     
  if (
$type == STR_PAD_RIGHT) { 
    
$repeatTimes ceil($padLen $padStrLen); 
    return 
mb_substr($input.str_repeat($padStr,$repeatTimes),0,$length); 
  } 
     
  if (
$type == STR_PAD_LEFT) { 
    
$repeatTimes ceil($padLen $padStrLen); 
    
$repeat str_repeat($padStr$repeatTimes); 
    return 
mb_substr($repeat0floor($padLen)).$input
  } 
     
  if (
$type == STR_PAD_BOTH) { 
         
    
$padLen /= 2
    
$padAmountLeft floor($padLen); 
    
$padAmountRight ceil($padLen); 
    
$repeatTimesLeft ceil($padAmountLeft $padStrLen); 
    
$repeatTimesRight ceil($padAmountRight $padStrLen); 
         
    
$repeat_left str_repeat($padStr$repeatTimesLeft); 
    
$paddingLeft mb_substr($repeat_left0$padAmountLeft); 

    
$repeat_right str_repeat($padStr$repeatTimesRight); 
    
$paddingRight mb_substr($repeat_right0$padAmountLeft); 
    return 
$paddingLeft $input $paddingRight
  } 
  return 
false

?>


출처: http://www.phpwact.org


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

UTF-8 문자열에서 첫 번째 문자만 대문자로 변경하는 함수입니다.


<?php 
function ucwords_callback($matches) { 
  
$ucword mb_substr_replace(ltrim($matches[0]),mb_strtoupper($matches[3]),0,1);


  return 
$matches[2] . $ucword; 
}

function 
mb_substr_replace($str$replacement$start $length=false ) {  
  
preg_match_all('/./us'$str$match1);  
  
preg_match_all('/./us'$replacement$match2);  

  if( 
$length === false ) {  
    
$length mb_strlen($str);  
  }  
  
array_splice($match1[0], $start$length$match2[0]);  
  return 
join(''$match1[0]);  
} 

$str 
'tχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός'; 
$pattern 
'/(^|([\x0c\x09\x0b\x0a\x0d\x20]+))([^\x0c\x09\x0b\x0a\x0d\x20]{1})[^\x0c\x09\x0b\x0a\x0d\x20]*/u'; 


echo 
preg_replace_callback($pattern'ucwords_callback'$str); 
// 출력: Tχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός 
?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

UTF-8 문자열의 공백을 제거할 때 유용합니다.


<?php
function utf8_trim($pattern$str){
 
$pattern preg_replace('!([\\\\\\-\\]\\[/^])!''\\\${1}'$pattern); 

 
// 왼쪽 공백 제거 
 
$str preg_replace('/^[' $pattern ']+/u'''$str); 

 
// 오른쪽 공백 제거 
 
return preg_replace('/[' $pattern ']+$/u'''$str); 
} 

echo 
utf8_trim("\x00..\x1F""하보니 php"); 
?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

다음과 같은 엑셀 서식으로 다운로드 파일로 구현한 예입니다.


ex #1)

 <?PHP
  
// Original PHP code by Chirp같은 Internet: www.chirp.com.au
  // Please acknowledge use of this code by including.

  
$data = array(
    array(
       "firstname" => "Mary",

       "lastname" => "Johnson",
       
"age" => 25),
    array(

       "firstname" => "Amanda"

       "lastname" => "Miller"

       "age" => 18),
    array(

       "firstname" => "James"

       "lastname" => "Brown"

       "age" => 31),
    array(

       "firstname" => "Patricia"

       "lastname" => "Williams",

       "age" => 7),
    array(

       "firstname" => "Michael"

       "lastname" => "Davis"

       "age" => 43),
    array(

       "firstname" => "Sarah"

       "lastname" => "Miller"

       "age" => 24),
    array(

       "firstname" => "Patrick"

       "lastname" => "Miller"

       "age" => 27)
  );

  
$colnames = array(
     
'firstname' => "First name",
     
'lastname' => "Last name",
     
'age' => "Age",
  );

  function 
map_colnames($input)
  {
    global 
$colnames;
    return isset(
$colnames[$input])?$colnames[$input] : $input;
  }

  function 
cleanData(&$str)
  {
    if(
$str == 't'$str 'TRUE';
    if(
$str == 'f'$str 'FALSE';
    if(
preg_match("/^0/"$str)

       || preg_match("/^\+\d{8,}$/"$str)

       || preg_match("/^\d{4}.\d{1,2}.\d{1,2}/"$str)) {

      $str "'$str";
    }
    if(
strstr($str'"')) 

      $str '"' str_replace('"''""'$str) . '"';
  }

  
// filename for download
  
$filename "website_data_" date('Ymd') . ".csv";

  
header("Content-Disposition: attachment; filename=\"$filename\"");
  
header("Content-Type: text/csv");

  
$out fopen("php://output"'w');

  
$flag false;
  foreach(
$data as $row) {
    if(!
$flag) {
      
// display field/column names as first row
      
$firstline array_map("map_colnames"array_keys($row));
      
fputcsv($out$firstline',''"');
      
$flag true;
    }
    
array_walk($row'cleanData');
    
fputcsv($outarray_values($row), ',''"');
  }

  
fclose($out);
  exit;
?>


출처: http://www.the-art-of-web.com/php/dataexport/



블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

ex #1)

 <?php 
 $redirect_domain 
'www.yoursite.com'

 if (isset($_SERVER['PANTHEON_ENVIRONMENT']) 

&& $_SERVER['PANTHEON_ENVIRONMENT'] == 'live') { 

  $redirect_location ''
  
// Check if SSL is enabled. 
  
if (isset($_SERVER['HTTP_X_SSL']) 

&& $_SERVER['HTTP_X_SSL'] == 'ON') { 
     
$redirect_location 'http://' 

$redirect_domain $_SERVER['REQUEST_URI']; 
  } 
  
// Require SSL for everything else. 
  
else if (!isset($_SERVER['HTTP_X_SSL']) 

|| $_SERVER['HTTP_X_SSL'] != 'ON') { 
    
$redirect_location 'https://' 

$redirect_domain $_SERVER['REQUEST_URI']; 
  } 

  
// Perform redirect. 
  
if ($redirect_location) { 
    
header('HTTP/1.0 301 Moved Permanently'); 
    
header('Location: ' $redirect_location); 
    exit; 
  } 
 } 
 ?>


출처: http://helpdesk.getpantheon.com/customer/portal/articles/368354-redirecting-incoming-requests

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요



 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> 

<html lang="en"> 
<head> 
    <title>Progress Bar</title> 
</head> 
<body> 
<!-- Progress bar holder --> 
<div id="progress" style="width:500px;border:1px solid #ccc;"></div> 
<!-- Progress information --> 
<div id="information" style="width"></div> 
<?php 
// Total processes 
$total 10
// Loop through process 
for($i=1$i<=$total$i++){ 
    
// Calculate the percentation 
    
$percent intval($i/$total 100)."%"
     
    
// Javascript for updating the progress bar and information 
    
echo '<script language="javascript"> 
    document.getElementById("progress").innerHTML="<div style=\"width:'
.$percent.';background-color:#ddd;\">&nbsp;</div>"; 
    document.getElementById("information").innerHTML="'
.$i.' row(s) processed."; 
    </script>'

     

// This is for the buffer achieve the minimum size in order to flush data

    echo str_repeat(' ',1024*64); 
     

// Send output to browser immediately 
    
flush(); 
     

// Sleep one second so we can see the delay 
    
sleep(1); 

// Tell user that the process is completed 
echo '<script language="javascript">
document.getElementById("information").innerHTML="completed"</script>'

?> 
</body> 
</html>


출처: http://w3shaman.com/article/php-progress-bar-script


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

이 함수는 제목 그대로 POST 로 넘어 온 값들을 체크해서 필터링하는 함수 입니다.


필터링은 이메일, 그림 URL, HTTP URL 를 제외한 나머지 값들을 htmlspecialchars() 로 필터하게 됩니다.


<form enctype="multipart/form-data" action="" method="POST">  
<input type="text" name="x" value="<b>" /><br /> 
<input type="text" name="y" value="http://localhost/img/logo.gif" /><br /> 

<input type="text" name="a3[]" value="1" /><br /> 
<input type="text" name="a3[]" value="1" /><br /> 
<input type="text" name="a3[]" value="1" /><br /> 
<input type="text" name="a4[4][5]" value="habony@gmail.com" /><br /> 
<input type="text" name="a5[6][aaaa]" value="<a href='#'>habony</a>" /><br /> 
<input type="text" name="a6[8][9][10]" value="<jikedo@gmail.com,>" /><br /> 

<input type="text" name="a7[11][12][13][14]" value="5" /><br /> 
<input type="text" name="a7[11][12][13][15]" value="5" /><br /> 
<input type="text" name="122" value="6" /><br /> 
<input type="submit" value="전송" />  
</form>  

<?php  
function PHP_MAIL_Email_Confirmation($email

    if(
filter_var($emailFILTER_VALIDATE_EMAIL)) 
    { 
        return array(
substr($email0strcspn($email'@')), $email); 
    } 
    return 
false

function 
Organization_Filter(&$value$key

    if(!
is_array($value)
    { 
        
$value trim($value); 

        
// URL 검증 
        // Ex. http://example.com/test.php?name=habony&age=10 
        
if(filter_var($valueFILTER_VALIDATE_URL)) 
        { 
            
$ext explode(" "".jpg .gif .png .bmp"); 
            if(
in_array(substr(strtolower($value), -4), $ext)) 
            { 
                
$value sprintf("<img src=\"%s\">"$value); 
            } 
            else 
            { 
                
$link str_replace("&""&amp;"$value); 
                
$value sprintf("<a href=\"%s\">%s</a>"$link$link); 
            } 
        } 
        
// E-Mail 검증 
        
else if(filter_var($valueFILTER_VALIDATE_EMAIL)) 
        { 
            list(
$name$email) = PHP_MAIL_Email_Confirmation($value); 
            
$value sprintf("<a href=\"mailto:%s\">%s</a>"$email$name); 
        } 
        else 
        { 
            
$value filter_var($value
                      FILTER_SANITIZE_SPECIAL_CHARS
                      FILTER_FLAG_ENCODE_HIGH); 
        } 
    } 
    else 
    { 
        
array_walk_recursive($value'Organization_Filter'); 
    } 


Organization_Filter($_POST); 

print_r($_POST); 

/* 
결과: 
Array 

    [x] => &#60;,b&#62; 
    [y] => <img src="http://localhost/img/logo.gif"> 
    [a3] => Array 
        ( 
            [0] => 1 
            [1] => 1 
            [2] => 1 
        ) 
    [a4] => Array 
        ( 
            [4] => Array 
                ( 
                    [5] => <a href="mailto:habony@gmail.com">habony</a> 
                ) 
        ) 
    [a5] => Array 
        ( 
            [6] => Array 
                ( 
                    [aaaa] => 
&#60;a href=&#39;#&#39;&#62;habony&#60;/a&#62; 

                ) 
        ) 
    [a6] => Array 
        ( 
            [8] => Array 
                ( 
                    [9] => Array 
                        ( 
                            [10] => &#60;jikedo@gmail.com,&#62; 
                        ) 
                ) 
        ) 
    [a7] => Array 
        ( 
            [11] => Array 
                ( 
                    [12] => Array 
                        ( 
                            [13] => Array 
                                ( 
                                    [14] => 5 
                                    [15] => 5 
                                ) 
                        ) 
                ) 
        ) 
    [122] => 6 

*/ 
?> 


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

간단한 PHP 파일 카운터 소스입니다.


* 아래 내용을 메모장에 복사 & 붙여넣기 해서 counter.php 로 저장합니다.
* counter.php 파일은 서버로 ASCII 모드로 업로드 하고, 권한을 777로 설정합니다.

* 빈 index.php.dat 파일을 만들어 index.php 가 위치하는 경로에 업로드 하고, 권한을 777로 

   설정합니다.

   접속한 페이지가 text.php 이면 text.php.dat 이 되고, 접속한 페이지가 order.php 이면 

   order.php.dat 라는 빈 파일을 만들어 서버로 업로드해 줍니다. 각 dat 파일은 페이지별 

   통계를 구하기 위해 만들어 주는 것입니다.


파일 이름: counter.php

<?php

$cfile = basename($_SERVER['PHP_SELF']) . ".dat";

$fh = fopen($cfile, "r+");

if (!$fh) {

   die("<br/>Failed to open file.");

}

$s = fgets($fh, 6);

$count = (int)$s;

$count = $count + 1;

$count = str_pad($count, 6);

rewind($fh);

fwrite($fh, $count);

echo "<center>$count visitors to this webpage</center>";

fclose($fh);

?>


다음 내용을 각 페이지에 삽입하여 줍니다.


  <?php include "counter.php" ?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

 <?php
 function post_request($url, $data='', $referer=''
)
 {
  // Convert the data array into URL Parameters like a=b&foo=bar etc.
  if(!empty($data
))
  {
   $data = http_build_query($data
);
  }

  // parse the given URL
  $url = parse_url($url
);

  if (
$url['scheme'] != 'http'
)
  {
   die(
'Error: Only HTTP request are supported !'
);
  } 

  // extract host and path:
  $host = $url['host'
];
  $path = $url['path'
];

  // open a socket connection on port 80 - timeout: 30 sec
  if($fp = fsockopen($host, 80, $errno, $errstr, 30
))
  {
   // send the request headers:
   fputs($fp, "POST $path HTTP/1.1\r\n"
);
   fputs($fp, "Host: $host\r\n"
);

   if (
$referer != ''
)
   {
    fputs($fp, "Referer: $referer\r\n"
);
   }

   fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"
);
   fputs($fp, "Content-length: ". strlen($data) ."\r\n"
);
   fputs($fp, "Connection: close\r\n\r\n"
);
   fputs($fp, $data
);

   $result = ''
;

   while(!
feof($fp
))
   {
     // receive the results of the request
     $result .= fgets($fp, 128
);
    }
   }
   else
   {
    return array(
      'status' => 'err'
,
      'error' =>
"$errstr ($errno)" 
    );
   }
   fclose($fp
);

  // split the result header from the content
  $result = explode("\r\n\r\n", $result, 2
);

  $header = ''
;
  if(isset(
$result[0
]))
  {
   $header = $result[0
];
  }
  $content = ''
;
  if(isset(
$result[1
]))
  {
   $content = $result[1
];
  }

 // return as structured array:
  return array(
   'status' => 'ok'
,
   'header' => $header
,
   'content' =>
$content 
  );
 }
 // Submit those variables to the server



 // example #1
 $post_data
= array(
   'test' => 'foobar'
,
   'okay' => 'yes'
,
   'number' =>
2
 );

 // Send a request to example.com
 $result = post_request('http://www.example.com/', $post_data
);

 if (
$result['status'] == 'ok'
){

 // headers
 echo $result['header'
];

 echo
'<hr />'
;

 // print the result of the whole request:
 echo $result['content'
]; 
 }
 else

 {
   echo
'A error occured: ' . $result['error'
];
 }
 ?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

글 본문내용 중에 이미지 태그만 출력하고자 할때 사용합니다.


ex #1)

 

<?php
 /*
 # example )
 $str = "
&lt;img src='./images/logo.gif'&gt; logo:: &lt;img src='java
script:alert(document.cookie)'
&gt;";
 echo link_image_all($str);
 */
 
function img_ext()
 {
    return array(
        
'gif','jpe','jpg','jpeg','bmp','png','art','ani','bnr','cal',
       
'fax','hdp','mac','pbm','pcd','pct','pcx','pgm','png','ppm',
       
'psd','ras','tga','tif','tiff','wmf','cdr','cgm','cmk','cut',
       
'dcx','dib','drw','dxf','emf','eps','flc','fli','iff',
       
'lbm','wpg'
    
);
 }

 function 
link_image_all($str)
 {
    if(!empty(
$sttr))
    {
        return 
preg_replace("/&lt;.*?img.*?src=\s*?['\"]http:\/\/([0-9a-z-.\/~_]+\.(" implode("|"img_ext()) . "))['\"].*?&gt;/i""<img src=\"http://\\1\" />"$str);
    }
    return 
false;
 }
 ?>


ex #2)

 

<?php
 /*
 # example )
 $str = "<img src='./images/logo.gif'> logo:: <img src='javascript:
alert(document.cookie)'>";
 echo link_image($str);
 */
 
function img_ext()
 {
    return array( 
     
'gif','jpe','jpg','jpeg','bmp','png','art','ani','bnr','cal',
     
'fax','hdp','mac','pbm','pcd','pct','pcx','pgm','png','ppm',
     
'psd','ras','tga','tif','tiff','wmf','cdr','cgm','cmk','cut',
     
'dcx','dib','drw','dxf','emf','eps','flc','fli','iff','lbm',
     
'wpg'
    
);
 }

 function 
link_image($str)
 {
    if(!empty(
$sttr))
    {
        return 
preg_replace("/http:\/\/([0-9a-z-.\/~_]+\.(" implode("|"img_ext()) . "))/i""<img src=\"http://\\1\" />"$str);
    }
    return 
false;
 }
 ?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

글쓰기나 회원가입시 무단 입력방지를 위한 간단한 함수 입니다.


 

사용방법은 다음과 같습니다.

 

 <?php

 // get_singup.php
 require_once(dirname(__FILE__) . '/session.class.php');
 require_once(dirname(__FILE__) . '/gd.secode.php');

 $makeRand = new setsession("gd_sign");

 // 7 글자 랜덤
 $makeRand->put_session("gd_second", makeRand(7));
 $makeRand->session();

 gdSecode($makeRand->get_session("gd_second"));
 ?>


 // write.php

 <img src='get_singup.php'><input type='text' name='singup'>

 

 <?php
 
/*
 *************************   srand make   *************************
 */
 function makeRand($len=6)
 {
    
$len preg_replace ("|[^0-9]|"""$len);
    if(
$len 6)
    {
        
$len 6;
    }
    
srand((float) microtime() * 10000000);
    
$schar array_rand($specialchar = array('A','Q','G','L','H'));

    
$rand_keys array_merge(range('A''Z'), range('z''a'), range(19));
    
shuffle($rand_keys);

    
$data false;
    for(
$i=0$i<$len$i++)
    {
        if(
$i === $schar)
        {
            
$data .= $specialchar[$schar];
        }
        else
        {
            
$data .= $rand_keys[$i];
        }
    }
    return 
$data;
 }

 function 
numRand($len=4)
 {
    
$len preg_replace ("|[^0-9]|"""$len);
    if(
$len 4)
    {
        
$len 4;
    }
    
srand((float) microtime() * 10000000);
    
$rand_keys array_merge(range('1''4'), range('5''9'), range(19));
    
shuffle($rand_keys);

    
$data false;
    for(
$i=0$i<$len$i++)
    {
        
$data .= $rand_keys[$i];
    }
    return 
$data;
 }

 function 
gdSecode($makeRand$size=7)
 {
    
$W 78+(($size-7)*11);
    
$H 34;
    
$png ImageCreate($W$H);
    
$w ImageColorAllocate($png255255255);
    
$b ImageColorAllocate($png000);

    for (
$i=0$i<$W$i+=11)
    {
        
imageline($png$i0$i$H$b);
    }

    for (
$i=0$i<$H$i+=11)
    {
        
imageline($png0$i$W$i$b);
    }
    
ImageString($png6911$makeRand$b);
    
header("Content-type: image/png");
    
ImagePng($png);
    
ImageDestroy($png);
 }
 ?>


소스 파일이 필요하다면 http://ebook.habonyphp.com/40 에서 받으세요.

블로그 이미지

하보니

하보니와 함께하는 phP 초보

Tag signup

댓글을 달아 주세요

포트 스캐너는 말그대로 상대방의 포트를 스캔하는 것을 말합니다. 해커들이 만들어 사용한다는 포트 스캐너입니다. 화면의 그림에서 "server name"에는 도메인 이름 또는 ipv4 나 ipv6 주소를 입력하고, 알고자 하는 서비스명 또는 "other port"에 적당한 포트를 입력하고 전송을 하면 그 결과 값이 출력됩니다. 결과적으로 파란색만 사용가능함을 표시합니다.



서버가 윈도우라면 기본적으로 php_sockets.dll 모듈이 비활성화 상태이므로 php.ini 를 수정해서 활성화해줘야 socket 함수를 사용할 수 있습니다.


예제 #1)

 <!DOCTYPE HTML SYSTEM "about:legacy-compat">

 <form action="" method="POST">
    Server Name: <input type="text" name="servername" size="30" value="" autofocus required placeholder="ex) example.com or ip address" />
    <br />
    Service :
    <input type="checkbox" name="port[]" value="21" />ftp
    <input type="checkbox" name="port[]" value="23" />telnet
    <input type="checkbox" name="port[]" value="25" />smtp
    <input type="checkbox" name="port[]" value="80" />http
    <input type="text" name="port[]" value="" placeholder="other port" />
    <br />
    <input type="Submit" name="result" value="전 송"/>
 </form>
 

 <?php
 if(!empty($_POST['result']) && ($_SERVER['REQUEST_METHOD'] === 'POST'))
 {
    
ini_set("max_execution_time"120);

    
$servername preg_replace("/[^a-z0-9.-:]/i"""$_POST['servername']);
    if(!empty(
$servername) && function_exists("socket_create"))
    {
        if(
is_array($_POST['port']))
        {
            
$output = array();
            
$socket = @socket_create(AF_INETSOCK_STREAM0);

            foreach(
$_POST['port'] as $p)
            {
                
$num preg_replace("/[^0-9]/"""$p);
                if(
$num)
                {
                    
$result = @socket_connect($socket$servername$p);
                    if(!
$result)
                    {
                        
$output[] = "<font color='red'>" $p "port service is not</font>\n";
                    }
                    else
                    {
                        
$output[] = "<font color='blue'>" $p "port is the service</font>\n";
                    }
                }
            }
            @
socket_close($socket);
        }        

        echo 
'<pre>';
        
print_r($output);
    }
 }
 ?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요