PHP 19

PHP로 할 수 있는 것

PHP 는 처음에 웹을 위한 템플릿 언어였지만 현재는 범용 언어로서 웹 뿐만아닌 CLI , GUI 앱을 제작하는 것도 가능합니다. 또한 PHP 4.4 부터는 객체지향이 도입되어 5.3 에서는 패키지를 구분짓는 네임스페이스가 생겼고요 어떤 이는 pygame 처럼 C 의 SDL 을 래핑하여 게임을 만들거나 에뮬레이터를 제작하기도 하죠 https://www.youtube.com/watch?v=A1wWRXh6kwY php 와 sdl 로 제작된 닌텐도 nes 에뮬레이터 PHP 를 cli 즉 터미널용으로 실행할때는 cron을 통한 배치작업이나 컴포저같은 라이브러리 관리툴을 제작할 수있고 주력으로 널리쓰이는 곳은 웹서버 제작입니다. PHP 의 대표적인 프레임워크는 라라벨, 심포니가 있으며 CMS 로는 그누보드, 워드..

PHP 2022.11.20

php 개발자 한테 도움되는 사이트

https://modernpug.github.io/php-the-right-way/ PHP: The Right Way 한국어판 쉽게 읽을 수 있는 PHP의 베스트 프랙티스, 코딩 표준, 권위있는 튜토리얼로의 링크를 제공합니다. modernpug.github.io PHP The right way https://refactoring.guru/ko/design-patterns/catalog 디자인 패턴 목록 refactoring.guru PHP 를 비롯한 다양한 언어로 작성된 디자인 패턴 예시들입니다. https://laravel.kr/docs 라라벨 9.x 라라벨 한글 메뉴얼 9.x laravel.kr https://psr.kkame.net/ Introduction - 한글판 PHP Standards Rec..

PHP 2022.11.20

코드이그나이터 4 REST API 주의점

코드이그나이터 4는 네임스페이스와 라우터에서 REST API를 지원합니다. 라우터 코드이그나이터 4를 설치하면 3과 마찬가지로 함수이름을 이용해서 라우팅이 됩니다. 자동라우터라고 합니다. app/config/Routes.php 파일에 $routes->setAutoRoute(true); 자동라우터 기능이 켜져있을때는 REST API 컨트롤러의 HTTP 메소드로 설정해도 우회방법이 생깁니다. Routes.php $routes->resource('City'); //컨트롤러 클래스를 등록 $routes->post('/', 'City::show'); //연결할 url과 메소드를 string 으로 넘김. show같이 보여주는건 보통 GET메소드를 씁니다. 여기서는 확인을 위해 post를 썼습니다. City 컨트롤러..

PHP 2022.04.14

그누보드 보안 SQL 인젝션 방어하기

그누보드는 sql 쿼리를 문자열 그대로 취급하기에 sql 인젝션 공격 문제가 있습니다. SQL 인젝션 공격을 막기 위해서는 prepared statement 쿼리 일명 바인딩쿼리를 써야합니다. 변수자리에 ? 를 넣고 나중에 값을 채우는 방식이라 SQL 인젝션 공격을 막는 확실한 방법입니다. 예시) $query = 'select wr_id, wr_num, wr_subject from g5_write_free where wr_id = ? '; 그누보드 자유게시판에서 게시글 id 가 1 인 글을 불러오는 쿼리입니다. wr_id = ? // prepare(바인딩할 sql 쿼리); $GLOBALS['g5']['connect_db']->prepare(바인딩할 sql 쿼리); 이렇게 되면 PHP 기본 함수를 쓸 수있..

PHP 2022.03.30

PHP 동작방식 - 생명주기

PHP 재단 소식 보다가 PHP internals Book을 정리한다고 해서 보게 되었습니다. 생명주기: 프로그램은 시작되고 어떤 것이 로딩되고 실행 후 끝나고 하는 생명주기가 있습니다. PHP The internals Book (PHP 내부 동작에 관한문서) 에 관련 내용이 자세하게 나와있습니다. PHP로 작성한 코드를 실행하는 환경은 크게 두 가지가 있습니다. 1) CLI (터미널에서 실행) 하나의 요청을 처리하는 환경, 2) 웹 서버와 SAPI 인터페이스를 통해 여러 웹 요청을 처리하는 환경입니다. 1. 의 경우 간단한데요 php -s 로 시작하는 php내장 개발 서버도 여기에 해당하죠 PHP 엔진에서 해당 프로그램을 실행 후 종료합니다. 2. 웹서비스를 하려면 PHP를 nginx , 아파치등 웹서..

PHP 2022.03.27

PHP 8.1 의 변경점: 클래스 로딩 최적화

PHP 8.1 이 출시되었습니다. PHP 8.1 에는 Enum , Fiber 도입등 다양한것이 있지만 https://github.com/php/php-src/pull/6627 Inheritance cache by dstogov · Pull Request #6627 · php/php-src github.com PHP 프로세스 실행시 클래스 링킹과정을 캐시해서 파일이 변경되기전에 한번만 하게 바뀌었습니다. 5~8% 성능향상이 있다고 밝혔는데요 심포니와 같은 객체지향적으로 작성된 프레임워크들은 많은 클래스를 로딩하게됩니다. 클래스 참조 속도 향상과 링킹과정 캐시등으로 20%의 성능향상이 있네요 반면 절차지향적인 코드인 워드프레스는 3.5%정도로 성능향상이 미미합니다. 국내 CMS 인 그누보드도 성능향상은 미미..

PHP 2021.12.05

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