que obtener ejecutar desde consola comando cli cake bake __file__ php

ejecutar - ¿Cómo obtener el directorio de inicio desde un script PHP CLI?



php cli options (10)

$ _SERVER [''HOME''] y getenv (''home'') no funcionaron para mí.

Sin embargo, en PHP 5.5+, esto funcionó para dar al directorio de inicio donde se encuentra el archivo:

explode( ''/'', __FILE__ )[2]

Desde la línea de comandos, puedo obtener el directorio de inicio de esta manera:

~/

¿Cómo puedo obtener el directorio de inicio dentro de mi script PHP CLI?

#!/usr/bin/php <?php echo realpath(~/); ?>


Depende de dónde estés y lo que estés tratando de hacer.

$_SERVER es confiable para una secuencia de comandos que no sea del servidor, PERO $_ENV[''HOME''] podría ser mejor para una secuencia de comandos de shell estándar. Siempre puede print_r( $GLOBALS ) y ver qué le da su entorno para jugar. phpinfo() también escupe plaintxt cuando se llama desde una secuencia de comandos de CLI, y solo el buen ole php -i ejecutado desde una shell hará lo mismo.


Esta función está tomada del proyecto Drush .

/** * Return the user''s home directory. */ function drush_server_home() { // Cannot use $_SERVER superglobal since that''s empty during UnitUnishTestCase // getenv(''HOME'') isn''t set on Windows and generates a Notice. $home = getenv(''HOME''); if (!empty($home)) { // home should never end with a trailing slash. $home = rtrim($home, ''/''); } elseif (!empty($_SERVER[''HOMEDRIVE'']) && !empty($_SERVER[''HOMEPATH''])) { // home on windows $home = $_SERVER[''HOMEDRIVE''] . $_SERVER[''HOMEPATH'']; // If HOMEPATH is a root directory the path can end with a slash. Make sure // that doesn''t happen. $home = rtrim($home, ''///''); } return empty($home) ? NULL : $home; }


Este es el método que utilicé en un proyecto reciente:

exec(''echo $HOME'')

Lo guardé en mi objeto haciendo esto:

$this->write_Path = exec(''echo $HOME'');

Pero realmente puedes guardarlo de la manera que quieras y usarlo de cualquier manera que creas conveniente.


PHP le permite obtener el directorio de inicio de cualquiera de los usuarios del sistema operativo. Hay 2 maneras.

Método 1:

En primer lugar, debe averiguar el ID de usuario del sistema operativo y almacenarlo en algún lugar (por ejemplo, la base de datos o un archivo de configuración).

// Obviously this gotta be ran by the user which the home dir // folder is needed. $uid = posix_getuid();

Este bit de código puede ser ejecutado por cualquier usuario del sistema operativo, incluso el usuario web-server www-data habitual, siempre que pase la ID de usuario objetivo correcta que se recopiló previamente.

$shell_user = posix_getpwuid($uid); print_r($shell_user);

Documentation

Método # 2:

La misma lógica de posix_getpwuid (). Aquí tienes que pasar el nombre de usuario del sistema operativo de destino en lugar de su uid.

$shell_user = posix_getpwnam(''johndoe''); print_r($shell_user);

Documentation


Pruebe $_SERVER[''DOCUMENT_ROOT''] como su directorio de inicio.


Puede obtener el valor de $ HOME del entorno:

<?php $home = getenv("HOME"); ?>


Si, por algún motivo, getenv(''HOME'') no funciona, o el sistema operativo del servidor es Windows, puede usar exec("echo ~") o exec("echo %userprofile%") para obtener el directorio de usuarios. Por supuesto, la función exec tiene que estar disponible (algunas empresas de hosting deshabilitan ese tipo de funciones por razones de seguridad, pero eso es más improbable que ocurra) .

Aquí hay una función php que probará $_SERVER , getenv y finalmente verificará si existe la función exec y usará el comando del sistema apropiado para obtener el directorio del usuario:

function homeDir() { if(isset($_SERVER[''HOME''])) { $result = $_SERVER[''HOME'']; } else { $result = getenv("HOME"); } if(empty($result) && function_exists(''exec'')) { if(strncasecmp(PHP_OS, ''WIN'', 3) === 0) { $result = exec("echo %userprofile%"); } else { $result = exec("echo ~"); } } return $result; }


Use $_SERVER[''HOME'']

Editar:

Para completarlo, vea lo que print_r($_SERVER) me dio, ejecutado desde la línea de comando:

Array ( [TERM_PROGRAM] => Apple_Terminal [TERM] => xterm-color [SHELL] => /bin/bash [TMPDIR] => /var/folders/Lb/LbowO2ALEX4JTK2MXxLGd++++TI/-Tmp-/ [TERM_PROGRAM_VERSION] => 272 [USER] => felix [COMMAND_MODE] => unix2003 [__CF_USER_TEXT_ENCODING] => 0x1F5:0:0 [PATH] =>/Library/Frameworks/Python.framework/Versions/Current/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/usr/X11/bin [PWD] => /Users/felix/Desktop [LANG] => de_DE.UTF-8 [SHLVL] => 1 [HOME] => /Users/felix [LOGNAME] => felix [DISPLAY] => /tmp/launch-XIM6c8/:0 [_] => ./test_php2 [OLDPWD] => /Users/felix [PHP_SELF] => ./test_php2 [SCRIPT_NAME] => ./test_php2 [SCRIPT_FILENAME] => ./test_php2 [PATH_TRANSLATED] => ./test_php2 [DOCUMENT_ROOT] => [REQUEST_TIME] => 1260658268 [argv] => Array ( [0] => ./test_php2 ) [argc] => 1 )

Espero no exponer información de seguridad relevante;)

Compatibilidad de Windows

Tenga en cuenta que $_SERVER[''HOME''] no está disponible en Windows. En lugar de eso, la variable se divide en $_SERVER[''HOMEDRIVE''] y $_SERVER[''HOMEPATH''] .


dirname(__DIR__);