* PHP를 통해서 원격에 있는 이미지를 긁어오거나 복사하고 싶을 때가 많은데 예외상황이 많을 것이다. 한번 예외상황들에 대해서 적어보고, 특히 php.ini를 마음대로 수정못하는 웹호스팅을 하고 있다면 꽤나 골치 아플 일이 많을 것이다.

 

: 일단 첫번째로 확인해야될 제약사항은 php.ini에서 "allow_url_fopen"이 "on" 되어있어야한다는 것이다. 만약 이것이 on 되어있다면 원격의 파일을 꽤나 쉽게 가져올 수 있다.

 

* copy 함수를 이용해서 원격 이미지 가져오기

: 우선 가장 간단하게 가져올 수 있는 방법은 copy 함수를 쓰는 것이다.

copy("http://remotedomain.com/image.jpg", "/tmp/local.jpg");

: 위와 같이 하면 바로 원격의 파일을 로컬로 복사해서 가져올 수 있다.

 

* file_get_contents, file_put_contents 함수를 이용하는 방법

: 위보다 조금은 복잡하게, 그러나 파일의 내용을 수정하고 싶거나 전체 흐름을 조율하고 싶다면 아래와 같이 할수도 있다.

$img = file_get_contents("http://remotedomain.com/image.jpg");
$save = file_put_contents("/tmp/local.jpg");

: 아니면 fwrite를 쓸수도 있다.

$img = file_get_contents("http://remotedomain.com/image.jpg");
$fp = fopen("/tmp/local.jpg", "w");
fwrite($fp, $img);
fclose($fp)
: fopen을 쓰고 싶다면 다소 복잡해지지만 가능은 하다. 물론 위의 allow_url_fopen이 설정되어있다면 가능한 것이다.
$rf = fopen($url, "r");
$fp = fopen("/tmp/local.jpg", "w");

while(!feof($rf)) {
  fwrite($fp, fread($rf, 1), 1);
}
fclose($rf);
fclose($fp);
 
: 아무튼 php.ini에서 "allow_url_fopen"이 설정되어있는 경우는 쉽게 되지만, 안되어있는 경우에는 별도로 curl을 사용해서 가져와야한다. 위의 방법들을 사용하고 싶다면 php.ini에 allow_url_fopen=on으로 설정하거나, 아파치 등 웹서버 설정에서 overwrite할 수 있다면, .htaccess에서 php_value allow_url_fopen on 등으로 설정하면 된다. (PHP 4.3.4 이상 버전 호환)
 
 
* curl을 이용하는 방법
: 웹서버의 제약이나 php의 제약으로 인하여 위의 allow_url_fopen을 설정할 수 없다면, 원격의 url에 fopen을 사용하지 못하면 직접 접속해서 가져와야할 것이다. 가장 쉽게는 curl을 사용하면 된다.
$fp = fopen("/tmp/loca.jpg", "w");

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://remotedomain.com/image.jpg");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
curl_setopt($ch, CURLOPT_FILE, $fp);

curl_exec($ch);

fclose($fp);
curl_close($ch);
 

 

: 이외에서 http모듈을 사용하는 방법도 있지만, 아무리 막혀있어도 curl에서는 해결이 될 것이므로 이정도면 원격 URL의 파일을 가져오는데에는 성공할것이라 생각한다.

 

원격 URL의 파일을 로컬로 가져오기 끝.

 

출처: https://unikys.tistory.com/345 [All-round programmer:티스토리]

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

오랫만에 자료 남깁니다.

MySQL 에서 날짜 계산하는 펑션을 소개 드립니다.

 

DATE_ADD 펑션을 사용하면 되구요.....

 

DATE_ADD(기준일, 기간) 형태로 사용하게 됩니다.  아래에 예시 쿼리를 남깁니다.

 

하루
SELECT COLUMN1,2.... FROM TABLE WHERE DATE_COLUMN BETWEEN DATE_ADD(NOW(),INTERVAL -1 DAY ) AND NOW();

일주일
SELECT COLUMN1,2.... FROM TABLE WHERE DATE_COLUMN BETWEEN DATE_ADD(NOW(),INTERVAL -1 WEEK ) AND NOW();

한달
SELECT COLUMN1,2.... FROM TABLE WHERE DATE_COLUMN BETWEEN DATE_ADD(NOW(),INTERVAL -1 MONTH ) AND NOW();

 

행복하세요!!

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

pid로 프로세스를 종료하는 방법을 정리합니다. 사용하는 명령은 다음과 같습니다.

  • ps
  • grep
  • awk
  • kill

pid를 조회하여 프로세스 종료하는 명령은 다음과 같은 절차로 작성됩니다.

  1. 원하는 프로세스 목록만 가져오기 - ps, grep, pgrep(ps+grep)
  2. 프로세스 목록에서 pid만 가져오기 - awk
  3. kill 명령어로 한번에 프로세스 종료 - (backtick)

backtick은 다음 그림과 같은 위치의 문자를 의미합니다.


프로세스 목록 조회

ps 및 grep 명령을 대상 프로세스를 조회합니다.

 

ps -ef | grep hugo

501 6582 479 0 12:39AM ttys000 0:01.15 hugo server

501 6919 479 0 12:44AM ttys000 0:00.21 hugo server

501 7011 479 0 12:44AM ttys000 0:01.16 hugo server

501 7104 479 0 12:44AM ttys000 0:01.16 hugo server

501 7276 479 0 12:44AM ttys000 0:01.15 hugo server

501 7371 479 0 12:44AM ttys000 0:01.16 hugo server

501 7463 479 0 12:44AM ttys000 0:01.14 hugo server

501 7637 479 0 12:45AM ttys000 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn hugo

프로세스 목록에서 pid 출력

awk로 프로세의 정보를 출력합니다. 컬럼 지정은 작은 따움표로 설정합니다.

 

> ps -ef | grep hugo | awk '{print $1,$2,$3,$8}'

501 6582 479 hugo 501 6919 479 hugo

501 7011 479 hugo 501 7104 479 hugo

501 7276 479 hugo 501 7371 479 hugo

501 7463 479 hugo 501 7903 479 grep

>

 

두 번째 컬럼($2)으로 pid를 지정하여 출력합니다.

 

> ps -ef|grep hugo|awk '{print $2}'

6582

6919

7011

7104

7276

7371

7463

7952

>

프로세스 종료

쉡 스크립트에서 backtick(`) 사이의 명령은 실행되고 그 결과가 앞에 명령에 입력됨니다.

다음과 같이 pid는 kill 명령에 전달되어 종료됩니다.

 

>kill -9 `ps -ef | grep hugo|awk '{print $2}'`

kill: kill 8385 failed: no such process

[7] + 7463 killed hugo server

[6] + 7371 killed hugo server

[5] + 7276 killed hugo server

[4] + 7104 killed hugo server

[3] + 7011 killed hugo server

[2] + 6919 killed hugo server

[1] + 6582 killed hugo server

>

 

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

특정 날짜가 해당 월의 몇주차인지 계산해주는 함수입니다.

 

사용법 :

$nowJucha = getWeekInfo(date("Y-m-d"));

또는

$nowJucha = getWeekInfo(date("2021-03-17"));

 

function getWeekInfo($_date)
{
    $BASIC_DOW = 1; // 1(mon) ~ 7(sun)
    list($yy, $mm, $dd) = explode('-', $_date);
    
    $dow = date('N', mktime(0, 0, 0, $mm, 1, $yy));
    
    if ($dow <= $BASIC_DOW)
    {
        $diff = $BASIC_DOW - $dow;
        $srt_day = $diff+1;
    } else {
        $diff = 7-$dow;
        $srt_day = $diff + $BASIC_DOW + 1;
    }

    if ($dd < $srt_day)
    {
        $new_date = date('Y-m-d', mktime(0, 0, 0, $mm, 0, $yy));
        return getWeekInfo($new_date);
    } else {
        $wom = ceil(($dd-($srt_day-1))/7);

        // 이곳을 수정하면 원하시는 결과로 리턴하셔도 됩니다.
        $new_date = (int)$mm. '-' .$wom; 
        return $new_date;
    }
}

 

즐프하세요~

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

스케줄러나 업무일지등을 개발하다보면 날짜관련 컨트롤이 필요할때가 많습니다.

이때 애매한게.. 주간 날짜를 구하는거죠..

이번주 시작일과 끝날짜  이전주, 다음주 날짜 범위를 구하는 방법입니다.

 

$today = time();
$week = date("w");

$week_first = $today-($week*86400);
$week_last = $week_first+(6*86400);

지난주 = date("Y-m-d",$week_first-(86400*7))." ~ ".date("Y-m-d",$week_last-(86400*7));
이번주 = date("Y-m-d",$week_first)." ~ ".date("Y-m-d",$week_last);
다음주 = date("Y-m-d",$week_first+(86400*7))." ~ ".date("Y-m-d",$week_last+(86400*7));

 

응용해서 $today 부분을 특정 날짜로 하면 그날짜가 속한 주간 날짜범위를 구하실 수 있습니다.

 

$today = mktimemktime(23,59,59,03,17,2021);

 

이런식으루요~

 

그럼 즐프들 하십시요!

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

자료 검색중 좋은 자료가 있어서 공유드립니다.

(원글 : jung-max.github.io/2020/06/23/Web-1_SpringBoot-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95/)

 

=====================================================

 

스프링부트를 처음 시작하기 위한 개발환경 구성에 대해서 설명한다.

JDK 설치

Spring Boot를 사용하기 위해서는 JDK 설치가 선행되어야 한다.

요즘은 오라클의 정책으로 인해서 OpenJDK가 권장된다.

https://github.com/ojdkbuild/ojdkbuild에서 자신의 컴퓨터와 맞는 jdk를 다운받아 설치한다.

java version확인

위와같이 자바 버전이 확인된다면 설치가 성공된 것이다.

이클립스 설치

스프링부트를 사용하기 위한 IDE로서는 IntelliJ IDEA가 가장 좋다고 말한다. 하지만 구독료가 있기 때문에 여기서는 이클립스에 대해서 설명한다.

아래 링크에서 이클립스를 다운받는다.

https://www.eclipse.org/downloads/

설치시 스프링 프레임워크를 사용하기 위해서 JaveEE(Java Plaform, Enterprise Edition)을 설치한다.

JAVA EE

플러그인 설치

STS(Spiring Tool Suite)는 스프링 어플리케이션 개발을 위한 이클립스 기반의 개발환경이다.

이클립스 상단 메뉴중 Help > Eclipse Marketplace…을 선택한다. Find 창에서 STS를 검색한다.

마켓플레이스 목록에서 최신 버전의 STS를 설치한다.

STS 설치

STS 설치시 모든 기능을 선택 후 설치하면 된다.

Gradle 설치

라이브러리 관리를 위한 Gradle을 설치한다. 라이브러리 관리는 크게 Maven과 Gradle이 있지만 여기서는 Gradle을 중심으로 설명한다.

그 이유는 메이븐의 경우 xml로 이루어져 있어 사람이 알아보기는 쉽지만 라이브러리가 추가되거나 각각의 라이브러리가 서로 다른 버전의 라이브러리를 참조하는 종속성을 가지고 있을 경우에는 관리가 어려워지는 문제가 있다.

위에서 STS를 설치한 것처럼 마켓플레이스에서 gradle을 검색해 설치한다. 이미 설치가 되있다면 넘어가도 좋다.

Gradle 설치

Gradle을 설치했다면 거기에 맞는 에디터 또한 설치한다. 여기서는 Minimalist Gradle Editor를 설치한다.

Minimalist Gradle Editor 설치

설치 후 그레이들 파일을 연결한다.

상단 메뉴에서 Windows > Preferences를 선택하고 General > Editors > File Associations 메뉴에서 *.gradle을 찾아서 Minimalist Gradle Editor을 Defauilt로 선택한다.

Minimalist Gradle Editor을 Defauilt로 선택

이클립스 메뉴 변경

아래는 필자가 추천하는 메뉴 구성 변경에 대해서 설명한다.

Customize Perspective 변경하기

Windows > Preferences > Customize Perspective를 선택한다.

Customize Perspective를 선택

Shortcuts 메뉴에서 아래와 같이 선택한다.

Java Shortcuts

Web Shortcuts

패키지 보여주기 변경하기

패키지의 계층 구조를 한눈에 파악하기 위해 패키지 보여주기 방법을 변경한다.

Project Explorer에 ∨ 버튼을 누른 후 Package Presentation > Hierarchical을 선택한다.

Hierarchical을 선택

이클립스 뷰 변경하기

소스코드외 여러 필요한 정보를 보기 위한 화면 구성이다.

Windows > Show View > Other…를 선택한다.

Other... 선택

Console, Problems, Progress, Search, History, Package Explorer을 추가하고 사용하지 않는 메뉴는 삭제한다.

Package Explorer는 Project Explorer뷰 옆으로 이동한다.

이클립스 뷰

프로젝트 인코딩 설정하기

한글등 여러 문제 발생을 피하기 위해서 UTF-8로 인코딩을 설정한다.

Windows > Preferences를 선택한 후 General > Workspace를 선택한다.

Text file encoding을 UTF-8로 변경한 후 OK를 누른다.

UTF-8로 변경

테마 변경하기(다크 테마)

이클립스 상단 메뉴중 Help > Eclipse Marketplace…을 선택한다. Find 창에서 Dark Theme를 검색한다.

Dark Theme

해당 플러그인을 인스톨 후 재시작하면 다크 테마를 적용할 수 있다. 또한 클래식 또는 화이트 테마 역시 선택 가능하다.

추후 테마를 변경하고 싶다면 Windows > Preferences를 선택한 후 DevStyle에서 Color Themes에서 변경 가능하다.

Theme 변경

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

Q.

수요일에 중고거래하는 카페에서 게임기를 샀어요.

제가 지방에 살아서 직거래 대신 택배로 받기로 했거든요.

입금하고 송장번호까지 받았는데 송장번호 조회가 안 되는 거예요.

그래서 그 사람한테 전화했더니 전화도 안 받고 연락 자체가 안 됩니다.

혹시 몰라 더치트에 검색해보니 그 사기꾼 번호로 피해 당했다고 올라온 게 여러 건 있더라고요.

벌써 주말인데, 어쩌지도 못하고 애만 탑니다.

더치트에 등록은 했는데, 이거 경찰에도 신고해야 할까요?

=================================

중고나라, 번개장터... 사기꾼들이 많이 있고..

당하신분들도 많이 계시죠?

 

전문 변호사님들의 좋은 답변들이 있습니다.

 

☞ 답변보러가기~~Click!!!

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

Q.

대문이 주택가 골목에 위치해 있습니다.

큰 물건이라도 하나 들고 외부로 나오려면 대문앞에 불편하게 주차된 차량때문에 굉장히 불편함을 느낌니다.

수차례 불법 주정차로 신고를 해 봤으나, 구청 단속반이 나와서 경고장만 붙이고 갑니다.

하루도 거르지않고 일주일동안 신고를 했는데도 차량 앞 유리엔 경고장만 가득 쌓여있네요.

화가나서 구청 교통과에 전화를 했더니 사유지라 과태료 딱지를 붙이지 못하고, 경고장만 붙이는 방법외엔 없다는데 이게 맞는 말인가요?

이 말이 사실이라면 이 불편함을 어디에 하소연하나요?

처벌할 수 있는 다른 방법이 없을까요?

=================================

어디서든 불법주차 문제는 참...

전문 변호사님들의 답변이 있습니다.. 참고하세요~

 

☞ 답변보러가기~~ Click!!!

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

Q.

빨리걷기와 조깅 중 운동효과가 더 좋은 것은 무엇인가요?

예를 들어 조깅 30분 하는 것과 빨리 걷기 1시간 하는것을 비교했을 때

어떤 것이 지방 연소에 더 효과적이고 근력 생성에 도움이 되는지 답변 부탁드려요

=============================

걷기와 뛰기!!  

갑론을박인데요..

좋은 의견들이 많이 있으니 참고하세요~

 

 

☞ 답변보러가기~ Click!!

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

Q.

몇년전 어깨에 석회가 생겨서 체외충격파 치료를 받아 90%이상 회복을 했는데,

금년 들어서면서 다시 어깨가 예전처럼 아프면서 거기에 두통까지 자주 찾아오네요.

당시 치료받을땐 두통이 없었는데 말이죠.

가끔씩 오던 두통이 최근엔 2~3일에 한 번씩 옵니다.

혹 두통이 어깨 아픈거랑 연관이 있는지 궁금합니다.

========================================

두통과 어깨아픔...

많은 전문가님들께서 답변을 해주셨습니다~

 

☞ 답변보러가기~~Click!!

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,