Languages & Frameworks/PHP
[PHP] HTML tag escape
[PHP] HTML tag escape
2017.11.11HTML Tag escape```phphtmlentities( string $string, ENT_QUOTES, 'UTF-8');`````php htmlentities()``는 HTML Character Entity에 존재하는 모든 문자를 엔티티로 변환하기 때문에 의도하지 않은 문자까지 이스케이프 될 수 있다.( e.g., `` ! → !`` )그래서 사이트에서 EUC-KR을 사용하는 경우 ``php htmlentities()``를 사용하면 글자가 깨지기 때문에 ``php htmlspecialchars()``를 사용해야 하지만UTF-8 인코딩을 사용하는 경우 글자가 깨지지 않기 때문에 ``php htmlentities()``의 세번째 인자를 `` UTF-8``로 지정해서 사용하는 편이 더 안전하..
[PHP] File Upload
[PHP] File Upload
2017.11.11파일 업로드`` PUT``을 사용한 방식과 `` POST``를 사용한 방식 두 가지가 있다.파일 업로드와 관련된 php.ini 설정에 어긋나는 경우 ``php $_FILES``가 아예 비어있을 수 있으니 주의.``file_uploads = off````upload_tmp_dir````upload_max_filesize````POST_MAX_SIZE````memory_limit`` POST를 사용한 방식==CLIENT==```html```==SERVER==```php$_FILES["userfile"]["name"]...if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)){ ...```반드시 ``html 86f7e437faa5a7fce1..
[PHP] File IO
[PHP] File IO
2017.11.11write```php$fname = "open.txt";if ($fp = fopen($fname, "w")) { fwrite($fp, "test string\n"); // alias : fputs() fclose($fp);}``` 간결하게 사용하려면 이를 사용하는 것이 좋지만, ``php $fp``를 계속 열고 닫아야 하는 경우는 위를 사용하는게 더 빠르다.```phpfile_put_contents("newfile.txt", "contents\n"); // identical to calling fopen - fwrite - fclose``` read```php$fname = "open.txt";if ($fp = fopen($fname, "r")) { echo fread($fp, filesize($fnam..
[PHP] SQL Escape & Bypass
[PHP] SQL Escape & Bypass
2017.10.23SQL Escape methodmysqli::real_escape_string이스케이프 문자 목록```php' " \ \x00(NUL) \x1a(EOF) \n \r``` 아래는 모두 동일한 함수.```phpstring mysqli::escape_string ( string $escapestr ) // aliasstring mysqli::real_escape_string ( string $escapestr )string mysqli_real_escape_string ( mysqli $link , string $escapestr )``` addslashes이스케이프 문자 목록```php' " \ \x00(NUL)```DB에서 지원해주는 함수가 정 없다면 addslashes() 를 사용한다. magic_quo..
[PHP] mysqli, PDO / password_*
[PHP] mysqli, PDO / password_*
2017.06.24MySQL 접속에 사용할 수 있는 API는 ``php mysql, mysqli, PDO`` 세 가지다.`` mysql``보다는 오브젝트로 관리할 수 있는 ``php mysqli, PDO``를 사용하는 것이 좋다.* query 결과가 저장된 변수를 그냥 ``php print $result``하면 안되고, 함수를 사용해야 한다. mysqli```php$mysqli = new mysqli('localhost', 'sample', '123qw', 'sampledb');if($mysqli-> connect_error){print " =================== ";die('Connect Error:('.$mysqli->connect_errno.') '.$mysqli->connect_error);} prin..
[PHP] 함수, 클래스, 객체, 상속, 트레이트
[PHP] 함수, 클래스, 객체, 상속, 트레이트
2017.06.10함수내부 함수를 사용할 수 있다. 클로저나 콜백에 사용할 수 있는 익명함수를 정의할 수 있다. 기본적으로 Call by value지만 선언 시``&``를 붙이면 Call by reference로 동작한다. 선언 시에만 ``&``를 붙이고, 호출 시에는 그냥 호출한다. 함수나 메소드 앞에 ``&``를 붙일 수 있다. ``php return [v1, v2]`` 배열을 만들면서 리턴할 수 있다. Parameter를 정의할 때 Type을 적어주면, 받을 수 있는 Type을 제한할 수 있다. ( Type Hinting ) 객체기본적으로 자바와 흡사한데 ``php trait``가 추가되었다. 클래스 외부에서 클래스의 ``php static, constant``에 접근할 때,클래스 내부에서 상속 계층 상의 프로퍼티나..
[PHP] form tag, GET POST / cookie, session
[PHP] form tag, GET POST / cookie, session
2017.06.10==CLIENT==```html ```==SERVER== ( ?user=default_value )```php````` $_GET[user]``은 get method로 넘어온 query string에서 `` user``라는 key에 대응되는 `` value``를 의미한다. 즉 여기서는 `` default_value``가 된다.GET이든 POST든 관계없이 취급하려면 `` $_REQUEST``를 사용한다.어떤 `` key=value``쌍이 존재하는지는 ``php isset()``으로 확인한다. 배열로 받기checkbox와 listbox는 ``html ``로 지정하고 배열로 받는다. ``php $_POST["key"][idx]`````phpif (isset($_REQUEST["check"])){ foreac..
[PHP] HTTP response header 수정 ( redirect, Download Dialog )
[PHP] HTTP response header 수정 ( redirect, Download Dialog )
2017.06.08response headerheader() - Send raw HTTP header```phpvoid header( string $string [, bool $replace = true [, int $http_response_code ]] )`````php header()``를 사용하면 HTTP response header를 직접 조작할 수 있다.``php header()``는 반드시 어떤 output을 보내는 코드 이전에 위치해 있어야 한다. empty lines나 spaces가 있어도 안되니 주의.이것저것 해봤는데 ``php header()``앞에 HTML tag나 어떤 output을 출력하는 코드가 있어도 제대로 동작하는 환경도 있는 듯. ```php``` redirectionHTTP redirec..
[PHP] Program execution, Shell escape
[PHP] Program execution, Shell escape
2017.06.07실행 연산자 `command`안전모드 상태이거나, ``php shell_exec()``가 무효일 때는 사용할 수 없다.```php$filelist = `ls -al`; // 명령을 실행. 반환값은 실행 결과 전체.echo "$filelist";``` Program execution 함수 목록안전모드 상태일 경우 ``safe_mode_exec_dir``에 지정되어 있는 디렉토리에 위치해 있는 경우에만 실행할 수 있다.``system`` — Execute an external program and display the output 명령을 실행하고 자체적으로 실행 결과 전체를 출력. 리턴값은 실행 결과의 마지막 한 행.``passthru`` — Execute an external program and disp..
[PHP] 상수 목록 / Super globals
[PHP] 상수 목록 / Super globals
2017.06.07상수상수 정의는 ``php define("name", "value");``로 하고, global scope다.클래스 내부에서 상수를 정의할 때는 ``php const``를 사용하는 편이 좋다.```phpclass Member{ const MaxAge = 20; function printMaxAge( ) { print self::MaxAge; //$this->가 아니라 self::를 사용한다. }}``` 유용한 상수``PHP_VERSION``, ``PHP_OS````php __LINE__``, ``__FILE__``, ``__DIR__````__FUNCTION__``, ``__CLASS__``, ``__METHOD__````__TRAIT__``, ``__NAMESPACE__`` global전역 변수 참조는..
[PHP] 문자열, 배열
[PHP] 문자열, 배열
2017.06.06문자열PHP는 기본적으로 문자열을 이루는 각 문자를 `` 1 byte``로 간주한다.멀티바이트 문자를 다룰 때도 이를 `` 1 byte`` 단위로 다루기 때문에 오류를 방지하기 위해 ``php mb`` prefix가 붙은 함수를 사용해야 한다.`` mb`` 함수는 기본으로 설치되지 않기 때문에 undefined function Error가 발생할 수 있다.``bash apt-get install php-mbstring``해주고 아파치 재시작해주면 된다. 좋은 문법``php echo``가 ``php print``보다 아주 약간 빠르다.`` .``으로 잇는 것 보다 그냥 `` ,``으로 출력하는게 더 빠르다.```phpecho 'Hello', ' ', 'World';``// is better than ech..
[PHP] Tip, php.ini, etc APIs
[PHP] Tip, php.ini, etc APIs
2017.03.09PHP는 Personal Home Page의 initialism이었으나 PHP: Hypertext Preprocessor의 recursive initialism으로 변경되었다.PHPSCHOOLPHP.net - 단순한 docs가 아니라 feature, security, core mechanism 등을 잘 정리해 놓은 가이드. TIPPHP 5.4.0부터 내장 웹 서버가 있어 Apache를 사용하지 않아도 PHP 어플리케이션을 실행해볼 수 있다. 그러나 당연히 프로덕션 환경에서는 사용하지 않는 것이 좋다. `` php -S 0.0.0.0:4000`` (python과 비슷하다) 닫는 php태그 ``php ?>``를 적지 않는다. * ``php ?>``를 넣고 나서 빈 줄을 넣으면 이를 출력으로 간주해 오류가 발..