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 global $T3_VAR;
00093
00094 if (!t3lib_exec::_init()) {
00095 return false;
00096 }
00097
00098 $osType = t3lib_exec::_getOS();
00099
00100
00101 if ($handler && !t3lib_exec::checkCommand($handler)) {
00102 return -1;
00103 }
00104
00105 if ($T3_VAR['t3lib_exec']['apps'][$cmd]['valid']) {
00106 return true;
00107 }
00108
00109 if (isset($T3_VAR['t3lib_exec']['apps'][$cmd]['valid'])) {
00110 return false;
00111 }
00112
00113 foreach($T3_VAR['t3lib_exec']['paths'] as $path => $validPath) {
00114
00115 if ($validPath) {
00116 if ($osType=='WIN') {
00117 if (@is_file($path.$cmd)) {
00118 $T3_VAR['t3lib_exec']['apps'][$cmd]['app'] = $cmd;
00119 $T3_VAR['t3lib_exec']['apps'][$cmd]['path'] = $path;
00120 $T3_VAR['t3lib_exec']['apps'][$cmd]['valid'] = true;
00121 return true;
00122 }
00123 if (@is_file($path.$cmd.'.exe')) {
00124 $T3_VAR['t3lib_exec']['apps'][$cmd]['app'] = $cmd.'.exe';
00125 $T3_VAR['t3lib_exec']['apps'][$cmd]['path'] = $path;
00126 $T3_VAR['t3lib_exec']['apps'][$cmd]['valid'] = true;
00127 return true;
00128 }
00129 } else {
00130 if (@is_executable($path.$cmd)) {
00131 $T3_VAR['t3lib_exec']['apps'][$cmd]['app'] = $cmd;
00132 $T3_VAR['t3lib_exec']['apps'][$cmd]['path'] = $path;
00133 $T3_VAR['t3lib_exec']['apps'][$cmd]['valid'] = true;
00134 return true;
00135 }
00136 }
00137 }
00138 }
00139
00140
00141 if ($osType=='UNIX') {
00142 $cmd = @exec ('which '.$val['cmd']);
00143
00144 if (@is_executable($cmd)) {
00145 $T3_VAR['t3lib_exec']['apps'][$cmd]['app'] = $cmd;
00146 $T3_VAR['t3lib_exec']['apps'][$cmd]['path'] = dirname($cmd).'/';
00147 $T3_VAR['t3lib_exec']['apps'][$cmd]['valid'] = true;
00148 return true;
00149 }
00150 }
00151
00152 return false;
00153 }
00154
00155
00164 function getCommand($cmd, $handler='', $handlerOpt='') {
00165 global $T3_VAR;
00166
00167 if (!t3lib_exec::_init()) {
00168 return false;
00169 }
00170
00171
00172 if ($handler) {
00173 $handler = t3lib_exec::getCommand($handler);
00174
00175 if (!$handler) {
00176 return -1;
00177 }
00178 $handler .= ' '.$handlerOpt.' ';
00179 }
00180
00181
00182 if (!t3lib_exec::checkCommand($cmd)) {
00183 return false;
00184 }
00185 $cmd = $T3_VAR['t3lib_exec']['apps'][$cmd]['path'].$T3_VAR['t3lib_exec']['apps'][$cmd]['app'].' ';
00186
00187 return $handler.$cmd;
00188 }
00189
00190
00197 function addPaths($paths) {
00198 t3lib_exec::_initPaths($paths);
00199 }
00200
00201
00202
00209 function getPaths($addInvalid=false) {
00210 global $T3_VAR;
00211
00212 if (!t3lib_exec::_init()) {
00213 return array();
00214 }
00215
00216 $paths = $T3_VAR['t3lib_exec']['paths'];
00217 if(!$addInvalid) {
00218
00219 foreach($paths as $path => $validPath) {
00220 if(!$validPath) {
00221 unset($paths);
00222 }
00223 }
00224 }
00225 return $paths;
00226 }
00227
00228
00235 function _getPaths() {
00236 global $T3_VAR, $TYPO3_CONF_VARS;
00237
00238 $pathsArr = array();
00239 $sysPathArr = array();
00240 $osType = t3lib_exec::_getOS();
00241
00242
00243
00244 if ($imPath = ($TYPO3_CONF_VARS['GFX']['im_path_lzw'] ? $TYPO3_CONF_VARS['GFX']['im_path_lzw'] : $TYPO3_CONF_VARS['GFX']['im_path'])) {
00245 $imPath = t3lib_exec::_fixPath($imPath);
00246 $pathsArr[$imPath] = $imPath;
00247 }
00248
00249
00250 if ($TYPO3_CONF_VARS['SYS']['binPath']) {
00251 $sysPath = t3lib_div::trimExplode(',',$TYPO3_CONF_VARS['SYS']['binPath'],1);
00252 foreach($sysPath as $val) {
00253 $val = t3lib_exec::_fixPath($val);
00254 $sysPathArr[$val]=$val;
00255 }
00256 }
00257
00258
00259
00260 #TODO: how does this work for WIN
00261 if ($GLOBALS['_SERVER']['PATH']) {
00262 $sep = ($osType=='WIN') ? ';' : ':';
00263 $envPath = t3lib_div::trimExplode($sep,$GLOBALS['_SERVER']['PATH'],1);
00264 foreach($envPath as $val) {
00265 $val = t3lib_exec::_fixPath($val);
00266 $sysPathArr[$val]=$val;
00267 }
00268 }
00269
00270 if ($osType=='WIN') {
00271 #TODO: add the most common paths for WIN
00272 $sysPathArr = array_merge($sysPathArr, array (
00273 '/usr/bin/' => '/usr/bin/',
00274 '/perl/bin/' => '/perl/bin/',
00275 ));
00276 } else {
00277 $sysPathArr = array_merge($sysPathArr, array (
00278 '/usr/bin/' => '/usr/bin/',
00279 '/usr/local/bin/' => '/usr/local/bin/',
00280 ));
00281 }
00282
00283
00284 $pathsArr = array_merge($pathsArr, $sysPathArr);
00285
00286 return $pathsArr;
00287 }
00288
00289
00296 function _init() {
00297 global $T3_VAR, $TYPO3_CONF_VARS;
00298
00299 if ($TYPO3_CONF_VARS['BE']['disable_exec_function']) {
00300 return false;
00301 }
00302 if (!$T3_VAR['t3lib_exec']['init']) {
00303 t3lib_exec::_initPaths();
00304 $T3_VAR['t3lib_exec']['apps'] = array();
00305 $T3_VAR['t3lib_exec']['init'] = true;
00306 }
00307 return true;
00308 }
00309
00310
00318 function _initPaths($paths='') {
00319 global $T3_VAR;
00320
00321 $doCeck=false;
00322
00323
00324 if (!is_array($T3_VAR['t3lib_exec']['paths'])) {
00325 $T3_VAR['t3lib_exec']['paths'] = t3lib_exec::_getPaths();
00326 $doCeck=true;
00327 }
00328
00329 if ($paths) {
00330 $paths = t3lib_div::trimExplode(',',$paths,1);
00331 if (is_array($paths)) {
00332 foreach($paths as $path) {
00333
00334 if (!preg_match('#^/#',$path)) {
00335 $path = PATH_site.$path;
00336 }
00337 if (!isset($T3_VAR['t3lib_exec']['paths'][$path])) {
00338 if (@is_dir($path)) {
00339 $T3_VAR['t3lib_exec']['paths'][$path] = $path;
00340 $T3_VAR['t3lib_exec']['allPaths'].=','.$path;
00341
00342 } else {
00343 $T3_VAR['t3lib_exec']['paths'][$path] = false;
00344 }
00345 }
00346 }
00347 }
00348 }
00349
00350 if ($doCeck) {
00351 $T3_VAR['t3lib_exec']['allPaths']='';
00352 foreach($T3_VAR['t3lib_exec']['paths'] as $path => $valid) {
00353
00354 if ($valid AND !@is_dir($path)) {
00355 $T3_VAR['t3lib_exec']['paths'][$path] = false;
00356 }
00357 if ($path = $T3_VAR['t3lib_exec']['paths'][$path]) {
00358 $T3_VAR['t3lib_exec']['allPaths'].=','.$path;
00359 }
00360 }
00361 }
00362 }
00363
00364
00371 function _getOS() {
00372 return stristr(PHP_OS,'win')&&!stristr(PHP_OS,'darwin')?'WIN':'UNIX';
00373 }
00374
00375
00383 function _fixPath($path) {
00384 return str_replace ('
00385 }
00386 }
00387
00388 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_exec.php']) {
00389 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_exec.php']);
00390 }
00391 ?>