프로그래밍/PHP 21

PHP 개발환경 설정 (Windows 10)

Install Apache24 Apache 2.4.43 Win64 download : https://www.apachelounge.com/download/ download file : httpd-2.4.43-win64-VS15.zip ; 가급적 PHP와 동일한 VS15 버전으로 다운로드 extract to "C:\Dev\Apache24" Apache 정상 동작 확인 C:\Dev\Apache24\bin>httpd -version Server version: Apache/2.4.43 (Win64) Apache Lounge VC15 Server built: Apr 22 2020 11:11:00 Install PHP74 PHP 7.4.6 Win64 download : https://windows.php.net/..

프로그래밍/PHP 2020.06.09

[PHP] openssl encrypt/decrypt 사용시, OPENSSL_NO_PADDING 옵션에 대하여

openssl의 대칭키 암/복호화를 이용할 때, 패딩 관련하여 헷갈릴 수 있는 부분이 있어 정리해 둡니다. openssl_encrypt() 함수의 대칭키 암호화 결과 길이가 원문(plain text)와 다른 경우가 발생하는데, 이는 대칭키 암호화는 알고리즘의 블록 크기 (Block Size)가 맞아야 암/복호하가 수행되기 때문입니다. 암호화 결과는 패딩이 추가되어 블록 크기 (Block Size)의 배수에 맞게 길이가 조정됩니다. 즉 원문의 길이가 5이고, 블록 크기 (Block Size)가 8이면 3개의 패딩이 추가되어 길이가 8인 암호화 결과가 반환됩니다. 동일한 환경에서 원문의 길이가 블록 크기 (Block Size)의 배수인 경우에는 무조건 8만큼 추가로 패딩이 됩니다. 원문을 8바이트 입력하여 ..

프로그래밍/PHP 2020.06.08

[PHP] CodeIgniter 2단계 이상의 하위 폴더로 소스 관리하는 방법

개요CodeIgniter를 이용하여 REST API를 개발하던 중에 다음과 같은 형태로 폴더 구조를 만들고, API를 호출하면 무조건 "404 Not found" 오류를 반환하였습니다.application / controllers / rapi / v1.0 / Welcome.php application / controllers / rapi / Welcome.php curl -XGET "http://localhost/rapi/v1.0/Welcome 동일한 "Welcome.php" 소스를 "rapi" 폴더에 복사하고 다음과 같이 호출하면 정상적으로 호출됩니다.curl -XGET "http://localhost/rapi/Welcome 검색하여 보니 기본적으로 CodeIgniter를 이용하여 controllers..

프로그래밍/PHP 2019.12.29

[PHP] 문자열 결합 성능 비교 (Comparison of string concatenation performance)

PHP 코딩을 할 때, 문자열 결합(Concatenation)을 위하여 "." (dot) 연산자나, implode() 함수를 이용하게 됩니다.문득 둘 간의 성능의 차이는 어떨지 궁금하여 다음과 같은 코드로 간단하게 성능을 비교해 보았습니다. 위 코드를 수행한 결과는 다음과 같습니다.CASE #1 Prepare string array : 0.067390918731689 ... implode() 1 : 0.072884082794189 ... implode() 2 : 0.0054931640625 ... dot(.) operator #1 : 0.069299936294556 ... dot(.) operator #2 : 0.063436031341553 ... CASE #2 implode() #1 : 0.277425..

프로그래밍/PHP 2019.12.24

PHP에서 기본 시간대(timezone)에 대하여

PHP 기본 시간대(timezone)시각 동기화를 위하여 NTP 등을 이용하여 서버의 시간을 올바로 맞추어 놓습니다. 이는 이기종간 / 서버대 서버의 통신을 통하여 데이터를 주고 받을 때 시각 정보가 틀어져서 문제가 발생하지 않도록 하기 위해서 중요합니다.서버에 설정된 시각도 중요하지만, PHP에서 이를 처리하는 date/time 관련 함수들의 시간대(timezone) 설정 또한 중요합니다.PHP에서 시간대(timezone)을 설정하는 것은 기본적으로 "php.ini"에서 설정할 수 있습니다. 따로 설정하지 않은 경우에는 "UTC"가 기본 시간대(timezone)로 이용됩니다.[Date] ; Defines the default timezone used by the date functions ; http:..

프로그래밍/PHP 2019.10.26

empty() 함수 사용 주의점

empty() 함수는 이용하여 해당 변수가 비어 있는지 이용합니다. 비어 있는지를 확인하는 범위가 일반적으로 생각하는 것보다 범위가 무척 넓습니다.일반적으로 문자열이라면, "" 및 null을 비어 있다고 볼 수 있겠고, " " 공백 한 문자도 경우에 따라서는 비어 있다고 할 수 있겠습니다.하지만, PHP empty() 함수가 비어 있다고 판단하는 범위는 아래와 같습니다.변수 자체가 선언(undefined)되어 있지 않음null""0false0.0"0"array() ; 빈 배열아래 empty() 함수를 사용한 예제를 확인해 보시기 바랍니다.$test = null; if (empty($test)) echo "[1] test is empty()!! \n" . $test; $test = ""; if (empty..

프로그래밍/PHP 2019.09.03

[PHP] 경고 : Creating default object from empty value

문제점 및 증상다음과 같은 경고가 표시되었습니다.Severity: Warning Message: Creating default object from empty value 원인 분석오류가 나타난 부분의 소스는 다음과 같습니다. $subdomain_info = null; // ... if ($res) { $subdomain_info->site_no = $site_no; $subdomain_info->subdomain = $subdomain; } return $subdomain_info; "subdomain_info" 변수를 "null"로 초기화한 상태에서, 객체 형식으로 값을 할당하여, 위와 같은 경고가 나타난 것입니다.해결 방안아래와 같이 객체 형식으로 값을 할당하기 전에, 실제 객체를 생성하여 주면 됩니..

프로그래밍/PHP 2019.08.28

[PHP] xDebug를 이용한 서버 원격 디버깅

웹 서버 xDebug 설정원격의 웹 서버에 대한 PHP 디버깅은 xDebug를 활용하면, 실제 실행되는 환경을 디버깅 할 수 있습니다.디버깅 포트 확인웹 서버에 특정 헤더를 보내어 디버깅을 하겠다고 알려주면, 웹서버는 개발자 PC의 기본 9,000 포트로 디버깅을 준비하고 디버깅을 진행합니다.따라서, 웹 서버에서 개발자 PC의 9,000 포트로 접속할 수 있도록 관련 방화벽 정책 설정되어 있어야 하고, 실제로 웹 서버에서 개발 PC 9000 포트로 연결에 문제가 없는지 다음과 같이 확인할 수 있습니다.# ssh -v -o ConnectTimeout=3 -o ConnectionAttempts=1 10.103.20.61 -p9000 OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan ..

프로그래밍/PHP 2019.08.22

PHP에서 root 권한으로 내부 명령 실행하기

root 권한 부여용 프로그램 작성PHP에서 직접 root 권한으로 스크립트를 바로 실행할 수가 없기 때문에, 대신 root 권한을 받아서 스크립트를 실행시켜줄 프로그램을 다음과 같이 작성합니다. 프로그램 내부에서는 root 권한을 얻기 위하여 setuid() 함수를 이용합니다.#include #include #include #include #include int main (int argc, char **argv) { if (argc < 2) { printf("%s usage : %s ...\n", argv[0], argv[0]); } else { setuid (0); char szCmd[8000] = ""; int i; for(i = 0; i 위 코드를 실행하면 그 결과는 다음과 같습니다.apache ..

프로그래밍/PHP 2019.06.07

PHPUnit를 이용한 외부 REST API 단위 시험

PHPUnit의 설치PHPUnit은 PHP 프로젝트의 단위 시험(Unit Test) 도구로 널리 사용되고 있습니다. PHPUnit을 설치하는 방법으로는 PHP 아카이브(phar 파일)을 다운로드하여 직접 실행하는 방법이 있고, PHP 패키지 및 의존성 관리 도구인 컴포저(Composer)를 이용하는 방법이 있습니다. phar로 설치하는 방법Windows 10PHPUnit 공식 사이트 https://phar.phpunit.de/ 에서 이용중인 PHP 버전에 맞는 PHPUnit의 아카이브 파일(*.phar)을 다운로드 받습니다. PHP 7.0.x ~ 7.2.x : phpunit-6.x.phar PHP 7.1.x ~ 7.3.x : phpunit-7.x.phar PHP 7.2.x ~ 7.4.x : phpunit..

프로그래밍/PHP 2019.05.22
728x90