엄범


PHP는 Personal Home Page의 initialism이었으나 

PHP: Hypertext Preprocessor의 recursive initialism으로 변경되었다.

PHPSCHOOL

PHP.net - 단순한 docs가 아니라 feature, security, core mechanism 등을 잘 정리해 놓은 가이드.


TIP

  • PHP 5.4.0부터 내장 웹 서버가 있어 Apache를 사용하지 않아도 PHP 어플리케이션을 실행해볼 수 있다. 그러나 당연히 프로덕션 환경에서는 사용하지 않는 것이 좋다. `` php -S 0.0.0.0:4000`` (python과 비슷하다)

  • 닫는 php태그 ``php ?>``를 적지 않는다.
    *  ``php ?>``를 넣고 나서 빈 줄을 넣으면 이를 출력으로 간주해 오류가 발생할 수 있기 때문.

  • inline으로 사용할 때는 ``php <?= expression ?>`` 형태이며 이는  ``php <? echo expression ?>``을 간단히 쓴 모양이다.

  • 오토로더를 사용하면 ``php include, require``를 사용하지 않아도 런타임 시 필요에 따라 자동으로 불러온다.

require, import

  1. ``php require``문에서 지정한 경로에서 파일 탐색
  2. php.ini의 ``include_path``에 지정된 path에서 탐색
  3. 파일이 속한 디렉토리에서 탐색
  4. 없으면 ``Fatal Error`` 가 발생
``php import``는 동일하게 사용하면 되고 ``Fatal Error``가 아니라 ``Warning``이 발생하고 계속 실행된다.
``php require_once, import_once``도 있는데, 이름 처럼 한 번만 읽어 들이는 것.
```php

require "file";

require $var;

```


php.ini setting

소스를 수정하고 새로고침 해도 수정 사항이 즉각 반영되지 않는 것은 캐시 때문이다. 
보통은 브라우저 단에서 저장하는 캐시 때문이 아니라 php 엔진에서 메모리에 올려놓는 캐시(젠드 오피캐시) 때문에 발생한다.
php.ini 파일의 ``opcache.enable=0``(젠드 오피캐시) 으로 설정한다.
프로덕션 시에는 젠드 오피코드 캐시를 활성화해 어플리케이션 성능을 향상시키는 것이 좋다.

전역변수 초기화 경고

전역변수를 등록할 수 있는 환경에서 초기화하지 않은 변수의 사용은 대부분 보안 취약점으로 이어진다.

``php error_repoting()``을 `` E_ALL`` 또는 `` E_ALL | E_STRICT`` 로 설정하기. 후자가 더 엄격함.


오류 페이지 비공개

`` display_errors``를 off로 설정.

에러를 로깅하기 위해 `` log_errors``를 On으로 설정 및 `` error_log``에 로그 저장 위치 지정하기.


그 외 활성화/비활성화를 고려해봐야 하는 옵션들

  • `` allow_url_fopen : Default On``
  • `` allow_url_include : Default Off``
  • disable_functions
  • enable_dl
  • file_uploads
  • magic_quotes_gpc
  • open_basedir

그 외 조정하면 좋은 옵션

  • max_file_uploads : recommand = 3
  • max_execution_time : recommand : 5
  • output_buffering : recommand : 4096
  • implicit_flush = false
  • memory_limit : default = 128M
  • Zend OPcache
  • realpath cache


etc APIs

nl2br()

개행 문자 앞에 ``html <br/>``을 붙여준다.


Date, Time

직접 관리하지 말고 ``php DateTime / DateInterval`` 클래스 및 관련 클래스를 사용하는 것이 좋다.


mb_send_mail()

메일을 발송할 수 있다.

imap_open()

IMAP을 사용해 메일 서버로부터 메일함을 받아올 수 있다.


Iterator

SPL에서 ``Iterator``와 ``IteratorAggregate`` 인터페이스를 제공한다.
``IteratorAggregate``는 ``getiterator``메소드만 구현하면 돼서 간단히 사용할 수 있다.

Package / Template

PHP 컴포넌트 검색은 패키지스트(https://packagist.org/)에서.
컴포넌트 의존성 관리는 컴포저(https://getcomposer.org/)로. ( pip 같은 것 )

HTML_QuickForm

입력 폼을 간단히 구현할 수 있다.

Pager

화면의 페이지 전환.

Smarty 

화면 구성(뷰)을 위한 템플릿

GD (Graphic Library)

이미지를 축소하는 등 수정할 수 있다.

Framework

프레임워크도 컴포넌트의 결합체로 볼 수 있다.

심포니와 라라벨이 제일 괜찮은 듯.