2009-04-30 5 views
27

Ich bin auf einem fremden Linux-System und müssen den Benutzer, den Apache läuft auf (und so funktioniert PHP).Erhalten Apache Linux-Benutzer von PHP

Das Ziel: Ich muss den Besitzer des Skripts (das ist kein Problem, wie ich SplFileInfo verwenden kann) und vergleichen Sie es mit dem Besitzer des Apache-Prozesses.

Ich bin offen für alternative Vorschläge.

Grüße, Mario

Edit: Zusätzliche Informationen:

Das Skript ist ein Thumbnail-Generator, die eine XML-Datei verwendet Daumen aus größeren Bildern zu erzeugen. Das Skript muss Ordner erstellen und Dateien schreiben. Da ich die PHP-Konfiguration nicht beeinflussen kann und ich keinen Shell-Zugriff habe, muss dies sehr leise geschehen. Der Erstellungsprozess wird über die Ausnahme gestoppt und sendet eine Mail bei fehlgeschlagenem Senden. Da die meisten php-Funktionen keine Exceptions auslösen können, brauche ich einige manuelle Tests, um die Umgebung zu ermitteln, in der ich mich befinde. Daher brauche ich den Apache-Benutzer, um ihn mit einem Verzeichnis- oder Dateibesitzer zu vergleichen.

+0

Als Option können Sie einfach/tmp verwenden, das für alle schreibbar ist. – Anonymous

+0

Das ist für unseren Fall nicht nützlich, da wir keine generierten Bilder außerhalb des Docroot liefern können. –

Antwort

52

können Sie die PHP-exec Funktion aufrufen auszuführen whoami:

<?php echo exec('whoami'); ?> 
+0

Danke Grant! Danke an die Anon., beide Methoden sind hier sehr gut geeignet. Ich werde die Methode von Grant verwenden, da ich nicht behaupten kann, dass die Posix-Funktion verfügbar ist. –

+1

exec() funktioniert nicht, wenn safe_mode aktiviert ist und whoami außerhalb von safe_mode_exec_dir liegt. – Anonymous

+0

absolut korrekt, aber für meine Zielumgebung ist dies die beste Lösung. (kein safe_mode;)) –

1

phpinfo wird viele Systeminformationen ausgeben. Für Apache2-Installationen gibt es einen Abschnitt, der die Apache-Benutzer- und Gruppen-IDs anzeigt. Versuchen Sie, ein PHP-Skript zu erstellen, das nur eine Zeile enthält, rufen Sie phpinfo() auf und öffnen Sie es in Ihrem Webbrowser.

+0

Das ist nicht das Ziel;) Ich weiß, wie man den Benutzer über PHP-Info ... Ich brauche die Namen als Strings aus einem Skript zu erwerben. –

+0

... und das phpinfo (INFO_MODULES) zu analysieren ist KEINE Alternative;) –

8

posix_getuid() und posix_getpwuid sehen()

5

Einige hier komplizierte Antworten.

Dies funktioniert für mich:

$user = getenv('APACHE_RUN_USER'); 

nicht sicher, ob dies nur eine neue Sache, die da diese Frage gestellt wurde Apache hinzugefügt worden, aber es ist auf jeden Fall jetzt gibt.

+0

In meinem Fall hat es nicht funktioniert. Es hat nur eine leere Zeichenfolge zurückgegeben. –