카테고리 보관물: 프로그래밍

PHP 프로그램 명령행에서 수행하기

개요

PHP 로 작업된 프로그램은 브라우저를 통해 사용자의 요청을 받아 그 결과를 반환합니다. 여러가지 이유로 브라우저가 아닌 명령행에서 수행해야 하는 경우가 있습니다(ex:자료수집, 자료정리…). PC에서 스케줄을 통해서 브라우저를 실행하면서 옵션으로 PHP 프로그램을 지정해서 실행할 수 있습니다. 일회성이면 문제가 없지만 PC가 켜져 있어야 하는 단점이 있습니다.

PHP 환경이 구축된 서버나 호스팅에서 명령행을 통해 수행할 수 있는 방법을 알아보도록 하겠습니다. 호스팅의 경우 과도한 자원사용은 사용제한 사유가 될 수 있으므로 그 범위 내에서 적절하게 사용하시기 바랍니다.

PHP 위치

리눅스 서버 환경을 기준으로 PHP가 설치되어 있는 경로가 조금씩 다릅니다. whereis 명령어로 어디에 설치되어 있는지 확인할 수 있습니다.

whereis php

PHP 명령행 수행

위의 명령어를 실행하면 경로 정보가 나타나는데 환경에 맞게 변경해서 다음과 같이 명령어를 수행합니다.

/yourphppath/php -q /yourpath/test.php

-q 옵션은 Quiet Mode로 동작하도록 합니다. 모든 옵션 정보는 여기 에서 확인하실 수 있습니다.

이렇게 하면 명령행에서 수행이 가능한데 프로그램 내용이나 환경에 따라서 제대로 실행되지 않는 경우가 있습니다. 이럴때는 curl 을 이용해서 다음과 같이 수행합니다. curl 이 설치되어 있지 않다면 다른 문서를 참고해서 설치 후 실행합니다.

curl http://yourdomain/yourpath/test.php

위와 같이 명령행에서 실행해도 PHP 프로그램을 수행할 수 있습니다.

이번에는 명령행에서 PHP 프로그램을 수행할 수 있는 방법을 알아보았습니다.

Android postDelayed 순서대로 실행

개요

안드로이드 앱 개발 시 일정시간 지연 후 무엇인가를 실행해야 하는 경우가 있습니다. postDelayed 를 이용하면 가능합니다. 자세한 설명은 이곳에서 확인하실 수 있습니다. 예제 코드는 다음과 같습니다.

Handler(Looper.getMainLooper()).postDelayed({
    //Do something
}, delay)

delay 는 Milisecond 단위이고 1000 이 1초에 해당합니다.

postDelayed 순서대로 실행

그런데 가끔 작업을 일정한 시간이나 불규칙한 시간 간격으로 실행해야 하는 경우가 있습니다. 예를 들어 1초, 3초 후 실행한다고 가정해 보겠습니다. 아마 다음과 같이 코드를 작성하게 될 것 입니다.

Handler(Looper.getMainLooper()).postDelayed({
    //Do something
}, 1000) //1초 후 실행

Handler(Looper.getMainLooper()).postDelayed({
    //Do something
}, 3000) //3초 후 실행

실제로는 의도한 대로 동작하지 않습니다. 앞의 코드가 끝난 후 뒤쪽의 코드가 실행되는 것이 아니기 때문입니다. 1초 후 실행은 정상적으로 동작합니다. 뒤쪽의 코드는 실행시간을 기준으로 4초 후가 아닌 3초 후 실행됩니다.

특정한 시간을 기준으로 누적되는 시간으로 적용해 주어야 의도한 대로 실행됩니다. 다음과 같은 코드형태가 됩니다.

Handler(Looper.getMainLooper()).postDelayed({
    //Do something
}, 1000) //1초 후 실행

Handler(Looper.getMainLooper()).postDelayed({
    //Do something
}, 4000) //위쪽 코드 실행 후 3초 후 실행

이번글에서는 postDelayed를 순서대로 실행하는 방법을 알아보았습니다.