Exec 또는 시스템에서 cmd 명령을 호출할 수 있습니다
코드로 바로 이동:
/**PHP가 Windows 배치 파일을 생성한 후 배치 파일을 실행합니다.*/
$filename = 't.bat';
$somecontent = 'C:
';
$somecontent .= 'cd "C:/Program Files/MySQL-Front"';
$somecontent .= '
MySQL-Front.exe 시작';
if (!$handle = fopen($filename, 'w')) {
echo "$filename 파일을 열 수 없습니다";
나가세요;
}
/**먼저 파일이 존재하고 쓰기 가능한지 확인해야 합니다.*/
if (is_writable($filename)) {
/**fwrite()를 사용할 때 $somecontent가 기록되는 곳입니다
우리가 연 파일에 $somecontent를 씁니다.*/
if (fwrite($handle, $somecontent) === FALSE) {
echo "$filename 파일에 쓸 수 없습니다.";
나가세요;
}
echo "$filename 파일에 $somecontent를 성공적으로 기록했습니다.";
fclose($handle);
} 그 밖의 {
echo "$filename 파일은 쓸 수 없습니다.";
}
exec($filename);
?>
남은 문제는 exec() 호출입니다. 시작된 애플리케이션을 닫을 때까지 PHP가 계속 실행됩니다. 이로 인해 PHP 실행 시간이 초과됩니다. 이 문제를 해결하는 방법을 모르겠습니다. 전문가들이 여기를 지나가며 답변을 남겨주셨으면 좋겠습니다! 앞으로는 해결해서 여기에 업데이트하겠습니다!
다음 내용은 정보에서 나온 것입니다
============================================= === ==
PHP에 내장된 함수인 exec와 system은 시스템 명령(셸 명령)을 호출할 수 있으며, 물론 passthru, escapeshellcmd 등의 함수도 있습니다.
많은 경우 PHP의 exec, 시스템 및 기타 기능을 사용하여 시스템 명령을 호출하면 작업을 더 빠르고 효율적으로 완료하는 데 도움이 될 수 있습니다.
참고: 이 두 기능을 사용하려면 php.ini의 안전 모드를 꺼야 합니다. 그렇지 않으면 PHP는 보안상의 이유로 시스템 명령 호출을 허용하지 않습니다.
먼저 PHP 매뉴얼에서 이 두 함수에 대한 설명을 살펴보세요.
exec --- 외부 프로그램 실행
구문: string exec ( string command [, array &output [, int &return_var]] )
설명:
exec()는 주어진 명령을 실행하지만 아무 것도 출력하지 않습니다. 단순히 명령을 실행하고 명령에서 모든 정보를 가져와야 하는 경우 이를 사용할 수 있습니다. 패스쓰루() 함수.
인수 array가 주어지면, 지정된 배열은 명령에 의해 출력된 각 줄로 채워집니다. 참고: 배열에 이미 일부 요소가 포함되어 있으면 exec()는 이를 배열의 끝에 추가합니다. 이 함수에 요소를 추가하려면 배열을 exec()에 전달하기 전에 unset()을 호출하면 됩니다.
매개변수 array 및 return_var가 제공되면 실행에서 반환된 상태 명령이 이 변수에 기록됩니다.
참고: 사용자 입력의 데이터가 이 함수에 전달되도록 허용하는 경우 escapeshellcmd()를 사용하여 사용자가 시스템을 속여 임의의 명령을 실행하지 못하도록 해야 합니다.
참고: 이 함수를 사용하여 프로그램을 시작하고 백그라운드에서 실행되는 동안 그대로 두려면 프로그램의 출력이 파일이나 일부 출력 스트림으로 리디렉션되는지 확인해야 합니다. 그렇지 않으면 PHP가 리디렉션됩니다. 프로그램 실행이 끝날 때까지 정지합니다.
시스템 --- 외부 프로그램 실행 및 출력 표시
구문: 문자열 시스템( 문자열 명령 [, int &return_var] )
설명:
system()은 주어진 명령 명령을 실행하고 결과를 출력합니다. return_var 매개변수가 제공되면 실행된 명령의 상태 코드가 이 변수에 기록됩니다.
참고: 사용자 입력의 데이터가 이 함수에 전달되도록 허용하는 경우 escapeshellcmd()를 사용하여 사용자가 시스템을 속여 임의의 명령을 실행하지 못하도록 해야 합니다.
참고: 이 함수를 사용하여 프로그램을 시작하고 백그라운드에서 실행되는 동안 그대로 두려면 프로그램의 출력이 파일이나 일부 출력 스트림으로 리디렉션되는지 확인해야 합니다. 그렇지 않으면 PHP가 리디렉션됩니다. 프로그램 실행이 끝날 때까지 정지합니다.
PHP가 서버 모듈로 실행 중인 경우 system()은 각 출력 줄 이후에 웹 서버의 출력 버퍼를 자동으로 지우려고 시도합니다.
성공하면 명령의 마지막 줄을 반환하고, 실패하면 false를 반환합니다.
명령을 실행하고 명령에서 모든 데이터를 가져와야 하는 경우 passthru() 함수를 사용할 수 있습니다.
이 두 가지는 시스템 쉘 명령을 호출하는 데 사용됩니다.
차이점:
Exec은 모든 실행 결과를 $output 함수(배열)로 반환할 수 있습니다. $status는 실행 상태를 의미하며 1은 실패를 의미합니다
systerm은 $output 함수를 제공할 필요가 없습니다. 마찬가지로 $return_var는 실행 상태 코드입니다.
실행 예:
위 지침이 다소 혼란스러워 보일 수 있지만 두 가지 예제를 실행해 보면 이해가 될 것입니다!
【시스템】
ROOT_PATH '/include/global.func.php'를 포함합니다.
$cmdTest = 'ps -ef | grep magent';
$lastLine = 시스템($cmdTest, $retVal);
write_log('$lastLine');
write_log($lastLine);
write_log('$retVal');
write_log($retVal);
?>
출력:
[실행]
ROOT_PATH '/include/global.func.php'를 포함합니다.
$cmdTest = 'ps -ef | grep magent';
$lastLine = exec($cmdTest, $output, $retVal);
write_log('$lastLine');
write_log($lastLine);
write_log('$output');
write_log($output);
write_log('$retVal');
write_log($retVal);
?>
출력:
2014-10-15 16:25:00
$retVal
2014-10-15 16:25:00
0
결론:
자세한 출력 결과가 필요하다면 exec()를 사용하세요! 나는 보통 외부 명령을 실행할 때 exec()를 사용합니다!참고:
http://php.net/manual/zh/function.system.php
http://php.net/manual/zh/function.exec.php