>  기사  >  백엔드 개발  >  PHP 시스템 프로그램 실행 기능(system, passthru, exec)에 대한 간단한 분석(코드 포함)

PHP 시스템 프로그램 실행 기능(system, passthru, exec)에 대한 간단한 분석(코드 포함)

不言
不言원래의
2018-08-03 11:43:323255검색

이 글은 PHP 시스템 프로그램 실행 기능(system, passthru, exec)(코드 포함)에 대한 간단한 분석을 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다. .

exec — 외부 프로그램 실행

string exec ( string $command [, array &$output [, int &$return_var ]] )

Example

<?php
        echo exec("ls",$output);
        echo "</br>";
        print_r($file);
?>

실행 결과:

test.php
Array ([0] => index.php [1] => test.php)

분석:
exec는 실행 결과를 적극적으로 반환하지 않고 결과의 마지막 줄만 반환합니다.
두 번째 매개변수를 사용하면 지정된 배열로 출력할 수 있습니다. 이 배열의 각 레코드는 출력 라인을 나타냅니다. 다른 시스템 외부 명령을 반복적으로 실행하면 결과를 출력할 때 unset() 배열이 지워집니다. 각 시스템 외부 명령은 혼란을 방지합니다.
세 번째 매개 변수는 명령 실행 상태 코드를 가져오는 데 사용됩니다. 일반적으로 실행이 성공하면 0이 반환됩니다.

passthru — 외부 프로그램을 실행하고 원래 출력을 표시합니다.

void passthru ( string $command [, int &$return_var ] )

Example

<?php
        passthru("ls");
?>

실행 결과:

index.phptest.php

분석:
exec() 함수와 유사하며 외부 명령을 실행하는 데에도 사용되지만 반환 값 없이 결과를 브라우저에 직접 출력합니다(처리 없이 원시 출력). 프로세서를 사용하는 경우 다음과 같은 기능을 사용하십시오. 이미지 스트림을 직접 출력하는 명령

system — 외부 프로그램을 실행하고 출력을 표시합니다.

문자열 시스템( string $ command [, int &$return_var ] )

<?php
        system(&#39;ls&#39;, $retval);
?>

분석:

결과를 브라우저에 직접 출력합니다.
두 번째 매개변수는 외부 명령이 실행된 후의 반환 상태입니다.
성공하면 명령 출력의 마지막 줄을 반환합니다. 실패하면 FALSE를 반환합니다.
PHP가 서버 모듈에서 실행 중인 경우 시스템 () 함수는 각 출력 줄 후에 웹 서버의 출력 캐시를 자동으로 새로 고치려고 시도합니다.

shell_exec — 셸 환경을 통해 명령을 실행하고 전체 출력을 문자열로 반환합니다.

설명

string shell_exec (string $cmd)
백틱 연산자 "`"는 shell_exec() 함수와 동일한 효과를 갖습니다.
shell_exec의 반환 값
프로세스 실행 중 오류가 발생하거나 프로세스가 출력을 생성하지 못하는 경우 NULL이 반환되므로 이 함수를 사용하면 반환 값을 통해 프로세스가 성공적으로 실행되었는지 확인할 수 없습니다. 프로세스 실행의 종료 코드를 확인해야 하는 경우 exec() 함수를 사용하십시오.

Example

<?php
$output = `ls -al`;
echo "<pre class="brush:php;toolbar:false">$output
"; ?>

참고:

backtick 연산자는 안전 모드가 활성화되거나 shell_exec()가 꺼진 경우 아무런 효과가 없습니다.
다른 언어와 달리 큰따옴표로 묶인 문자열에는 백틱을 사용할 수 없습니다.

예제 #1 shell_exec() 루틴

PHP가 안전 모드에서 실행 중인 경우에는 이 함수를 사용할 수 없습니다.

<?php
$output = shell_exec(&#39;ls -lart&#39;);
echo "<pre class="brush:php;toolbar:false">$output
"; ?>

escapeshellargExplanation
string escapeshellarg ( string $arg )
escapeshellarg()는 문자열에 작은 따옴표를 추가하고 기존 작은 따옴표를 인용하거나 이스케이프할 수 있으므로 문자열을 직접 쉘에 전달할 수 있습니다. 기능을 유지하면서도 안전을 보장합니다. 이 기능은 사용자가 입력한 일부 매개변수에 사용해야 합니다. 쉘 함수에는 exec(), system() 실행 연산자가 포함됩니다.

Parameters

arg
트랜스코딩이 필요한 매개변수입니다.

반환 값

변환 후 문자열.

Example

<?php
system(&#39;ls &#39;.escapeshellarg($dir));
?>

escapeshellcmdDescription
string escapeshellcmd ( string $command )
escapeshellcmd()는 셸 명령을 속여 임의의 명령을 실행하도록 할 수 있는 문자열의 문자를 이스케이프합니다. 이 함수는 사용자가 입력한 데이터가 exec(), system() 함수 또는 실행 연산자에 전달되기 전에 이스케이프되도록 보장합니다.

백슬래시()는 `|*?~a8093152e673feb7aba1828c43532094^()[]{}$, x0A 및 xFF 문자 앞에 삽입됩니다. ' 및 "는 일치하지 않는 경우에만 이스케이프됩니다. Windows 플랫폼에서는 이러한 모든 문자와 % 및 ! 문자가 공백으로 대체됩니다.

매개변수
명령
이스케이프 명령.

반환 값

이스케이프됨

<?php
// 我们故意允许任意数量的参数
$command = &#39;./configure &#39;.$_POST[&#39;configure_options&#39;];
$escaped_command = escapeshellcmd($command);
 
system($escaped_command);
?>

경고

escapeshellcmd()는 전체 명령 문자열에 사용해야 합니다. 그럼에도 불구하고 공격자는 Escapeshellarg() 함수를 사용하여 원하는 수의 인수를 전달할 수 있습니다.

_get 메서드의 예제 코드. php

php에서 파일을 조작하는 다양한 방법 요약(코드 포함)

위 내용은 PHP 시스템 프로그램 실행 기능(system, passthru, exec)에 대한 간단한 분석(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.