2010-01-31 19 views
5

Ich kann keinen Weg finden, das Home-Verzeichnis des Benutzers (z. B. /home/jack; was auch immer ~ in bash Punkte zu) in PHP mit CGI (suPHP). Das Array $ _ENV ist leer und getenv ('HOME') gibt nichts zurück.Benutzerverzeichnis von PHP lesen

Der Grund, warum ich dies tun wollen ist, dass in Abwesenheit von Konfiguration anders sagen: Ich möchte durch meine Anwendung verwendet variable Dateien finden in /home/user/.myappnamehere, da die meisten Linux-Anwendungen zu tun.


Ich habe etwas gebaut, aber es ist nicht das Beste; Während es funktioniert, nimmt er viel über das System (zB das Vorhandensein von/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 mit CGI? Wer wäre der aktuelle Benutzer in diesem Kontext? –

+1

Wegen suPHP (und auch mit suexec und was auch immer andere Möglichkeiten gibt) wird der PHP-Prozess als der Benutzer ausgeführt, der die Skriptdatei (.php) besitzt. –

+0

Ihre Lösung geht auch davon aus, dass der Benutzer das Skript ausführt, wie es die Datei lesen darf, was normalerweise nur root tun sollte ... –

Antwort

6
+1

Perfekt. Kennst du zufällig ein Windows-Äquivalent? –

+1

Ich habe noch nie eine PHP-Programmierung unter Windows gemacht, also keine – kolbyjack

+0

Nachdem ich das Handbuch ein wenig durchgelesen habe, können Sie vielleicht das W32api (http://us.php.net/manual/en/w32api.examples- uptime.php) zusammen mit SHGetFolderPath (CSIDL_PERSONAL?) (http://msdn.microsoft.com/en-us/library/bb762181%28VS.85%29.aspx), um den Ordner Eigene Dateien unter Windows zu erhalten – kolbyjack

4

Wenn safemode deaktiviert ist, versuchen Sie diese

$homedir = `cd ~ && pwd`;