source: sandbox/2.5.1-expresso2/prototype/library/Symfony/Component/Process/ExecutableFinder.php @ 7578

Revision 7578, 2.5 KB checked in by angelo, 12 years ago (diff)

Ticket #3197 - Reduzir tempo de carregamento do modulo Expresso Mail

Line 
1<?php
2
3/*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Symfony\Component\Process;
13
14/**
15 * Generic executable finder.
16 *
17 * @author Fabien Potencier <fabien@symfony.com>
18 * @author Johannes M. Schmitt <schmittjoh@gmail.com>
19 */
20class ExecutableFinder
21{
22    private static $isWindows;
23
24    private $suffixes = array('.exe', '.bat', '.cmd', '.com');
25
26    public function __construct()
27    {
28        if (null === self::$isWindows) {
29            self::$isWindows = 0 === stripos(PHP_OS, 'win');
30        }
31    }
32
33    public function setSuffixes(array $suffixes)
34    {
35        $this->suffixes = $suffixes;
36    }
37
38    public function addSuffix($suffix)
39    {
40        $this->suffixes[] = $suffix;
41    }
42
43    /**
44     * Finds an executable by name.
45     *
46     * @param string $name      The executable name (without the extension)
47     * @param string $default   The default to return if no executable is found
48     * @param array  $extraDirs Additional dirs to check into
49     *
50     * @return string The executable path or default value
51     */
52    public function find($name, $default = null, array $extraDirs = array())
53    {
54        if (ini_get('open_basedir')) {
55            $searchPath = explode(PATH_SEPARATOR, getenv('open_basedir'));
56            $dirs = array();
57            foreach ($searchPath as $path) {
58                if (is_dir($path)) {
59                    $dirs[] = $path;
60                } else {
61                    $file = str_replace(dirname($path), '', $path);
62                    if ($file == $name && is_executable($path)) {
63                        return $path;
64                    }
65                }
66            }
67        } else {
68            $dirs = array_merge(
69                explode(PATH_SEPARATOR, getenv('PATH') ?: getenv('Path')),
70                $extraDirs
71            );
72        }
73
74        $suffixes = array('');
75        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
76            $pathExt = getenv('PATHEXT');
77            $suffixes = $pathExt ? explode(PATH_SEPARATOR, $pathExt) : $this->suffixes;
78        }
79        foreach ($suffixes as $suffix) {
80            foreach ($dirs as $dir) {
81                if (is_file($file = $dir.DIRECTORY_SEPARATOR.$name.$suffix) && (self::$isWindows || is_executable($file))) {
82                    return $file;
83                }
84            }
85        }
86
87        return $default;
88    }
89}
Note: See TracBrowser for help on using the repository browser.