1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
<?php // TODO: Eventually pull out all command line execution to run through this library. // Currently code is ducplicated between the libraries that run command line commands.
class pb_backupbuddy_commandbuddy { public function __construct() { } /* execute() * * Execute a command via the command line. * Example usage: * list( $exec_output, $exec_exit_code ) = $this->execute( 'COMMANDHHERE' ); * * @param string $command Command line to run. * @return array Associative array of the response output and exist code. Use with list to assign variables. * Format: array( EXEC_OUTPUT, EXIT_CODE ); */ public function execute( $command ) { if ( stristr( PHP_OS, 'WIN' ) && !stristr( PHP_OS, 'DARWIN' ) ) { // Windows; do nothing. } else { // Linux/Mac if ( ( ini_get( 'exec_dir' ) !== false ) && ( ini_get( 'exec_dir' ) != '' ) ) { // exec_dir PHP patch in place: http://www.kyberdigi.cz/projects/execdir/ pb_backupbuddy::status( 'details', 'exec_dir detected. Skipping path assignment.' ); } else { pb_backupbuddy::status( 'details', 'exec_dir not detected. Proceeding normally.' ); $command = 'PATH=$PATH:/usr/bin/:/usr/local/bin/:usr/local/bin:/usr/local/sbin/:/usr/sbin/:/sbin/:/usr/:/bin/' . '; ' . $command; } } // Output command (strips mysqldump passwords). if ( strstr( $command, '--password=' ) ) { $password_portion_begin = strpos( $command, '--password=' ); $password_portion_end = strpos( $command, ' ', $password_portion_begin ); //pb_backupbuddy::status( 'details', 'pass start: `' . $password_portion_begin . '`. pass end: `' . $password_portion_end . '`' ); $password_portion = substr( $command, $password_portion_begin, ( $password_portion_end - $password_portion_begin ) ); //pb_backupbuddy::status( 'details', 'pass portion: `' . $password_portion . '`.' ); $unpassworded_command = str_replace( $password_portion, '--password=*HIDDEN*', $command ); pb_backupbuddy::status( 'details', 'exec() command (password hidden) `' . $unpassworded_command . '` (with path definition).' ); unset( $unpassworded_command ); } else { pb_backupbuddy::status( 'details', 'exec() command `' . $command . '` (with path definition).' ); } $exec_output = array(); @exec( $command, $exec_output, $exec_exit_code); pb_backupbuddy::status( 'details', 'exec() command output: `' . implode( ',', $exec_output ) . '`; Exit code: `' . $exec_exit_code . '`; Exit code description: `' . pb_backupbuddy::$filesystem->exit_code_lookup( $exec_exit_code ) . '`' ); return array( $exec_output, $exec_exit_code ); } // End execute(). }
|