엄범


실행 연산자 `command`

안전모드 상태이거나, ``php shell_exec()``가 무효일 때는 사용할 수 없다.
```php
$filelist = `ls -al`;    // 명령을 실행. 반환값은 실행 결과 전체.
echo "<pre>$filelist</pre>";
```

Program execution 함수 목록

안전모드 상태일 경우 ``safe_mode_exec_dir``에 지정되어 있는 디렉토리에 위치해 있는 경우에만 실행할 수 있다.
  • ``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

escapeshellcmd()

쉘에서 사용하는 특수문자 앞에 ``\``를 붙여 escape한다.

``& # ; ` | * ? ~ < > ^ ( ) [ ] { } $ \ \x0A \xFF ' "``

`` '``와 `` "``는 한 쌍이 아닐 때만 escape되는데, 구버전은 한 쌍이어도 escape된다.

windows에서는 위 특수문자에 더해서 `` %``와 `` !``도 escape되며 ``\``가 붙는 것이 아니라 공백으로 replace된다.


Escape shell argument string