2010-01-31 23 views
5

No encuentro la forma de obtener el directorio principal del usuario (por ejemplo, /home/jack; lo que sea ~ en puntos bash) en PHP utilizando CGI (suPHP). El array $ _ENV está vacío, y getenv ('HOME') no devuelve nada.Lea el directorio de inicio de usuario de PHP

La razón por la que quiero hacer esto es que en ausencia de configuración diciendo lo contrario, quiero encontrar archivos de variables utilizadas por mi solicitud en /home/user/.myappnamehere, como la mayoría de las aplicaciones de Linux hacen.


He construido algo, pero no es el mejor; Mientras que funciona, supone mucho sobre el sistema (por ejemplo, la presencia de/etc/passwd)

$usr = get_current_user(); 
    $passwd = file('/etc/passwd'); 
    $var = false; 
    foreach ($passwd as $line) { 
     if (strstr($line, $usr) !== false) { 
      $parts = explode(':', $line); 
      $var = realpath($parts[5].'/.report'); 
      break; 
     } 
    }
+0

PHP usando CGI? ¿Quién sería el usuario actual en ese contexto? –

+1

Debido a suPHP (y también con suexec y cualquier otra forma que exista), el proceso de PHP se ejecuta como el usuario que posee el archivo de script (.php). –

+0

Su solución también supone que el usuario ejecuta la secuencia de comandos ya que está autorizado a leer el archivo, que normalmente solo root debería poder ... –

Respuesta

6
+1

Perfecto. ¿Conoces un equivalente de Windows? –

+1

Nunca he hecho ninguna programación php en Windows, así que no – kolbyjack

+0

Después de mirar un poco el manual, es posible que pueda usar el W32api (http://us.php.net/manual/en/w32api.examples- uptime.php) junto con SHGetFolderPath (CSIDL_PERSONAL?) (http://msdn.microsoft.com/en-us/library/bb762181%28VS.85%29.aspx) para obtener la carpeta Mis documentos en Windows – kolbyjack

4

Si safemode está deshabilitado, pruebe este

$homedir = `cd ~ && pwd`; 
Cuestiones relacionadas