00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00081 class t3lib_exec {
00082
00091 function checkCommand($cmd, $handler='') {
00092
00093 t3lib_exec::_init();
00094 $osType = t3lib_exec::_getOS();
00095
00096
00097 #debug($GLOBALS['t3lib_exec'], 't3lib_exec', __LINE__, __FILE__);
00098
00099 if ($handler && !t3lib_exec::checkCommand($handler)) {
00100 return -1;
00101 }
00102
00103 if ($GLOBALS['t3lib_exec']['apps'][$cmd]['valid']) {
00104 return true;
00105 }
00106
00107 if (isset($GLOBALS['t3lib_exec']['apps'][$cmd]['valid'])) {
00108 return false;
00109 }
00110
00111 reset($GLOBALS['t3lib_exec']['paths']);
00112 foreach($GLOBALS['t3lib_exec']['paths'] as $path => $validPath) {
00113
00114 if ($validPath) {
00115 if ($osType=='WIN') {
00116 if (@is_file($path.$cmd)) {
00117 $GLOBALS['t3lib_exec']['apps'][$cmd]['app'] = $cmd;
00118 $GLOBALS['t3lib_exec']['apps'][$cmd]['path'] = $path;
00119 $GLOBALS['t3lib_exec']['apps'][$cmd]['valid'] = true;
00120 return true;
00121 }
00122 if (@is_file($path.$cmd.'.exe')) {
00123 $GLOBALS['t3lib_exec']['apps'][$cmd]['app'] = $cmd.'.exe';
00124 $GLOBALS['t3lib_exec']['apps'][$cmd]['path'] = $path;
00125 $GLOBALS['t3lib_exec']['apps'][$cmd]['valid'] = true;
00126 return true;
00127 }
00128 } else {
00129 if (@is_executable($path.$cmd)) {
00130 $GLOBALS['t3lib_exec']['apps'][$cmd]['app'] = $cmd;
00131 $GLOBALS['t3lib_exec']['apps'][$cmd]['path'] = $path;
00132 $GLOBALS['t3lib_exec']['apps'][$cmd]['valid'] = true;
00133 return true;
00134 }
00135 }
00136 }
00137 }
00138
00139
00140 if ($osType=='UNIX') {
00141 $cmd = @exec ('which '.$val['cmd']);
00142
00143 if (@is_executable($cmd)) {
00144 $GLOBALS['t3lib_exec']['apps'][$cmd]['app'] = $cmd;
00145 $GLOBALS['t3lib_exec']['apps'][$cmd]['path'] = dirname($cmd).'/';
00146 $GLOBALS['t3lib_exec']['apps'][$cmd]['valid'] = true;
00147 return true;
00148 }
00149 }
00150
00151 return false;
00152 }
00153
00162 function getCommand($cmd, $handler='', $handlerOpt='') {
00163
00164 t3lib_exec::_init();
00165
00166
00167 if ($handler) {
00168 $handler = t3lib_exec::getCommand($handler);
00169
00170 if (!$handler) {
00171 return -1;
00172 }
00173 $handler .= ' '.$handlerOpt.' ';
00174 }
00175
00176
00177 if (!t3lib_exec::checkCommand($cmd)) {
00178 return false;
00179 }
00180 $cmd = $GLOBALS['t3lib_exec']['apps'][$cmd]['path'].$GLOBALS['t3lib_exec']['apps'][$cmd]['app'].' ';
00181
00182 return $handler.$cmd;
00183 }
00184
00191 function addPaths($paths) {
00192 t3lib_exec::_initPaths($paths);
00193 }
00194
00201 function _getPaths() {
00202 global $TYPO3_CONF_VARS;
00203
00204 $pathsArr = array();
00205 $sysPathArr = array();
00206 $osType = t3lib_exec::_getOS();
00207
00208
00209
00210 if ($imPath = ($TYPO3_CONF_VARS['GFX']['im_path_lzw'] ? $TYPO3_CONF_VARS['GFX']['im_path_lzw'] : $TYPO3_CONF_VARS['GFX']['im_path'])) {
00211 $imPath = t3lib_exec::_fixPath($imPath);
00212 $pathsArr[$imPath] = $imPath;
00213 }
00214
00215
00216 if ($TYPO3_CONF_VARS['SYS']['binPath']) {
00217 $sysPath = t3lib_div::trimExplode(',',$TYPO3_CONF_VARS['SYS']['binPath'],1);
00218 reset($sysPath);
00219 while(list(,$val)=each($sysPath)) {
00220 $val = t3lib_exec::_fixPath($val);
00221 $sysPathArr[$val]=$val;
00222 }
00223 }
00224
00225
00226
00227
00228 # ???? t3lib_div::getIndpEnv('REQUEST_URI');
00229
00230
00231
00232 #TODO: how does this work for WIN
00233 if ($GLOBALS['_SERVER']['PATH']) {
00234 $sep = ($osType=='WIN') ? ';' : ':';
00235 $envPath = t3lib_div::trimExplode($sep,$GLOBALS['_SERVER']['PATH'],1);
00236 reset($envPath);
00237 while(list(,$val)=each($envPath)) {
00238 $val = t3lib_exec::_fixPath($val);
00239 $sysPathArr[$val]=$val;
00240 }
00241 }
00242
00243 if ($osType=='WIN') {
00244 #TODO: add the most common paths for WIN
00245 $sysPathArr = array_merge($sysPathArr, array (
00246 '/usr/bin/' => '/usr/bin/',
00247 '/perl/bin/' => '/perl/bin/',
00248 ));
00249 } else {
00250 $sysPathArr = array_merge($sysPathArr, array (
00251 '/usr/bin/' => '/usr/bin/',
00252 '/usr/local/bin/' => '/usr/local/bin/',
00253 ));
00254 }
00255
00256 #debug($pathsArr, '$pathsArr', __LINE__, __FILE__);
00257 #debug($GLOBALS['_SERVER']['PATH'], 'PATH', __LINE__, __FILE__);
00258
00259 $pathsArr = array_merge($pathsArr, $sysPathArr);
00260 return $pathsArr;
00261 }
00262
00269 function _init() {
00270 if (!$GLOBALS['t3lib_exec']['init']) {
00271
00272 t3lib_exec::_initPaths();
00273 $GLOBALS['t3lib_exec']['apps'] = array();
00274 $GLOBALS['t3lib_exec']['init'] = true;
00275 }
00276 }
00277
00285 function _initPaths($paths='') {
00286 $doCeck=false;
00287
00288
00289 if (!is_array($GLOBALS['t3lib_exec']['paths'])) {
00290 $GLOBALS['t3lib_exec']['paths'] = t3lib_exec::_getPaths();
00291 $doCeck=true;
00292 }
00293
00294 if ($paths) {
00295 $paths = t3lib_div::trimExplode(',',$paths,1);
00296 if (is_array($paths)) {
00297 reset($paths);
00298 while(list(,$path)=each($paths)) {
00299
00300 if (!preg_match('#^/#',$path)) {
00301 $path = PATH_site.$path;
00302 }
00303 if (!isset($GLOBALS['t3lib_exec']['paths'][$path])) {
00304 if (@is_dir($path)) {
00305 $GLOBALS['t3lib_exec']['paths'][$path] = $path;
00306 $GLOBALS['t3lib_exec']['allPaths'].=','.$path;
00307
00308 } else {
00309 $GLOBALS['t3lib_exec']['paths'][$path] = false;
00310 }
00311 }
00312 }
00313 }
00314 }
00315
00316 if ($doCeck) {
00317 $GLOBALS['t3lib_exec']['allPaths']='';
00318 reset($GLOBALS['t3lib_exec']['paths']);
00319 while(list($path,$valid)=each($GLOBALS['t3lib_exec']['paths'])) {
00320
00321 #TODO: what's the idea not to remove invalid paths?
00322 if ($valid) {
00323 if (!@is_dir($path)) {
00324 $GLOBALS['t3lib_exec']['paths'][$path] = false;
00325 }
00326 }
00327 if ($path = $GLOBALS['t3lib_exec']['paths'][$path]) {
00328 $GLOBALS['t3lib_exec']['allPaths'].=','.$path;
00329 }
00330 }
00331 }
00332 }
00333
00340 function _getOS() {
00341 return stristr(PHP_OS,'win')&&!stristr(PHP_OS,'darwin')?'WIN':'UNIX';
00342 }
00343
00351 function _fixPath($path) {
00352 return str_replace ('
00353 }
00354 }
00355
00356 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_exec.php']) {
00357 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_exec.php']);
00358 }
00359 ?>