PHP 코드를 작성하다 보면 갑자기 화면이 하얀색으로 변하거나 'Parse error: syntax error, unexpected' 같은 메시지가 떠본 경험이 있을까? 대부분의 개발자들은 이런 파스 에러가 뜨면 코드 전체를 뒤지느라 시간을 낭비한다. 다만 원인은 의외로 간단한 경우가 많다. 이번에는 PHP 파스 에러의 정확한 원인이 뭔지, 왜 발생하는지,···
Nginx 웹 서버와 PHP-FPM을 연동해 서비스를 운영하다 보면 어느 날 갑자기 브라우저에 502 Bad Gateway 에러가 발생하는 상황을 한 번쯤 경험해봤을 것이다.다만 서버가 그냥 다운된 것인지, Nginx 설정 문제인지, 아니면 PHP 프로세스 메모리 초과 때문인지 정확한 원인이나 해결책을 모른 채 Nginx나 PHP 서비스만 무작정 재시작하는···
PHP 코드를 작성하다가 갑자기 화면에 뜨는 'Parse Error: syntax error, unexpected' 메시지를 본 적 있을까? 대부분의 개발자들은 이 에러가 뜨면 황급해하며 인터넷을 검색하고, 결국 에러가 난 라인 근처를 아무 생각 없이 고쳐본다. 다만 정확히 왜 이 에러가 났는지, 어디서부터 찾아야 하는지, 같은 실수를 다시 하지 않으려면 ···
GitHub에 저장된 저장소 정보를 프로그래매틱하게 가져오거나, 이슈를 자동으로 생성하고, 커밋 히스토리를 분석해본 경험이 있을까? 다만 대부분의 개발자들은 GitHub API의 인증 방식이 복잡하거나, API 요청할 때 rate limiting에 걸려본 경험이 있을 것이다. 이번에는 GitHub API v3를 PHP에서 제대로 연동하는 방법을 정확히 무엇···
PHP 개발을 하다가 갑자기 화면에 "Warning: Cannot modify header information - headers already sent by ..."라는 에러 메시지가 출력되며 페이지 이동이나 세션 처리(session_start)가 실패하는 경험을 해봤을 것이다. 다만 대부분의 개발자들은 이 에러가 발생하는 정확한 원인이나 HTTP 프로토···
API 응답을 받거나 외부 데이터를 처리할 때 JSON을 파싱하는 작업은 일상이다. 하지만 대부분의 개발자들은 json_decode를 쓸 때 기본 형태만 알고, 잘못된 JSON이나 보안 문제까지 제대로 대응하지 못한 채 진행한다. 특히 json_last_error()를 확인하지 않아서 조용히 실패하거나, 두 번째 인자를 모르는 경우가 많다. 이번에는 jso···
외부API를연동하거나HTTPS요청을보낼때갑자기나타나는cURLERROR60."SSLcertificateproblem:unabletogetlocalissuercertificate"메시지를본개발자라면얼마나답답한지알것이다.다만대부분의개발자들은이에러의정확한원인도모른채구글에서가져온한두줄의임시방편코드를그냥복사해붙인다.이번에는이에러가정확히뭔지,왜발생하는지,그리고상황에맞는···
GoogleSheetsAPI를PHP에서사용해야하는이유 많은개발자들이데이터를관리할때데이터베이스만생각한다.하지만클라이언트나비즈니스팀에서"구글시트에서직접수정할수있게해달라"는요청을받으면답답해진다.GoogleSheetsAPI를모르면매번CSV파일을받아수동으로처리하거나,별도의관리페이지를만들어야한다. 다만대부분의개발자들은GoogleSheetsAPI의인증과정이복잡하다고생각···
웹애플리케이션을개발하면서사용자입력을받아데이터베이스쿼리를실행하다가보안경고나예상치못한에러를경험해봤을까?다만SQL인젝션의정확한원인이나PreparedStatement가이를어떻게차단하는지내부원리를모른채구글링한코드를그대로붙여넣는경우가많다.이번에는PDO의PreparedStatement가정확히뭔지,왜단순한문자열치환보다안전하고강력한지,실무에서어떻게안전하게작성하는지완벽하게정···
GoogleSheetsAPIv4를PHP에서연동하는완벽가이드 GoogleSheets를외부애플리케이션에서직접제어하고싶은개발자들이많지만,대부분GoogleAPIConsole의복잡한설정과OAuth2.0인증방식때문에난감해한다.특히PHP에서GoogleSheetsAPI를연동할때어디서키를받아야하고,어떻게인증을처리해야하는지정확히아는개발자는생각보다많지않다. 이번글에서는Goog···
jQuery를 사용하는 가장 큰 이유 중 하나가 바로 AJAX 기능이다. AJAX를 통해 페이지를 새로고침하지 않고도 서버와 통신할 수 있기 때문에, 사용자 경험을 크게 향상시킬 수 있다. 다만 AJAX는 비동기 통신이기 때문에 실행 순서, 에러 처리, 타이밍 등 신경 써야 할 부분이 많다. 이번 글에서는 jQuery AJAX의 기본부터 시작해서, 실무에서···
MySQL을 처음 다루거나 새로운 서버에 접속할 때 가장 자주 마주치는 에러가 "MySQL ERROR 1045: Access denied for user" 이다. 에러 메시지는 간단하지만, 정확히 어디서 문제가 발생했는지 파악하기가 쉽지 않아서 많은 사람들이 헷갈려한다. 특히 처음 데이터베이스를 설정할 때나, 권한 설정이 필요한 상황에서 더욱 그렇다. 이번···
PHP 웹사이트를 운영하다 보면 갑자기 서버에서 "PHP Fatal error: Allowed memory size of X bytes exhausted" 라는 에러가 발생하는 경험을 하게 된다. 특히 대용량 파일을 처리하거나 많은 데이터를 조회할 때 더 자주 발생한다. 이 에러가 발생하면 해당 페이지는 완전히 작동 불능 상태가 되기 때문에 사용자 경험도 ···
웹사이트를 운영하다 보면 시간이 지나면서 데이터가 쌓이고, 어느 순간부터 갑자기 페이지 로딩이 느려지는 경험을 하게 된다. 특히 PHP에서 MySQL 쿼리를 실행할 때 어떤 쿼리가 느린지, 왜 느린지 파악하기가 쉽지 않다. 직접 쿼리를 날려보거나 전체 쿼리를 로깅하는 것도 방법이지만 효율적이지 못하다. 이럴 땐 MySQL의 느린 쿼리 로그(Slow Quer···
PHP의 취약점을 검색하면 상당히 많은 검색결과를 볼 수 있다. 하지만 PHP 뿐만 아니라 모든 언어는 취약점이 발생하기 마련이다. 이런걸 보안하여 패치하는게 개발자의 일이기도 하다. 그럼 PHP의 취약점 보완을 위해 버전 업그레이드를 받는다고 해서 취약점이 해결될까? 절대 그럴일이 없다.. 이미 엉망인 소스에다가 PHP 버전을 업그레이드 받는다고 취약점이···
주로 컨텐츠 관련된 작업을 하다보면 글이 길경우 잘라야 하는 경우가 있다. 보통 문장의 뒷부분을 자르고 접두사(...)를 붙이는 경우가 많다. 다만 요즘은 반응형으로 사이트를 많이 제작하다보니 PC기준으로 최대한 글자수를 자르고 CSS로 말줄임 처리를 하는 경우가 많다. 이번편에서는 간단하게나마 PHP를 이용하여 문장의 뒷부분 또는 앞부분 자르는 함수에 대···
지금까지 개발하면서 mb_strlen 과 Javascript의 길이가 다를 수 있다는걸 인지하지 못하였다. 아무래도 서버단에서만 체크하다보니 디테일한 부분은 인지를 못했던것같다. 보통 우리가 javascript로 글자수를 판별할 시에는 아래와 같이 `변수.length`와 같이 판별을 할것이다. var a = "한글 입니다."; a···
phpSyntaxCheck 본 라이브러리는 PHP(ver7+) 로 제작되었으며 쉘 명령어인 php -l 을 이용하여 PHP 문법에 어긋난 파일을 사전에 찾아 점검할 수 있는데 목적을 두고 있습니다. 쉘(Shell) 명령어를 사용하는 만큼 반드시 php 실행권한이 있어야 하며 해당 권한이 없는 경우 이용이 불가능한점 미리 참고 바라며 본 라이브러리는 복잡한···
PHP에서 exec 함수의 경우 쉘 명령어(shell)를 수행할 수 있도록 도와주는 함수이며 그만큼 사용시에 보안에 신경 써야한다. 대부분 가공된 데이터를 기준 한정된 코드로 가공하여 많이 사용하게 되는데 특정 명령어를 사용할때 출력되는 내용이 전체가 아닌 마지막 부분만 노출되는 경우가 있다. 분명 쉘(shell)에서 입력할때는 정상 출력 되지만 PHP e···
치환이란 어떠한 것을 다른 무언가로 교체하는 것을 의미한다. 언뜻 보면 바꾸는 것과 비슷해 보이나 치환은 바꾼다는 뜻보단 대체로서의 의미가 맞는 말이다. 웹 프로그래밍의 경우 HTML 소스와 함께 병행하여 쓰다보니 소스가 상당히 보기 불편해 지는 경우가 많다. 이럴때 사용할 수 있는게 치환자인데 이는 비공개 소스에 대한 유저용 치환자를 제공해 주는 템플릿 ···