PHP에서 종료 태그를 빼는 이유

 '<?php'로 시작하는 PHP 파일에서 종료 태그인 '?>'를 생략하는 것은 단순히 편하기 때문이 아닐까 생각했습니다.  문득 정확한 이유가 있을까 찾아보니, 좀 더 명확한 이유가 있었습니다.  종료 태그를 넣은 다음에 실수로 공백이나 줄 바꿈이 추가되면 뜻하지 않은 문제가 발생할 수 있기 때문에 이를 방지하기 위함이라고 합니다.

PHP에서 JSON 변환시 빈 객체 만들기

 PHP에서 JSON형식으로 '{}'값을 반환해야 하는 상황이 생겼습니다.  지금까지 연관배열을 사용해 JSON을 만들었는데, 아무것도 들어있지 않은 값은 '[]' 형태의 배열이 반환됩니다.  찾아보니 JSON으로 변환 할 때 '{}'를 만들기 위해서는 'new stdClass()'로 빈 객체를 넣어주라고 합니다. $empty = []; echo json_encode($empty); // "[]" $empty = new stdClass(); echo json_encode($empty); // "{}"

윈도우에서 권한 문제로 폴더가 삭제되지 않을 때

검색해서 찾은 페이지 링크. https://syuda.tistory.com/146

PHP로 카페24 앱을 만들었을 때 hmac 검증하기

 PHP를 사용하여 카페24 쇼핑몰에 사용되는 앱을 만들고 있습니다.  앱의 관리자 페이지를 접근할 때 사용자 인증을 해야 하는데, 카페24의 페이지를 거쳐서 접근하는 사람만 앱의 관리 페이지에 접근할 수 있게 하는 방식입니다.  쉽게 말해서 카페24가 제공하는 버튼을 눌러 들어와야 내가 만든 서버에 로그인이 됩니다. 때문에 사용자가 정확한 경로로 접근 했는지 확인을 해야 합니다. 그 방법으로는 요청 파라미터 값으로 들어오는 hmac 값을 검증하는 게 있습니다. ( 개발자 문서 )  PHP를 사용해 검증하는 소스를 다음과 같이 만들었습니다. $hmac = $_GET['hmac']; $key = [SECRET_KEY]; $url = [REQUEST_URL]; // 주소에서 쿼리 문자 분리. // URL인코딩 되어있는 요청받은 그대로의 주소를 가지고 추출한다. $query = parse_url($url, PHP_URL_QUERY); $query = substr($query, 0, strrpos($query, '&')); // 해시값 생성. $hash = base64_encode(hash_hmac('sha256', $query, $key, true)); $pass = ($hmac === $hash);  쿼리 문자열은 파라미터를 가공해 만들지 말고, 요청 URL을 통으로 얻어 앞 부분과, 뒤쪽 hmac 부분을 제거한 다음에 사용하는 것을 추천합니다.  요청 URL은 URL 인코딩이 되어 있습니다. hmac 부분이 빠진 쿼리 문자열은  URL 인코딩된 그대로 해시값을 만들어야 합니다. 다만 생성된 해시값과 비교할  hmac 값은 URL 디코딩된 값을 사용해야 합니다.

라라벨 컨트롤러에서 Validation 오류 메세지 발생하기

 라라벨에서는 컨트롤러에서 유효성 검사를 통과하지 못하고 되돌아왔을 때, 해당 페이지가 오류를 표시할 수 있는 적절한 코드로 되어있다면 검사를 통과하지 못한 대상에 무엇이 문제인지 표시할 수 있습니다.  제가 알고 싶었던 것은, '원하는 때에 원하는 내용으로 유효성 메시지를 표시하는 방법'이었습니다. 그래서 이와 관련된 내용을 찾았고, 찾은 내용은 아래 링크입니다. [ stack overflow ]  방법은 소스코드 내에서 'Illuminate\Validation\ValidationException' 오류를 원하는 메시지로 생성하여  throw 하면 됩니다. use Illuminate\Validation\ValidationException; ... throw ValidationException::withMessages([ 'file' => ['파일 오류'] ]);  예시로 적은 위 코드는 유효성 검사를 해야 하는 항목 중에서 이름이 file로 지정된 요소에 '파일 오류'라는 메시지를 전달합니다.

HTML 의 이벤트 이름은 어떻게 적어야 하는가?

 Vue3 를 사용하다보면 템플릿에서 임의로 이벤트를 만들어야 하는 경우가 있습니다.  이벤트 이름을 정할 때 띄어쓰기는 어떻게 처리하나 고민했지만 다행이 Vue3 가이드에서 이와 관련된 내용을 찾을 수 있었습니다. ( 링크 )  HTML은 대소문자를 구분하지 않으며, 'v-on' 이벤트리스너는 항상 자동으로 소문자 변환하기 때문에 카멜 표기법(camelCase)이나 파스칼 표기법(PascalCase)은 의미가 없다고 합니다. 거기다 이벤트의 이름은 템플릿 내에서 별도의 변수로 사용되는 경우가 없기 때문에 케밥 표기법(kebob-case) 사용을 권장한다고 합니다. <input type="text" @my-change-event="onClick">

PHP 로 FTP 업로드 시 디렉토리와 파일은 만들어지는데 용량이 0인 경우

 PHP를 사용해 외부 FTP 서버에 파일을 업로드 하려고 합니다.  아래 코드와 같은 흐름으로 작성을 했지만, 크기가 0인 파일만 만들어지고 데이터는 올라가지 않네요. // Error code. $ftpConn = ftp_connect($ftpHost, $ftpPort); ftp_login($ftpConn, $Id, $password); ftp_put($ftpConn, $file, $path, FTP_BINARY)); // timeout ftp_close($ftpConn);  찾아보니 FTP 서버의 환경에 따라서 '수동모드'를 작동해야 한다고 합니다. 'ftp_pasv()' 함수로 해당 설정을 할 수 있는데, 값을 true로 설정해도 업로드가 안되는 것은 여전했습니다. // Error code. $ftpConn = ftp_connect($ftpHost, $ftpPort); ftp_pasv($ftpConn, true); ftp_login($ftpConn, $Id, $password); ftp_put($ftpConn, $file, $path, FTP_BINARY)); // timeout ftp_close($ftpConn);  결국 답을 찾았습니다. 어이없게도 코드의 순서가 잘못되어 있었습니다. 'ftp_login()' 이후에 해당 옵션을 설정해야 정상적으로 작동을 합니다. $ftpConn = ftp_connect($ftpHost, $ftpPort); ftp_login($ftpConn, $Id, $password); ftp_pasv($ftpConn, true); // 로그인 다음에 설정해야한다. ftp_put($ftpConn, $file, $path, FTP_BINARY)); ftp_close($ftpConn);