Running Commands with exec()
The exec() function is one of several functions you can use to pass commands to the shell. The exec() function requires a string representing the path to the command you want to run and optionally accepts an array variable that will contain the output of the command and a scalar variable that will contain the return value (1 or 0). For example:
exec("/path/to/somecommand", $output_array, $return_val);
Listing 13.17 uses the exec() function to produce a directory listing with the shell-based ls command.
Listing 13.17. Using exec() and ls to Produce a Directory Listing (UNIX Only)
In line 2, we issue the ls command using the exec() function. We place the output of the command into the $output_array array and the return value in the $return_val variable. Line 3 simply prints the return value, while the foreach loop in lines 46 prints out each element in $output_array.
By the Way
The string in line 3 includes an opening <pre> tag, and line 7 provides a closing tag. This simply ensures that your directory listing will be readable, using HTML preformatted text.
If you save this code as exec_ls.php, place it in your document root, and access it with your web browser, you may see something like Figure 13.8 (with your actual information, not mine, of course).
Figure 13.8. Output of exec_ls.php.
As wonderful as PHP is, there may come a time when you want to integrate some sort of functionality within your PHP-based application, but someone else has already written code in Perl that does the same thing. In cases like this, there's no need to reinvent the wheel because you can simply use exec() to access the existing script and utilize its functionality. However, remember that calling an external process will always add some amount of additional overhead to your script, in terms of both time and memory usage.