PHP, snoopy class, 외부 이미지 경로 숨기기, 카페24 cdn 이용, 문자열 치환, 공백 제거, 정규식 패턴

2017.02.15 06:30

오늘 하루 종일 PHP 코딩 연습하느라 시간 가는줄 몰랐네요.

 

예전에 공부했던 각종 PHP 함수들...

 

오랜만에 PHP 프로그래밍 연습을 하려니 가물가물하더군요.

 

그나마 예전에 이런저런 기능을 하던 함수가 있었다라는 정도는 생각났기에 원하는 결과물을 도출하는 프로그래밍은 가능하네요.

 

단지 기억을 더듬어 그 기능을 하는 함수를 찾느라 힘들었을 뿐이네요. ㅠㅠ

 

최근 Snoopy class라는 신통방통한 물건을 하나 찾았는데요.

 

저는 이번에 snoopy class를 처음 알게 된 것이지만 요게 나온지는 꽤 오래된 녀석이더라고요.

 

제가 카페24에 호스팅하는 계정이 하나 있는데 이미지 서버(CDN)를 써먹으려고 하다 보니 이미지 경로를 숨기고 싶어서 방법을 찾던 중 snoopy class를 알게 되었네요.

 

CDN 서버가 호스팅 계정 서버랑 달라서 그런지 fopen(), fget(), readfile() 함수 등으로 파일을 읽어 올 수도 없더라고요.

 

cname 설정도 해봤는데 카페24에서 cdn 서버의 외부 접속을 막아놨는지 이 방법도 안 되더라고요.

 

그래도 방법을 찾고 또 찾으니 길이 열리네요.

 

그 길은 바로 php snoopy class를 이용하는 방법이에요.

 

이 녀석의 내부 작동 원리는 모르지만 사용법은 참으로 간단하더군요.

 

원하는 위치에 Snoopy.class.php 파일을 업로드한 후 다음과 같이 코드 몇 줄만 넣어주면 준비는 완료되더군요.

 

<?php
$location = "URL".$_GET[img];
include_once("./Snoopy.class.php");
$snoopy = new Snoopy;
$snoopy -> fetch($location);
print $snoopy -> results;
?>

 

카페24의 cdn 서버 주소는 제 경우 '계정아이디.cdn2.cafe24.com/이미지파일' 형태로 되어 있는데요.

 

이것을 호스팅 도메인 주소로 바꾸고 싶은데 그동안 별의별 짓을 다 해봐도 소용없었는데 snoopy class로 문제를 해결하게 되었네요.

 

예전 같으면 예를 들어 <img src="http://googlinfo.cdn2.cafe24.com/test.jpg" /> 이런 식으로 사용해야 했지만 지금은 <img src="./image.php?img=test.jpg"> 이렇게 사용합니다.

 

마우스 우클릭해서 이미지 속성으로 경로를 확인해 보면 http://googlinfo.com/image.php?img=test.jpg 이런 형태로 나오더군요.

 

이제 외부 이미지 경로를 완전히 숨기고 현재 호스팅 도메인으로 나타낼 수 있게 되었네요.

 

으으.. 이때의 뿌듯함과 밀려드는 감동이란.. 하하..

 

$extTemp = explode('.',basename($location));
$ext = $extTemp[1];
if($ext == 'jpg') {$ext = 'jpeg';}
header('Content-Type:image/'.$ext.'');

 

explode() 함수로 넘겨 받은 이미지 이름을 '.'을 기준으로 파일명과 확장자로 나눈 뒤 확장자가 jpg이면 header('Content-Type:image/jpeg') 이런 식으로 되게 합니다.

 

참고로 header()는 print $snoopy -> results 이것이 나오기 전에 넣어 주면 됩니다.

 

위에 예시된 2개의 코드 구문은 각자의 개인 상황에 맞게 잘 조합해서 사용하시면 됩니다.

 

네이버와 구글 검색을 통해서 php 이미지 경로 숨기기, 외부 이미지 경로 숨기기 등등 관련 검색어로 해결방법을 찾느라 몇 날 몇 일을 개고생을 한 것을 생각하면 흑흑.. 눈물이 앞을 가리려 하네요.

 

snoopy class를 이용하면 포털 사이트의 뉴스도 긁어올 수 있다고 합니다.

 

긁어온 텍스트를 가공해서 원하는 부분만 골라내 써먹어 보려고 하다 보니 하루 종일 엄청 많은 것을 공부하게 되었네요.

 

preg_replace(), str_replace(), strstr(), count(), preg_match_all(), explode() 함수 등을 이용해 원하는 결과물을 만들어 내느라 시간 가는줄 몰랐네요.

 

아.. 패턴 때문에 정규식도 아주 오랜만에 다시 기억을 되짚으며 공부하느라 힘들었습니다. ㅠㅠ

 

에고... 머리야...

 

$text = preg_replace('/\s+/', ' ', $text);
preg_match_all('/[0-9a-zA-Z가-힣\s]+[^<br>]/', $text, $match);

 

으으... 정규식.. 볼 때마다 머리가 아프네요. 이건 뭐.. 완전 외계어 같아요. 하하..

 

긁어온 장문의 텍스트($text)를 preg_replace() 함수를 이용해 공백을 제거해 주는 작업인데요.

 

'/\s+/' 이건 정규식 패턴인데 1개 이상의 공백을 ' ' 이것처럼 1개의 공백으로 대체시켜 주었습니다.

 

preg_match_all() 함수를 이용해 $text에서 패턴과 일치하는 것을 $match에 저장하게 되는데요.

 

이게 $match가 다차원 배열의 형태로 저장되는 듯 하더군요.

 

이 녀석의 데이터 저장 구조를 이해하느라 한참동안 노가다 삽질을 하면서 결과를 확인해 봤지만 아직도 알쏭달쏭 하네요. 하하..

 

제가 확인해본 바로는 $match[][][]까지 3차원 구조까지 확인되었는데요.

 

$match[][] 이렇게 2차원으로 화면에 표시하면 패턴에 정의된 한 문장씩 출력이 되었고요.

 

$match[][][] 이렇게 3차원으로 화면에 표시하면 1문자씩 출력되더군요.

 

근데 이것도 이리저리 테스트하다 보니 긴가민가하네요.

 

if(strstr($match[0][0], '박근혜')) $match[0][0] = str_replace('박근혜', '이명박', $match[0][0]);

 

strstr() 함수는 찾고자 하는 문자열이 텍스트 안에 있는지 검색할 때 사용하는 함수인데요.

 

여기서는 $match[0][0]의 내용에 '박근혜'라는 단어가 존재하면 str_replace() 함수를 이용해 '박근혜'를 '이명박'으로 대체하는 것입니다.

 

에게게... 막상 포스팅으로 오늘 하루 종일 작업했던 내용을 정리해보니 얼마 안 되는 것 같네요. 헐...

신고
Posted by googlinfo(원래버핏)
이 댓글을 비밀 댓글로

티스토리 툴바