[PHP] Program execution, Shell escape
실행 연산자 `command`
Program execution 함수 목록
- ``system`` — Execute an external program and display the output 명령을 실행하고 자체적으로 실행 결과 전체를 출력. 리턴값은 실행 결과의 마지막 한 행.
- ``passthru`` — Execute an external program and display raw output
- ``shell_exec`` — Execute command via shell and return the complete output as a string
- ``exec`` — Execute an external program 명령을 실행. 리턴값은 ``c system()``과 같음.
- ``popen`` — Opens a pipe to a process executed by forking the command.
- ``proc_open`` — Execute a command and open file pointers for input/output
- ``proc_get_status`` — Get information about a process opened by proc_open
- ``proc_nice`` — Change the priority of the current process
- ``proc_close`` — Close a process opened by proc_open and return the exit code of that process
- ``proc_terminate`` — Kills a process opened by proc_open
``php preg_replace()``에 `` e``(eval) modifier가 포함되어 있는 경우 치환된 값을 코드로 실행하게 된다.
e.g.
```php
$input = "Bet you want a BMW.";
echo preg_replace("/([a-z]*)/e\0", "strtoupper('\\1')", $input);
```
`` \0``이 유효한 이유는 정규식의 패턴은 C 문자열로 전달되기 때문이다.
`` /e``가 없으면 `` strtoupper()``가 그냥 문자열로 인식된다
Open files with lock ( 특히 oepn sessions ) 은 백그라운드에서 프로그램을 실행하기 전에 반드시 close되어야 한다.
``php exec()`` 등등을 사용하면 유용한 경우는 오래 걸리는 작업(e.g., 보고서 생성)을 수행할 때 별도의 작업자 프로세스로 해당 작업을 넘겨줄 때이다.
별도의 단독 스크립트를 작성해 이를 ``php exec()``를 이용해 bash에서 호출하면 PHP 프로세스를 지연시키지 않는 별도의 논 블로킹 프로세스를 생성하기 때문에 현재 PHP 스크립트와 분리할 수 있으며 그냥 수행하는 것 보다 매우 빠르게 처리할 수 있다.
escape
Escape shell metacharacters
``& # ; ` | * ? ~ < > ^ ( ) [ ] { } $ \ \x0A \xFF ' "``
`` '``와 `` "``는 한 쌍이 아닐 때만 escape되는데, 구버전은 한 쌍이어도 escape된다.
windows에서는 위 특수문자에 더해서 `` %``와 `` !``도 escape되며 ``\``가 붙는 것이 아니라 공백으로 replace된다.
Escape shell argument string
'Languages & Frameworks > PHP' 카테고리의 다른 글
[PHP] form tag, GET POST / cookie, session (0) | 2017.06.10 |
---|---|
[PHP] HTTP response header 수정 ( redirect, Download Dialog ) (0) | 2017.06.08 |
[PHP] 상수 목록 / Super globals (0) | 2017.06.07 |
[PHP] 문자열, 배열 (0) | 2017.06.06 |
[PHP] Tip, php.ini, etc APIs (0) | 2017.03.09 |