본문 바로가기

php19

[PHP] 변수명으로 함수 호출 / function_exists() 변수명으로 함수 호출 PHP 개발을 하다보면 함수명을 동적으로 호출해야할 때가 있는다. 생각보다 간단하므로 아래 소스코드를 참고 하면된다. 소스코드 - test(), test2() 두개의 함수를 생성하고 변수에 함수명을 입력한다. 1. function_exists() 를 이용하여 해당 문자열과 동일한 함수가 있는지 확인한다. 2. 해당 문자열과 동일한 함수가 존재한다면 변수에 () 기호를 붙여 함수를 호출하여 동작하는지 확인한다. 3. 해당 문자열과 동일한 함수가 없다면 예외 처리를 한다. 결과 test test2 test3 - function not found 변수와 동일한 함수가 실행되는 것을 확인할 수 있다. 즉 함수 call point 를 꼭 fixed하지 않고 상황에 따라서 가변적으로 함수를 c.. 2022. 3. 4.
[PHP] URI '/'(slash) 중복 처리 / preg_replace, 정규식 URI '/'(slash) 중복 처리 URI를 처리하다보면 또는 문자열 처리를 하다보면 '/' (slash)를 사용자(또는 동료 개발자)가 중복으로 입력하는 경우가 종종 생긴다. 실수 또는 string merge 등등의 경우에 경로 끝에 / 처리하고 붙이는 string 선두에 / 이 있다던지.. 어쨌든 중복된 / 를 정규식을 이용하여 없애려고 한다. 소스코드 결과 string(23) "//api////device//status" string(18) "/api/device/status" 정규패턴에서 나타내는 #//+# 은 # : escape character 를 있는 그대로 사용한다 라는 의미. /를 \/ 이렇게 표현하지 않아도 되도록.. + : multiple 이란 의미, {//, }과 같고 //, //.. 2022. 3. 4.
[PHP] nested JSON key 추출 / 재귀함수 활용, recursive call nested JSON 변환 PHP에서 재귀 함수를 이용해 nested 구조의 key들을 /로 구분 짓는 URI string으로 변환하는 예제이다. 이 또한 Restful API 구현에 필요한 기능의 일부이니 활용 가능한 환경이라면 도움이 되길 바란다. 이전에 python 으로 작성한 변환 방식과 유사하니 참고. https://muabow.tistory.com/327 [PYTHON] nested JSON 변환 / comparing two nested JSON nested JSON 변환 예제 1. 재귀를 이용해 nested 구조의 key들을 flat 하게 만들어서 dictionary에 key/value 로 저장을 하는 예제이다. 소스코드 """ # JSON data format { "Key_A": "A", .. 2022. 3. 3.
[PHP] 멀티 프로세스 교착 관리 / semaphore, 세마포어, sem_get() 멀티 프로세스 교착 관리 세마포어와 뮤텍스는 이 포스팅을 보는 본인께서 더 잘 아실 거라 믿는다. 이번에는 php 프로세스 간 세마포어 제어를 다뤄볼 것이다. 인터프리터 주제에 세마포어..!? 라고 생각할 수도 있지만 모든 프로그램은 런타임에 메모리에 적재된 순간부터는 모두 같은 프로세스이기 때문에.. (본인은 php 데몬을 애용하는 편이다. 플랫폼 영향을 안 받기 때문) php - php간, php - 외 native process 간 등 모든 상황에 공유 자원(e.g. file, I/O, db 등 접근 가능한 모든 대상)의 사용 시 교착(deadlock)에 빠질 수 있다. 그래서 php에서도 세마포어가 된다는 것을 알아보려한다. 소스코드 세마포어를 이용하기 위해선 sem_get() 을 사용해야 하는데.. 2022. 1. 21.
[PHP] 상수를 이용한 다중 텍스트 치환 / const, define to text, constant, preg_match_all 상수를 이용한 다중 텍스트 치환 상수를 이용한 다중 텍스트 치환을 어디다 쓸 수 있는지 예를 들어보자면 다국어를 지원하는 환경에서 현재 설정된 언어셋이 무엇인지 모르겠지만 프로그램에선 상수화된 키워드를 사용하여 텍스트를 사용하는(e.g. UI 팝업, 시스템 로그 등) 경우 사용할 수 있다. 언어셋에 맞게 텍스트를 구성하는 게 아니라 모든 텍스트를 키워드로 구성해두고 상수를 프리셋으로 사용하면 가변적인 대응이 가능해진다. 그 밖에도 유연한 텍스트 구성에 사용할 수 있으니 참고하자. 소스코드 preg_match_all()를 사용하여 대상 텍스트 내에 { } 괄호로 둘러싸인 키워드와 동일한 이름을 사용하는 상수로 대체한다. 동일한 상수가 있다면 해당 값을 사용하고 const, define 모두 사용 가능하다... 2022. 1. 21.
Rest API 요청 언어별 정리, CURL/PHP/PYTHON/C/C++/QT/JAVA/Node.js Rest API 요청 언어별 정리 Rest API 호출 방식 소스코드를 각 언어 별로 정리해보았다. 무엇을 좋아할지 몰라 잔뜩 준비 했으니 쓸모가 있었으면 좋겠다. 준비한 언어 목록은 다음과 같다. - 목록 - 1. CURL 2. PHP 3. PYTHON 4. C/C++ 5. QT 6. JAVA 7. Node.js # 소스코드 - 각각의 요청은 http://httpbin.org/get 를 대상으로한다. - GET method 한정하여 작성. 코드 내 POST로 변경할 수 있는 요소들이 있으니 필요하면 수정해서 사용할 것. - 모든 request의 response 응 동일하기 때문에 가장 아래에 응답 결과로 정리한다. 1. CURL - OS: Ubuntu 16.04.7 LTS, Version: curl 7.. 2022. 1. 17.
[PHP] 문자열 앞글자 삭제하기 예제, ltrim/substr 활용 문자열 앞글자 삭제하기 예제 remove the first character of string php 내장 함수인 ltrim과 substr을 이용하여 문자열의 앞글자 하나만 삭제하는 예제를 보겠다. 1. ltrim() 활용 - 문장의 가장 앞글자가 동일한 패턴인 경우 ltrim()의 이용이 가능하다. 아래 예제처럼 앞글자가 "/"로 반복하는 경우 ltrim()의 인자로 "/"를 사용하여 trimming 할 수 있다. ltrim()은 left trim을 의미하고 좌측의 공백을 없애는 기능을 하지만 인자으로 받는 문자(문자열도 가능)도 없애준다. 즉 좌측 기준 인자로 준 문자와 매칭되면 삭제를 수행한다. // Strip whitespace (or other characters) from the beginni.. 2022. 1. 12.
[PHP] fileperms을 활용한 파일 탐색과 퍼미션 검사 fileperms을 활용한 파일 탐색과 퍼미션 검사 이전에 작성한 탐색기 함수를 이용하여 대상 경로의 모든 파일 중 사용자가 지정한 퍼미션이 아닌 파일을 배열로 반환하는 함수를 만든다. 공동 공간에서 작업을 하거나 서버 내 파일 생성/삭제 등 여러 파일을 제어하다 보면 퍼미션이 꼬이는 경우가 종종 발생한다. 특히 웹 서비스와 관련된 파일을 만들고 관리하다 보면 퍼미션으로 인해 웹 페이지에서 접근이 안 되는 경우가 많다. 그럴 때 일괄적으로 특정 경로의 퍼미션 체크를 할때 유용하게 사용된다. ▽ 파일 탐색기 함수 포스팅 https://muabow.tistory.com/249 [PHP] readdir을 활용한 파일 목록 읽기 예제, 파일 탐색기 readdir을 활용한 파일 목록 읽기 예제, 파일 탐색기 op.. 2022. 1. 6.