안녕하세요

 

오랫만에 PHP 관련 글을 올리네요.

 

이번 글은 API 연동을 하다보니 JSON 데이터를 POST방식으로 주고 받는 경우가 발생하여

내용을 정리해보았습니다. 

 

많은 도움이 되면 좋을 것 같습니다.^^

 

//POST로 전송할 JSON 데이터 샘플
{
    "user" : { "id" : "xxxxxxx"},
    "log":[
              {
                  "id":"1",
                  "log_val": "43"

              },
              {
                  "id":"2",
                  "log_val": "44"
              }
	  		]

}

//JSON 결과 데이터 샘플
{
    "result" : "200",
    "msg":[
            {
                "id":"1",
                "msg_val": "43_OK"

            },
            {
                "id":"2",
                "msg_val": "44_OK"
            }
          ]

}


<?php
//---------------------CURL를 활용하여 JSON데이터를 POST방식으로 요청하여 JSON데이터로 받기--------------------

//요청 서버 URL 셋팅
$url = "요청할 서버 URL";

//추가할 헤더값이 있을시 추가하면 됨
$headers = array(
		"content-type: application/json",
		"accept-encoding: gzip"
);

//POST방식으로 보낼 JSON데이터 생성
$arr_user = array();
$arr_log = array();
$arr_post = array();

$arr_user["id"] = "xxxxxxx";

$arr_post["user"] = $arr_user;

$arr_log[0]["id"] = "1";
$arr_log[0]["log_val"] = "43";
$arr_log[1]["id"] = "2";
$arr_log[1]["log_val"] = "44";

$arr_post["log"] = $arr_log;

//배열을 JSON데이터로 생성
$post_data = json_encode($arr_post);

//CURL함수 사용
$ch=curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
//header값 셋팅(없을시 삭제해도 무방함)
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//POST방식
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, true);
//POST방식으로 넘길 데이터(JSON데이터)
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);

$response = curl_exec($ch);

if(curl_error($ch)){
    $curl_data = null;
} else {
    $curl_data = $response;
}

curl_close($ch);

//받은 JSON데이터를 배열로 만듬
$json_data = json_decode($curl_data,true);
//배열 제어
if($json_data["result"] == "200"){
	$cnt = 0;
	foreach($json_data["msg"] as $msg_data){
		foreach($msg_data as $msgval_data){
			//msg_val값만 출력합니다.
			echo $msgval_data[$cnt]["msg_val"];
			$cnt++;
		}
	}
}

exit;
?>

 

 

러닝 PHP : PHP 입문에서 프레임워크를 활용한 실전 프로그래밍까지(PHP 7 기반)

COUPANG

www.coupang.com

 

안녕하세요

 

이번 내용은 php에서 mobiledetect 클래스를 활용하여 모바일페이지에서 디바이스 정보를 획득하는 방법을 알려드리겠습니다.

 

일반적으로 자주 사용되는 부분은 아니지만 간혹 모바일 환경에서 웹페이지를 통해 알 수 있는 최소한의 디바이스 정보를 획득하고 싶은 경우가 발생할때 사용하면 좋을 것 같습니다.

 

아래와 같이 따라 하시면 큰 문제없이 금방 하실 수 있으실 겁니다.

 

1. Mobile_Detect.php 를 다운받기 위해 http://mobiledetect.net/ 를 접속해서 Download 버튼을 클릭한다.

   (ZIP파일 압축해제 후 압축풀더 들어가면 Mobile_Detect.php 파일이 보임)

 

2. 예제 소스(아래 예제소스가 있는 파일과 Mobile_Detetc.php 파일위치는 동일해야 함)

   (모바일페이지 획득가능 정보 - 모바일여부/디바이스 제조사/디바이스OS/디바이스OS 버전)

<?php

require_once 'Mobile_Detect.php';      


$detect = new Mobile_Detect;  
//예제소스를 호출하는 웹브라우져가 모바일인지 아닌지를 체크함(1:모바일, 2:PC 등)
$devicetype = $detect->isMobile() ? 1 : 2;   

//모바일일때만 처리 
if($devicetype == 1){ 
    $devicemake = "";     //제조사 변수 초기화
    foreach($detect->getRules() as $name => $regex){ 
        if(substr($name, -2) == "OS") break;      //제조사 정보만을 위해 OS정보는 제외처리(데모참조)
        $check = $detect->{'is'.$name}(); 
        if($check) { 
             $devicemake = str_replace("Tablet","",$name);   //Tablet정보도 있음(데모참조)
             break; 
        } 
     }

    //디바이스OS 체크함(iOS, Android, ETC-WindowsMobile등)
     $deviceos = $detect->isiOS() ? "iOS" : ($detect->isAndroidOS() ? "Android" : "ETC"); 
     if($deviceos == "iOS"){ 
         $deviceosv = $detect->version("iOS");    //디바이스 OS 버전 정보(iOS)
     } else if ($deviceos == "Android"){ 
         $deviceosv = $detect->version("Android");  //디바이스 OS 버전 정보(Android)
     } else { 
         $deviceosv = $detect->version("Mobile");   //디바이스 OS 버전 정보(ETC)
     } 
} 

?>
 

러닝 PHP : PHP 입문에서 프레임워크를 활용한 실전 프로그래밍까지(PHP 7 기반)

COUPANG

www.coupang.com

 

3. 데모는 http://demo.mobiledetect.net/ 페이지를 참조하시길 바랍니다.

   (화면에 보이는 메서드 및 값을 확인하면 개발에 도움이 되실겁니다. 참고로 데모소스는 https://github.com/serbanghita/Mobile-Detect/tree/master/examples 에서 demo.php 파일을 확인하시면 되실것 같습니다.)

 

* github URL : https://github.com/serbanghita/Mobile-Detect

 

위의 내용은 저한테 최소 필요한 부분만 파악하여 정리한 내용이라 부족한 부분이 많습니다.

 

지속적으로 도움글 많이 주시면 고맙겠습니다.

 

오늘 하루도 즐거운 하루 되십시요^^ 이만 마치겠습니다.^^

안녕하세요.

 

자료를 수집하다 보면 기본 자료들을 웹페이지 검색을 통해서 가져오는 부분이 많으실텐데요.

 

이때 개발자이다보니 크롤링을 해오면 되지 않을까 싶어 검색해보니 간단한 방법이 있어 소개할려고 합니다.

(개발자가 창조적이라는 말을 많이 듣지만 저도 검색으로 많은 부분을 해결합니다.)

 

오늘은 간단하게 웹페이지를 크롤링하는 방법을 알아보겠습니다.

 

예제로 tv줌 인기랭킹의 순위 및 프로그램명을 가져올까 합니다.

 

1. 웹브라우저에서 tv줌 인기랭킹 페이지를 확인합니다.(https://tv.zum.com/ranking)

 

2. 웹브라우저의 개발자도구(F12)를 통해 HTML 구조를 파악합니다. 

   (영역 : 빨간색, 순위값 : 녹색, 프로그램명 : 파란색)

 

<예시 : tv줌 예시화면>

3. simple_html_dom 사이트에서 simple_html_dom.php 다운로드를 합니다.

   다운로드 URL : https://sourceforge.net/projects/simplehtmldom/files/simplehtmldom/ 에서 최신버전 다운로드

                       (ZIP파일 압축해제 후 압축풀더 들어가면 simple_html_dom.php 파일이 보임)

   온라인 설명서 URL : http://simplehtmldom.sourceforge.net/manual.htm 개발시 참조

 

4. 개발소스

<?php

header('Content-Type: text/html; charset=UTF-8'); 

//simple_html_dom php 파일을 include함 
include('simple_html_dom.php'); 

//가져올 url 설정
$url = 'https://tv.zum.com/ranking'; 
$html = @file_get_html($url); 

unset($arr_result); 
$arr_result = $html->find('div.tv_wrap>a');   //1위 ~ 3위 랭킹순위 및 프로그램명 가져오기
if(count($arr_result) > 0){                         //위의 이미지에서 a 태그에 포함되는 html dom 객체를 가져옴
    foreach($arr_result as $e){

        //children 속성을 이용해 맨 처음(0)의 태그 가져오기(<span class="rank_num">1</span>값 가져옴)
        echo $e->children(0)->plaintext.':';     //위의 값 중 1 값을 가져옴

        //children 속성을 이용해 맨 두번째(1)의 태그(<div class="tv_info">) 안의 두번째(1)의 태그 가져오기(<p class="program">미스트롯</p>값 가져옴)
        echo $e->children(1)->children(1)->plaintext.'<br/>';     //위의 값 중 미스트롯 값을 가져옴
    } 
} else { 
    echo "<br/>"; 
} 

unset($arr_result); 
$arr_result = $html->find('div.list_wrap>div.list');   //4위 ~ 50위 랭킹순위 및 프로그램명 가져오기
if(count($arr_result) > 0){ 
    foreach($arr_result as $e){ 
        echo $e->children(1)->plaintext.':'; 
        echo $e->children(2)->children(1)->children(0)->plaintext.'<br/>'; 
    } 
} else { 
    echo "<br/>"; 
}


exit;

?>
 

정보문화사] 성공적인 웹 프로그래밍 PHP와 MySQL 단품

COUPANG

www.coupang.com

 

위와 같이 html 구조를 분석하여 가져오면 간단하게 해결할 수 있습니다.

 

하시면서 궁금한 사항 있으면 글 남겨주세요.^^

 

서로 서로 도움이 될 수 있으면 좋겠습니다.^^

 

오늘도 행복한 하루 되십시요^^

[PHP Framwork 강좌1] 개발환경 셋팅(APMSETUP 설치)

  PC 위주로 설명을 하고자 합니다. 우선은 Window OS 기반으로 설명을 드리겠습니다. 32bit로 컴파일 되어있으므로 64bit에서는 주의를 요하는 바입니다.

1.     APMSETUP 설명

APMSETUP은 윈도우에 APM(APACHE, PHP, MYSQL)를 사용할 수 있도록 자동으로 설치, 설정 해주는 프로그램입니다.

2.     APMSETUP 구성

본 프로그램은 사용에 아무런 제한이 없는 프리웨어입니다.

지원되는 시스템은 NT 시스템(2000/XP/2003/Vista/7/2008)를 지원합니다.

 

Minimum system required: Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 SP1, Windows XP SP2, Windows 2000 Service Pack 4

 

APMSETUP은 윈도우에 APM( Apache, PHP, MySQL )를 사용할 수 있도록 자동으로 설치, 설정 해주는 프로그램 입니다.

 

[2010-01-03]

Apache 2.2.14 (openssl 0.9.8k) [ http://httpd.apache.org ]

           - Server\Apache

           - mod_log_rotate 1.00a

           - mod_security 2.5.10

PHP 5.2.12 [ http://kr.php.net / http://windows.php.net/ ]

           - Server\PHP5

Zend Optimizer v3.3.3 [ http://www.zend.com ]

           - Server\ZendOptimizer

MySQL 5.1.39 [ http://www.mysql.com ]

           - Server\MySQL5

phpMyAdmin 3.2.3 [ http://www.phpmyadmin.net ]

           - Server\phpMyAdmin

CUBRID  [ http://www.cubrid.com ](선택사항) , JRE  [ http://java.sun.com ]

 

3.     다운로드 위치

[Window]
- 다운로드 : http://kldp.net/frs/download.php/5636/APMSETUP7_2010010300.exe

- 미러 : http://dev.naver.com/frs/download.php/1877/APMSETUP7_2010010300.exe


http://www.apmsetup.com/download.php 에 버전별로 다운로드를 받을 수 있습니다.


 

4.     APM 설치

è  다운로드 페이지에서 원하는 APMSETUP 버전을 다운로드 받습니다.

 

è  다운받은 APMSETUP7_2010010300.exe를 실행합니다. OK를 선택합니다.

 

 

è  설치 초기화면입니다. 다음을 선택합니다.

 

            

 

è  사용권 계약 화면입니다. 동의함을 선택합니다.

 

 

 

è  구성요소선택 화면입니다. CUBRID DBMS는 설치를 제외하고 바로 다음을 선택합니다.

 

 

è  설치 위치 선택화면입니다. 설치를 선택합니다.

 

 

è  설치중 화면입니다. 완료 후 다음을 선택합니다.

 

 

è  설치완료 화면이 나오면 설치는 완료되었습니다.




5.     APMSETUP 구성

- APMSETUP 모니터링



 

- APMSETUP 모니터링(자동업데이트 설정과 표시언어를 변경할 수 있습니다)

 

         - Apache 설정(홈 디렉터리, 서버주소, 포트번호등 많이 사용되는 아파치 설정을 변경할 수 있습니다.)

 

        - PHP 설정(PHP설정을 변경할 수 있습니다. PHP인식 확장자, 업로드 용량, 메모리 사용량등을 변경할 수 있습니다.)


      - MYSQL 설정(MySQL설정 파일은 my.ini파일을 수정할 수 있습니다.)


      - 프로그램 설치(APMSETUP에서 새로 추가된 기능입니다. 많이 사용하거나 서버 운영에 필요한 프로그램들을 손쉽게 다운로드 받아서 설치할 수 있습니다. 리스트에서 설치하고자 하는 프로그램을 선택 후 프로그램 설치 진행 버튼을 클릭하여 설치할 수 있습니다)


 


6.     참조사이트

 



다음 시간에는 개발환경 셋팅(이클립스 PDT) 강좌를 올리겠습니다.

하루하루 행복한 시간 되십시오.


PHP 함수중에 이미지 처리하는 함수를 알아보겠습니다.

개발중에 이미지 처리하는 부분도 상당히 중요한 것 같습니다.

나름대로 정리를 했는데 잘 되었는지 모르겠습니다.


PHP 이미지 함수 정리(매뉴얼 참조)

resource imagecreate(int $width, int $height) : 인자값으로 받은 사이즈로 빈 이미지를 생성한다.
인자값 : width(가로), height(세로)

int imagecolorallocate( resource $image , int $red , int $green , int $blue ) : 주어진 이미지에 사용될 RGB값을 지정한다.
인자값 : image(imagecreate로 생성된 이미지), red(0~255), green(0~255), blue(0~255)

int imagecolortransparent ( resource $image [, int $color ] ) : 주어진 이미지에 투명 색상을 지정한다.
인자값 : image(imagecreate로 생성된 이미지), color(imagecolorallocate 등의 함수로 생성된 칼라 값)

bool imagefill ( resource $image , int $x , int $y , int $color ) : 주어진 좌표위치부터 주어진 색상으로 주어진 이미지를 채운다.
인자값 : image(imagecreate로 생성된 이미지), x(이미지의 x좌표), y(이미지의 y좌표), color(imagecolorallocate 등의 함수로 생성된 칼라 값)

resource imagecreatefromgif ( string $filename ) : 주어진 gif파일 경로 혹은 URL로부터 새로운 이미지를 생성한다.
인자값 : filename(gif 파일경로 혹은 gif url경로)

bool imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h ) : 이미지를 복사한다.
인자값 : dst_im(생성하고자 하는 이미지), src_im(카피할 이미지), dst_x(생성하고자 하는 x위치), dst_y(생성하고자 하는 y위치), src_x(카피이미지 x위치), src_y(카피이미지 y위치), src_w(카피이미지 가로길이), src_h(카피이미지 세로길이)

int imageinterlace ( resource $image [, int $interlace = 0 ] ) : 주어진 이미지에 라인, arc등의 삽입여부를 설정한다.
인자값 : image(imagecreate로 생성된 이미지), interlace(삽입여부->0 : 삽입안함, 1 : 삽입)

bool imagejpeg ( resource $image [, string $filename [, int $quality ]] ) : jpeg파일로 저장한다.
인자값 : image(imagecreate로 생성된 이미지), filename(jpeg로 저장될 전체경로, 지정안할시 바로 보여줌), quality(설정안할시 75%정도임)

bool imagedestroy ( resource $image ) : 생성된 이미지 객체를 메모리에서 해제한다.
인자값 : image(imagecreate로 생성된 이미지)



작은 이미지(30X30) 2개를 한개의 이미지로 합치는 예제

--------------test.php--------------------------------------------------------

<img src="./img_copy.php" width="60" height="60" />    //이미지를 합치는 페이지 설정

 

 

--------------img_copy.php------------------------------------------------------

<?php

//헤더선언
header("Expires: Mon, 26 Jul 1997 05:00:00 /GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-type: image/jpg");


$img1="./images/img1.gif;                             //30X30이미지(카피하고자 하는 이미지1)
$img2="./images/img2.gif;                             //30X30이미지(카피하고자 하는 이미지2)

$dst_img = ImageCreate(60, 60);                       //두개의 이미지를 카피할 수 있는 영역의 이미지 생성
$gray=ImageColorAllocate($dst_img,234,234,234);       //색상지정
$white=ImageColorAllocate($dst_img,255,255,255);      //색상지정

ImageColorTransparent($dst_img,$white);               //투명색 지정

ImageFill($dst_img, 0, 0, $white);                   

$src_img1 = ImageCreateFromGIF($img1);
$src_img2 = ImageCreateFromGIF($img2);

ImageCopy($dst_img,$src_img1,0,0,0,0,30,30);           //이미지 카피
ImageCopy($dst_img,$src_img2,30,0,0,0,30,30);          //이미지 카피

ImageInterlace($dst_img, 0);

ImageJPEG($dst_img);           //JPG 이미지로 표출됨
ImageDestroy($dst_img);                                //메모리 해제

?>
 

PHP+MySQL 웹 개발 마스터 북:로그인부터 회원 관리까지 쉽게 배우는 PHP와 MySQL

COUPANG

www.coupang.com

 

위와 같은 식으로 구현하면 test.php에서 합쳐진 이미지가 보이게 됩니다.

많은 도움이 되었으면 합니다.

+ Recent posts