목록전체 글 (158)
김 양의 멋따라 개발따기
PHPWord 없이 Word에서 열 수 있는 .doc 다운로드 파일 만들기PHP에서 Word 문서를 다운로드해야 하는 경우 보통 PHPWord 같은 라이브러리를 많이 사용한다.하지만 운영 서버에 Composer 설치가 어렵거나, 라이브러리 추가가 부담스러운 상황도 있다.이번 작업에서는 PHPWord 없이, PHP 기본 기능만 사용해서 Word에서 열 수 있는 .doc 파일 다운로드 기능을 구현했다.특히 단순히 HTML을 .doc 확장자로 내려받는 방식에서 발생했던 이미지 깨짐 문제까지 해결하기 위해, 최종적으로는 MHTML 방식을 사용했다.작업 목표관리자 초록 목록에서 논문번호 옆에 문서 버튼을 만들고, 버튼을 클릭하면 해당 초록 정보를 Word 문서로 다운로드되게 만드는 것이 목표였다.목록에서 기존에는..
PHP 8에서 INSERT 쿼리에 sql_fetch()를 사용하면 발생하는 mysqli_fetch_assoc TypeError 해결PHP 8 환경으로 프로젝트를 옮기거나 기존 PHP 코드를 유지보수하다 보면, 기존에는 동작하던 코드에서 갑자기 Fatal error가 발생하는 경우가 있습니다.이번에 발생한 오류는 INSERT 쿼리를 sql_fetch()로 실행하면서 발생한 문제였습니다.발생한 오류Fatal error: Uncaught TypeError: mysqli_fetch_assoc(): Argument #1 ($result) must be of type mysqli_result, bool given오류 메시지를 보면 mysqli_fetch_assoc() 함수의 첫 번째 인자로 mysqli_result..
1) !와 !!의 의미!value : 부정(논리 NOT)value를 truthy/falsy로 평가한 뒤 결과를 뒤집는다.결과 타입은 항상 boolean이다. !!value : boolean으로 강제 변환(정규화)!를 두 번 적용해서 뒤집고 다시 뒤집음 → “참/거짓 여부만” 남긴다.결과는 무조건 true 또는 false. 2) truthy / falsy 한 번에 정리JS에서 조건문은 boolean이 아니어도 동작하고, 값은 크게 두 종류로 평가된다.falsy (조건문에서 false 취급)false0, -00n (BigInt)"" (빈 문자열)nullundefinedNaNtruthy (그 외 전부 true 취급)"0" (문자열)"false" (문자열)[] (빈 배열){} (빈 객체)function() {..
1. 왜 2.0 + 4.4 + 6.2 + 2.4 이 15.000000000000002가 될까?자바스크립트에서 숫자는 대부분 IEEE 754 64-bit 부동소수점 형식으로 저장돼요.쉽게 말하면:고정된 64개의 비트 안에부호(sign) 1비트지수(exponent) 11비트가수(fraction, mantissa) 52비트이렇게 나눠서 **“2진수 실수”**를 표현합니다.문제는 우리가 사용하는 10진수 소수가**2진수로 “딱 떨어지지 않는 경우가 많다”**는 겁니다.예를 들어:1/10 (0.1)2/10 (0.2)4.4, 6.2, 2.4 …이런 수들은 2진수로 표현하면 무한히 반복되는 소수가 됩니다.10진수에서 1/3 = 0.33333... 끝없이 반복되는 것처럼요.컴퓨터는 52비트까지만 저장할 수 있으니중간에..
1. 문제 상황 페컬티정보조회 faculty_btn.addEventListener("click", ()=>{ //... 동작 })faculty_btn이 변수로 선언하지 않고 스크립트에서 동작하고 있는 걸 발견함.상황이 신기해서 찾아봄 2. 문제 설명1) 메커니즘: 왜 되는가브라우저는 문서를 파싱할 때, id(그리고 일부 태그의 name)가 있는 요소들을 **window 객체의 “이름 있는 프로퍼티(named properties)”**로 노출합니다. 그래서 id="faculty_btn" 이 있으면 window.faculty_btn이 생기고, 일반 스크립트에선 전역 식별자처럼 faculty_btn으로 바로 접근이 됩니다. 이를 **“Named access on the Window object”..
1. 코드
퇴근이 너무 하고 싶어서 만든 18시 퇴근 기준 퇴근 타이머 만들기 퇴근까지 남은 시간 ⏰ 계산 중... 결과물- 아직 한 시간 넘게 남았다....
1. Index DBIndex DB 는 브라우저에 데이터를 로컬 저장할 수 있는 API로, 오프라인 앱, 캐시, 장바구니 데이터 저장, PWA 등에 자주 사용됩니다.IndexedDB는 사용자의 브라우저에 데이터를 영구적으로 저장할 수 있는 방법 중 하나입니다. IndexedDB를 사용하여 네트워크 상태에 상관없이 풍부한 쿼리 기능을 이용할 수 있는 웹 어플리케이션을 만들 수 있기 때문에, 여러분의 웹 어플리케이션은 온라인과 오프라인 환경에서 모두 동작할 수 있습니다. 2. CRUD // 1. DB 생성let db;const request = indexedDB.open("MyAppDB", 1); // name, versionrequest.onupgradeneeded = function (event) { ..
1. 문제 상황CKEDITOR을 사용하던 중 글자 크기 옵션 늘려달라는 요청을 받음그러나 라이브러리 자체에 글자 크기를 직접 입력 받는 방식은 없었음 2. 해결 방법옵션을 추가하여 글자 크기를 선택할 수 있도록 코드를 짬///ckeditor/plugins/fontSizeInput/plugin.jsCKEDITOR.plugins.add('fontSizeInput', { init: function(editor) { editor.ui.addRichCombo('FontSizeInput', { label: '글자 크기', title: '글자 크기', toolbar: 'styles', panel: { ..
1. html 코드 2. JavaScript 코드 function touchInit(targetElement) { zoomStatus = true; let startX = 0, startY = 0; let offsetX = 0, offsetY = 0; let scale = 1; // 초기 스케일 let isDragging = false; let initialDistance = 0; let touchCenterX = 0, touchCenterY = 0; // 터치 중심점 const maxScale = 2; // 최대 확대 배율 설정 // 기준값 설정 const baseTranslateX = 270; const baseT..