2010-10-08 60 views
16

¿Cómo puedo obtener la ruta bin de php desde PHP? Lo vi en phpinfo(); pero necesito otro método que lo consiga en Linux y sistemas de Windows.¿Cómo obtener la ruta del PHP BIN desde PHP?

+0

posible duplicado de [Obtener ejecutable PHP actual desde dentro guión?] (Http://stackoverflow.com/questions/2372624/get-current-php-executable-from-within -script) – Gordon

Respuesta

19

Se puede utilizar:

$_SERVER['_'] 

Además, the predefined constant PHP_BINDIR da el directorio donde se encuentra el ejecutable php.

Ejemplo en Codepad y ideone.

Parece que, por razones de seguridad, $_SERVER los valores no están expuestos. (Supongo. Por favor corrígeme si estoy equivocado).

+10

En Windows, la constante PHP_BINDIR parece apuntar a "C: \ php5" incluso si php está en un directorio totalmente diferente, como para mí "C: \ dev \ php". Aquí, PHP se configura como un módulo de Apache. – SirDarius

+0

El servidor en el que estaba desafortunadamente devolvió NULL, supongo que por razones de seguridad. – Chris

+1

PHP_BINDIR funcionó para mí en Debian. $ _SERVER ['_'] no lo hizo. –

8

Un método que utiliza variables de entorno, suponiendo que el ejecutable php está en la ruta del sistema.

function getPHPExecutableFromPath() { 
    $paths = explode(PATH_SEPARATOR, getenv('PATH')); 
    foreach ($paths as $path) { 
    // we need this for XAMPP (Windows) 
    if (strstr($path, 'php.exe') && isset($_SERVER["WINDIR"]) && file_exists($path) && is_file($path)) { 
     return $path; 
    } 
    else { 
     $php_executable = $path . DIRECTORY_SEPARATOR . "php" . (isset($_SERVER["WINDIR"]) ? ".exe" : ""); 
     if (file_exists($php_executable) && is_file($php_executable)) { 
      return $php_executable; 
     } 
    } 
    } 
    return FALSE; // not found 
} 
+0

Esto funcionó para mí en Windows y Linux, ¡gracias! – SeanDowney

+0

@ggirtsou No obtengo su edición ... ¿por qué la ruta de Windows contiene una entrada con "php.exe"? Si es algo específico de XAMPP, al menos agregue un comentario significativo en el código. – SirDarius

+0

@SirDarius sí, la edición se basa en la salida de XAMPP. –

14

Linux Sólo El comando "que" para encontrar php.

$phpPath = exec("which php"); 

Nota esto no garantiza el mismo ejecutable php que su servidor web puede estar usando, sino más bien el primer caso que se encontró mientras mira a través de los caminos.

+0

Buen punto, pero la mayoría de los servicios de hosting no permiten ' exec' en absoluto. – Hossein

+0

Sí, algunos hosts no, otros lo hacen, supongo que depende de su contexto. – SeanDowney

+1

Esto no necesariamente da como resultado el binario php correcto, ya que Apache y la línea de comandos podrían estar usando otros diferentes. –

4

Quizás la mejor solución esté en el componente de proceso de Symfony: https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Process/PhpExecutableFinder.php y https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Process/ExecutableFinder.php. En uso:

<?php 
    use Symfony\Component\Process\PhpExecutableFinder; 

    $phpFinder = new PhpExecutableFinder; 
    if (!$phpPath = $phpFinder->find()) { 
     throw new \Exception('The php executable could not be found, add it to your PATH environment variable and try again'); 
    } 

    return $phpPath; 
1

Normalmente, en una sencilla instalación predeterminada de PHP en Windows, el archivo php.ini se encuentra y se carga desde el mismo directorio de PHP binario.

Para simplificar, los usuarios de Windows:

echo dirname(php_ini_loaded_file()).DIRECTORY_SEPARATOR.'php.exe'; 

voilà!

Por supuesto, si está utilizando múltiples archivos ini, puede que no funcione si los archivos no están en el mismo directorio binario de PHP. Por cierto, esto puede resolver la mayoría de los casos. Desarrolladores de Windows que ejecutan PHP desde el entorno de desarrollo local.

+0

lo siento, olvidé de decir que estoy usando mac –

4

En windows, usando wamp, puede usar la variable ini --dirección_de_extensión-- como se coloca en la carpeta php.

así:

echo str_replace('ext/', 'php.exe', ini_get('extension_dir')); 
0

Es muy fácil!

var_dump(getenv('PHPBIN')); 

Pero funciona sólo en Windows, por lo que debe utilizar este ansver - https://stackoverflow.com/a/3889630/2574125

cómo llegué a esto? Acabo de escribir echo echo phpinfo(); y busqué la ruta php. Juse ver aquí: how i found php path

entonces acabo de llegar aquí: php getenv y ... ves el resultado. Úselo, amigos.

+0

Devuelve un resultado erróneo en XAMMP – ymakux

0

de Windows, XAMPP

$php = getenv('PHPRC') . '/php.exe'; 

if(is_file($expected)){ 
    return $php; 
} 
Cuestiones relacionadas