PHP에서 try-catch 구문을 통한 예외처리와 확장방법

try-catch문은 프로그램 실행 중 예외가 발생했을 때, 개발자가 이를 직접 처리할 수 있도록 제공하는 구문입니다. C++이나 Java 등의 언어에 등장한지는 제법 시간이 흘렀지만, PHP에서는 5.1.0 버전에 들어와서야 사용할 수 있게 되었습니다.

예외(Exception)특별한 처리가 필요한 이례적인 상황을 이야기합니다. PHP를 기준으로 하면, $_POST 파라메터로 받은 어떤 값이 나눗셈에서 분모로 들어가는 소스코드를 예로 들 수 있겠습니다. 이러한 코드에서 $_POST 값이 0인 상황이 벌어지면, 해당 값을 별도의 값으로 치환하거나 이전 웹페이지로 되돌려보내 사용자의 새로운 입력을 요구한다던가 하는 특별한 처리가 필요할 것입니다.

기본적으로 예외처리는 if-else문 만으로도 가능합니다. 그러나 예외가 발생했을 때의 처리방법에 일관성이 있을 때는 try-catch문을 사용하여 무척 간결한 코드를 작성할 수 있습니다. 금번 포스팅에서는 간단한 예제를 통해서 try-catch문의 기본적인 성질과 사용법, 확장방법에 대하여 설명합니다.

Continue reading

PHP에서 배열이 색인 배열인지 연관 배열인지 구별하기

흔히 배열은 색인 배열(Indexed Array)과 연관 배열(Associative Array)로 구분됩니다. 색인 배열은 키(key)가 0부터 시작하여 순차적으로 증가하는 정수인 배열을 의미합니다. 이 때문에 색인 배열은 순차 배열(Sequential Array)이라고 부르기도 합니다. 그 외의 모든 배열은 연관 배열로 분류할 수 있습니다.

사실 PHP는 내부적으로 색인 배열과 연관 배열을 구분하지 않습니다. 이 점은 PHP Manual의 Arrays 항목에서도 언급하고 있는 내용입니다.

PHP arrays can contain integer and string keys at the same time as PHP does not distinguish between indexed and associative arrays.

그럼에도 종종 어떤 배열이 색인 배열과 같은 형태인지 연관 배열인지를 알아내야 하는 경우가 있습니다. 웹 상에서 코드서칭을 해보면 무척 다양한 해법들을 찾아볼 수 있는데요. 다소 복잡한 방법이 있는가하면, 무릎을 탁치게 하는 방법들도 존재합니다. 금번 포스팅에서는 그 중에 몇 가지를 간추려 소개하고자 합니다.

Continue reading

Windows 환경에서 MongoDB를 PHP에서 사용할 수 있도록 설정하기

이전 글 Windows에 MongoDB 설치하기를 따라서 WIndows에 MongoDB를 설치하고, 데몬을 서비스로 잘 등록하였다면, 이제 PHP에서 이를 사용할 수 있도록 해야 합니다. 여기에 관하여서는 공식문서에도 간결하게 핵심이 정리되어 있습니다. 이 포스트에서는 이러한 설치과정에 익숙하지 않은 분들을 위해 스탭 바이 스탭으로 과정을 설명합니다.

Continue reading

PHP 스크립트에서의 HTTP 통신 #3 – 리눅스 명령어 wget

wget 소개

wget은 URL 만으로 웹 상의 콘텐츠를 가져올 수 있는 간편한 리눅스 명령어입니다. 대부분의 리눅스 버전에는 wget 명령어도 기본으로 포함되어 있으나, 그렇지 않더라도 새로 설치하는 것은 어렵지 않을 것입니다. PHP에는 쉘 스크립트를 실행하는 실행 연산자 backtics(`  `)가 있기 때문에, wget 명령어 역시 PHP 스크립트 상에서 실행이 가능합니다.

Continue reading

PHP 스크립트에서의 HTTP 통신 #2 – fsockopen

fsockopen 소개

PHP의 fsockopen 함수는 소켓 통신을 위한 간단하고 유용하며 특이한 함수입니다. 호스트명과 포트 번호를 입력받은 fsockopen 함수의 반환값은 재미있게도 파일 포인터입니다. 이후부터는 fwrite와 fread 등의 함수로 마치 파일입출력을 하듯이 통신을 할 수 있습니다.

물론 fsockopen은 좀더 많은 프로토콜에 범용적으로 사용하는 만큼, 앞서 소개한 cURL에 비해 무척 번거롭습니다. fsockopen으로 통신을 하기 위해서는 반환받은 파일 포인터에 fwrite로 보낼 데이터를 프로토콜 스펙에 따라 정확하게 입력해야 하기 때문입니다. 스펙과 글자 하나라도 달라지면 응답을 받을 수 없는 것은 물론입니다.

HTTP 스펙에 대해서는 W3C에 공식문서가 있습니다만, 필요한 내용을 발췌독하기 어렵기 때문에 PHP 매뉴얼에 세계의 여러 개발자들이 올려놓은 예제들을 참고하는 것이 빠르게 문제를 해결하는 데에 더 큰 도움이 됩니다.

Continue reading