(PHP) Tip, php.ini, etc APIs
PHP는 Personal Home Page의 initialism이었으나 PHP: Hypertext Preprocessor의 recursive initialism으로 변경되었다.
PHP.net - 단순한 docs가 아니라 feature, security, core mechanism 등을 잘 정리해 놓은 가이드.
TIP
- PHP 5.4.0부터 내장 웹 서버가 있어 Apache를 사용하지 않아도 PHP 어플리케이션을 실행해볼 수 있다. 그러나 당연히 프로덕션 환경에서는 사용하지 않는 것이 좋다.
php -S 0.0.0.0:4000
(python과 비슷하다) - 닫는 php태그
?>
를 적지 않는다. *?>
를 넣고 나서 빈 줄을 넣으면 이를 출력으로 간주해 오류가 발생할 수 있기 때문. - inline으로 사용할 때는
<?= expression ?>
형태이며 이는php <? echo expression ?>
을 간단히 쓴 모양이다. - 오토로더를 사용하면
include, require
를 사용하지 않아도 런타임 시 필요에 따라 자동으로 불러온다.
require, import
require
문에서 지정한 경로에서 파일 탐색- php.ini의
include_path
에 지정된 path에서 탐색 - 파일이 속한 디렉토리에서 탐색
- 없으면
Fatal Error
가 발생import
는 동일하게 사용하면 되고Fatal Error
가 아니라Warning
이 발생하고 계속 실행된다.require\_once, import_once
도 있는데, 이름 처럼 한 번만 읽어 들이는 것.
1
2
require "file";
require $var;
php.ini setting
소스를 수정하고 새로고침 해도 수정 사항이 즉각 반영되지 않는 것은 캐시 때문이다. 보통은 브라우저 단에서 저장하는 캐시 때문이 아니라 php 엔진에서 메모리에 올려놓는 캐시(젠드 오피캐시) 때문에 발생한다. php.ini 파일의 opcache.enable=0
(젠드 오피캐시) 으로 설정한다. 프로덕션 시에는 젠드 오피코드 캐시를 활성화해 어플리케이션 성능을 향상시키는 것이 좋다.
전역변수 초기화 경고
전역변수를 등록할 수 있는 환경에서 초기화하지 않은 변수의 사용은 대부분 보안 취약점으로 이어진다. 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()
개행 문자 앞에 <br/>
을 붙여준다.
Date, Time
직접 관리하지 말고 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)
http://php.net/manual/en/book.image.php
이미지를 축소하는 등 수정할 수 있다.
Framework
프레임워크도 컴포넌트의 결합체로 볼 수 있다. 심포니와 라라벨이 제일 괜찮은 듯.