PHP 22

PHP 5.2에서 JSON_FORCE_OBJECT 대용

PHP json_encode 에는 다양한 옵션들이 있습니다. 그렇지만 PHP 5.3.3 버전 부터죠 회사에서 레거시 프로그램이 5.2 버전이라 json_encode 의 json_encode($data,JSON_FORCE_OBJECT); JSON_FORCE_OBJECT 를 못쓰고 있는데요. 아쉬운 딴에 json_decode(json_encode($data)); 로 쓰고 있습니다. 웹호스팅인상태라서 PHP 7 버전을 올리려면 서버를 멈춰야하는데 서버를 멈춰가면서 까지 하지는 마라더군요 사실 웹호스팅상태가 아니면 무중단 업그레이드 방법은 많은데 말이죠 아쉽습니다.

PHP 2021.07.05

PHP 에서 select 쿼리 결과값이 않나올 때

PHP mysqli 사용중에 일어난일 입니다. PHP 로 작업중에 mysql 콘솔에서 쿼리를 실행하면 결과가 나오는데 PHP에서 실행하면 row가 0 이 나왔습니다. xDebug로 디버깅하다보니 한글이 들어가면 안되더군요 바로 인코딩 문제였습니다. PHP mysqli로 연결할 때 mysqli_set_charset($conn,'utf8'); mysqli_set_charset()함수로 DB에 연결할 때 DB의 문자인코딩을 설정하면 됩니다. DB 문자열 설정일 euckr 이면 mysqli_set_charset($conn,'euckr'); 이 되겠죠 PHP뿐만 아닌 다른언어를 사용하더라도 발생할 수 있는 문제였습니다.

PHP 2021.06.28

PHP 연관배열과 autovivification - PHP 8.1

PHP 의 배열은 연관배열이며 autovivification기능이 있는데요 오토비비피케이션이란 변수를 배열로 자동으로 바꿔주는 기능입니다. Perl 언어에서 시작되어 PHP, Python 등이 영향을 받았습니다. 자바나 C++에도 특정 함수들을 이용하면 가능합니다만 PHP는 네이티브로 지원됩니다. 이번 PHP 8.1에서는 조금 바뀌는데 PHP 8.1에서는 변수가 false 값일 때 autovivification기능을 사용할 수없게 변경됩니다. 예) $answer = false; $answer['member'] = 'name'; 이렇게 false가 들어간 변수들은 연관배열로 쓸 수없게 됩니다.

PHP 2021.06.16

PHP 공식문서 SVN에서 Git으로 이전되었네요.

PHP 사이트와 공식문서는 SVN으로 관리되고있었습니다. 2020년 부터 문서 옮기는 작업이 되고 있다가 2021년 새해부터 전부 Git으로 이전되고 PHP 5.x 문서들이 삭제되어 PHP 5버전대는 www.php.net/manual/php5.php 에서만 확인가능합니다. Git으로 이전한 이후 여러 사람들이 참가해서 전보다 더 활발해지고 있군요! 아래는 이제는 지원이 끝난 PHP 5버전 대 문서링크입니다. PHP: PHP Version 5 Documentation Documentation for PHP 5 Introduction The PHP 5 documentation was removed from the PHP Manual in September 2020, approximately two years..

PHP 2021.01.01

코드이그나이터 3 REST api 라이브러리 문제들

코드이그나이터3에서 기본적인 URL라우팅 구조는 다음과 같습니다. 폴더/컨트롤러 클래스이름/함수이름 이런구조인데요 ci3 에서 restful api를 지원하는 라이브러리들은 저기 함수를 변형하여 login_post() / login_get() 이런식으로 함수이름 뒤에 http메서드를 넣습니다. 이제 api를 만들어보면 api폴더하위에 Reservation 컨트롤러에서 이런일이 생기죠 class Reservation extends RestController { public function __construct() { parent::__construct(); $this->load->library('ReservationService'); $this->load->library('session'); } //예약확..

PHP 2020.12.31

코드이그나이터 3에서 라이브러리 설치시 autoload 에러

코드이그나이터 4는 rest api를 기본적으로 지원하지만 3버전은 rest api관련 라이브러리를 따로 설치해야합니다. An uncaught Exception was encountered Type: Error Message: Class 'chriskacerguis\RestServer\RestController' not found 라며 컴포저로 설치한 RestController 라이브러리를 찾을 수없다고 나옵니다. 코드이그나이터 config.php파일에서 컴포저 오토로드 경로를 재설정해주면 됩니다. $config['composer_autoload'] = FCPATH.'vendor/autoload.php'; 컴포저 없이 PHP 엔진기능으로 클래스 로딩을 추가하자는 RFC 도 봤는데요 언제 될지는 모르지만 ..

PHP 2020.11.10

PHP 버전별 함수 선언과 클래스 선언방식 PHP5.3~ PHP 8.0

PHP 는 동적타입언어지만 정적타입언어들의 요소를 추가해왔습니다. 현업에서는 구버전이 꽤 있다고 들어서 정리해봤습니다. PHP코딩 권장표준안 PSR-12 규칙을 보면 {}중괄호는 다음줄에 표시하라고 나와있네요 PHP 5.3 function add($a, $b) { return $a + $b ; } function($a, $b) // 익명함수 { return $a + $b ; } 리턴타입 지정 불가능 ㅠ 주석에 적지않으면 긴 함수들은 뭐가 리턴되는지 알수 없네요 파라미터 타입 지정 array, callable만 가능 ㅠ PHP 7.0 //2015년 12월 출시 function add(int $a, int $b): int { return $a + $b ; } echo (function($a, $b){ ret..

PHP 2020.11.03

PHP 8.0 바뀐점 정리된곳

php.watch/versions/8.0 PHP 8.0: What's New and Changed PHP has come a long way with types. We now have scalar types, return types, nullable types, and even property types in PHP 7.4! PHP 8.0 comes with support for Union Types! In versions prior to PHP 8.0, you could only declare a single type for properties, p php.watch 바뀐점과 새로운 기능들을 코드 예제와 함께 설명이 잘되어있습니다. PHP 8은 아직 정식버전이 나오지 않아 php.net에는 올라와있지 ..

PHP 2020.10.25

PHP 8.0 애트리뷰트 문법 논란

PHP 8.0에서는 애트리뷰트(자바나 다른언어의 어노테이션)기능이 추가되었습니다. 애트리뷰트는 클래스, 함수, 변수의 메타 데이터입니다. (메타데이터는 다른데이터를 설명하는데이터 입니다.) PHP 위원회는 로 > 문법을 제시했고 PHP레딧이나 PHP사용자 커뮤니티에서 복잡하다며 @@Attribute 로 하자고 했는데요 보통 다른언어들에서는 @로 시작하는데 PHP에서 @는 경고를 끄는 의미로 쓰고 있어서 ㅋㅋ 결국 Rust언어문법을따라한 #[ ] 가 되었네요 PHP .. PHP 레딧 댓글보면 PHP 9에서는 기존의 @를 다른거로 바꾸고 @문법으로 선언할수있게 하자고 하는등 난리네요 ㅋㅋ --------------------- > -> @@ -> #[]

PHP 2020.09.03