2010-01-31 6 views
5

Je ne trouve pas le moyen d'obtenir le répertoire personnel de l'utilisateur (par exemple /home/jack, quoi que ce soit ~ en points bas) en PHP utilisant CGI (suPHP). Le tableau $ _ENV est vide et getenv ('HOME') ne renvoie rien.Lire le répertoire personnel de l'utilisateur à partir de PHP

La raison pour laquelle je veux faire ceci est qu'en l'absence de configuration indiquant autrement, je veux trouver des fichiers variables utilisés par mon application dans /home/user/monappelmethode, comme le font la plupart des applications Linux.


J'ai construit quelque chose, mais ce n'est pas le meilleur; Bien que cela fonctionne, il suppose beaucoup de choses sur le système (par exemple, la présence 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 utilisant CGI? Qui serait l'utilisateur actuel dans ce contexte? –

+1

En raison de suPHP (et aussi de suexec et de tout autre moyen), le processus PHP est exécuté en tant qu'utilisateur propriétaire du fichier de script (.php). –

+0

Votre solution suppose également que l'utilisateur que le script s'exécute est autorisé à lire le fichier, ce que normalement seul root devrait être capable de faire ... –

Répondre

6
+1

Parfait. Connaissez-vous un équivalent Windows? –

+1

Je n'ai jamais fait aucune programmation PHP sur Windows, donc non – kolbyjack

+0

Après avoir parcouru un peu le manuel, vous pourrez peut-être utiliser le W32api (http://us.php.net/manual/fr/w32api.examples- uptime.php) avec SHGetFolderPath (CSIDL_PERSONAL?) (http://msdn.microsoft.com/en-us/library/bb762181%28VS.85%29.aspx) pour obtenir le dossier Mes documents sous Windows – kolbyjack

4

Si safemode est désactivé, essayez celui-ci

$homedir = `cd ~ && pwd`; 
Questions connexes