Php built-in functions exec and system can call system commands (shell commands). Of course, there are also passthru, escapeshellcmd and other functions.
In many cases, using the exec, system, and other functions of php to call system commands can help us complete our work better and faster. For example, exec helped me a lot when I processed the. rar file in batch two days ago.
Today, I will sort out common calls to system functions and share my experience with you.
Note: to use these two functions, the security mode in php. ini must be disabled. Otherwise, php will not allow you to call system commands for security reasons.
Let's take a look at the php Manual's explanation of the two functions:
Exec --- execute external program
Syntax: string exec (string command [, array & output [, int & return_var])
Note:
Exec () executes the command, but it does not output anything. It simply transmits the last line from the command result. If you need to execute a command, you can use the passthru () function to obtain all data from the command.
If the array parameter is given, the specified array will be filled with each line output by the command. Note: If the array already contains some elements, exec () it will be appended to the back of the array. If you do not want this function to append an element, you can call unset () before passing this array to exec ().
If the array and return_var parameters are given, the status command returned for execution will be written to this variable.
Note: If you allow data input from the user to be passed to this function, you should use escapeshellcmd () to determine that this user cannot cheat (trick) system to execute arbitrary (arbitrary) commands.
Note: If you use this function to start a program and want to leave it when running in the background (background), you must ensure that the output of this program is redirected) to a file or some output data streams, otherwise PHP will be suspended (hang) until the program execution ends.
System --- execute an external program and display the output
Syntax: string system (string command [, int & return_var])
Note:
System () executes the command and outputs the result. If the return_var parameter is given, the status code for executing the command will be written to this variable.
Note: If you allow data input from the user to be passed to this function, you should use escapeshellcmd () to determine that this user cannot cheat (trick) system to execute arbitrary (arbitrary) commands.
Note: If you use this function to start a program and want to leave it when running in the background (background), you must ensure that the output of this program is redirected) to a file or some output data streams, otherwise PHP will be suspended (hang) until the program execution ends.
If PHP runs as a server module, after each line is output, system () will try to automatically clear the web server's output buffer.
If the command succeeds, the last line of the command is returned. If the command fails, false is returned.
If you need to execute a command and obtain all the information from the command, you can use the passthru () function.
Both are used to call the system shell command,
Differences:
Exec can return all the execution results to the $ output function (array). $ status indicates that the execution status 0 indicates success 1 indicates failure.
Systerm does not need to provide the $ output function. It directly returns the result. Similarly, $ return_var indicates that the execution status code 0 indicates that success 1 indicates failure.
Exec example:
Copy codeThe Code is as follows:
<? Php
$ A = exec ("dir", $ out, $ status );
Print_r ($ );
Print_r ($ out );
Print_r ($ status );
?>
System example:
Copy codeThe Code is as follows:
<? Php
$ A = system ("dir", $ out );
Print_r ($ );
Print_r ($ out );
?>
Differences between system, exce, and passthru
System () Outputs and returns the last shell result.
Exec () does not output results. The last shell result is returned. All results can be saved to a returned array.
Passthru () only calls the command and directly outputs the command running result to the standard output device.
Similarities: both of them can obtain the command execution status code.