| Viewing file:  Shell.php (1.88 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
<?php
 /*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
 
 namespace Symfony\Component\Finder\Shell;
 
 /**
 * @author Jean-François Simon <contact@jfsimon.fr>
 */
 class Shell
 {
 const TYPE_UNIX    = 1;
 const TYPE_DARWIN  = 2;
 const TYPE_CYGWIN  = 3;
 const TYPE_WINDOWS = 4;
 const TYPE_BSD     = 5;
 
 /**
 * @var string|null
 */
 private $type;
 
 /**
 * Returns guessed OS type.
 *
 * @return int
 */
 public function getType()
 {
 if (null === $this->type) {
 $this->type = $this->guessType();
 }
 
 return $this->type;
 }
 
 /**
 * Tests if a command is available.
 *
 * @param string $command
 *
 * @return bool
 */
 public function testCommand($command)
 {
 if (self::TYPE_WINDOWS === $this->type) {
 // todo: find a way to test if Windows command exists
 return false;
 }
 
 if (!function_exists('exec')) {
 return false;
 }
 
 // todo: find a better way (command could not be available)
 exec('command -v '.$command, $output, $code);
 
 return 0 === $code && count($output) > 0;
 }
 
 /**
 * Guesses OS type.
 *
 * @return int
 */
 private function guessType()
 {
 $os = strtolower(PHP_OS);
 
 if (false !== strpos($os, 'cygwin')) {
 return self::TYPE_CYGWIN;
 }
 
 if (false !== strpos($os, 'darwin')) {
 return self::TYPE_DARWIN;
 }
 
 if (false !== strpos($os, 'bsd')) {
 return self::TYPE_BSD;
 }
 
 if (0 === strpos($os, 'win')) {
 return self::TYPE_WINDOWS;
 }
 
 return self::TYPE_UNIX;
 }
 }
 
 |