Programing

PHP shell_exec () 대 exec ()

lottogame 2020. 3. 7. 00:18
반응형

PHP shell_exec () 대 exec ()


와의 차이점을 이해하기 위해 고심 shell_exec()하고 있습니다 exec()...

exec()서버 측 명령을 실행 하는 데 항상 사용 shell_exec()했습니까?

shell_exec()단지 속기 exec()? 더 적은 매개 변수를 가진 동일한 것으로 보입니다.


shell_exec모든 출력 스트림을 문자열로 반환합니다. exec기본적으로 출력의 마지막 줄을 반환하지만 모든 출력을 두 번째 매개 변수로 지정된 배열로 제공 할 수 있습니다.

보다


차이점은 다음과 같습니다. 마지막 줄 바꿈에 유의하십시오.

> shell_exec('date')
string(29) "Wed Mar  6 14:18:08 PST 2013\n"
> exec('date')
string(28) "Wed Mar  6 14:18:12 PST 2013"

> shell_exec('whoami')
string(9) "mark\n"
> exec('whoami')
string(8) "mark"

> shell_exec('ifconfig')
string(1244) "eth0      Link encap:Ethernet  HWaddr 10:bf:44:44:22:33  \n          inet addr:192.168.0.90  Bcast:192.168.0.255  Mask:255.255.255.0\n          inet6 addr: fe80::12bf:ffff:eeee:2222/64 Scope:Link\n          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1\n          RX packets:16264200 errors:0 dropped:1 overruns:0 frame:0\n          TX packets:7205647 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:1000 \n          RX bytes:13151177627 (13.1 GB)  TX bytes:2779457335 (2.7 GB)\n"...
> exec('ifconfig')
string(0) ""

백틱 연산자의 사용법 은과 동일합니다 shell_exec().

업데이트 : 마지막으로 설명해야합니다. 몇 년 후이 답변을 보면 왜 그것이 비 었는지 모르겠습니다! Daniel은 위에서 설명했습니다 exec. 마지막 줄만 반환 하기 때문에 ifconfig마지막 줄은 비어 있습니다.


shell_exec-쉘을 통해 명령을 실행 하고 완전한 출력을 문자열로 반환

exec -외부 프로그램을 실행하십시오.

차이점은 shell_exec출력을 반환 값으로 얻는다 는 것입니다 .


여기서 다루지 않은 몇 가지 차이점 :

  • exec ()를 사용하면 선택적 출력 변수를 전달할 선택적 param 변수를 전달할 수 있습니다. 경우에 따라 특히 명령 출력이 이미 테이블 형식 인 경우 시간을 절약 할 수 있습니다.

비교:

exec('ls', $out);
var_dump($out);
// Look an array

$out = shell_exec('ls');
var_dump($out);
// Look -- a string with newlines in it

반대로, 명령의 출력이 xml 또는 json 인 경우 입력을 다른 형식으로 후 처리해야하므로 각 행을 배열의 일부로 갖는 것은 원하는 것이 아닙니다.이 경우 shell_exec를 사용하십시오. .

shell_exec는 * nix에 사용 된 백틱 연산자의 별명임을 지적 할 가치가 있습니다.

$out = `ls`;
var_dump($out);

exec는 실행 된 명령의 리턴 코드를 제공하는 추가 매개 변수도 지원합니다.

exec('ls', $out, $status);
if (0 === $status) {
    var_dump($out);
} else {
    echo "Command failed with status: $status";
}

shell_exec 매뉴얼 페이지에 언급 된 것처럼 실제로 실행중인 명령에서 리턴 코드가 필요한 경우 exec를 사용할 수 밖에 없습니다.

참고 URL : https://stackoverflow.com/questions/7093860/php-shell-exec-vs-exec

반응형