wget mit PHP aufrufen
Marie
- programmiertechnik
Hallo,
wenn ich per SSH wget benutze funktioniert es wunderbar.
Wenn ich jedoch exec('wget [...]'); aufrufe passiert einfach
gar nichts.
Wenn ich whoami mit PHP aufrufe steht dort nobody, kann es daran liegen, oder speichert das wget mit PHP vielleicht die Datei irgendwo in einem mir fremden Ordner?
Liebe Grüße, Marie
nobody klingt für mich nach fehlenden rechten...
Hello,
nobody klingt für mich nach fehlenden rechten...
und nach fehlendem HomeDir und keiner shell
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hello Marie,
wenn ich per SSH wget benutze funktioniert es wunderbar.
Wenn ich jedoch exec('wget [...]'); aufrufe passiert einfach
gar nichts.Wenn ich whoami mit PHP aufrufe steht dort nobody, kann es daran liegen, oder speichert das wget mit PHP vielleicht die Datei irgendwo in einem mir fremden Ordner?
Mach doch mal einen Versuch:
Was steht denn nach einem 'whoami', wenn Du Dich mit ssh angemeldet hast?
Ich postuliere jetzt mal 'root'.
Dann melde Dich mit ssh an und versuche "su nobody"
Danach rufe 'wget' auf.
Was passiert dann?
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo Tom,
Ich bekomme leider:
-bash: /bin/su: Permission denied
Gibt es eine Möglichkeit einem PHP Script oder PHP komplett einen anderen Benutzer zuzuweisen?
- Marie
echo $begrüßung;
wenn ich per SSH wget benutze funktioniert es wunderbar.
Wenn ich jedoch exec('wget [...]'); aufrufe passiert einfach gar nichts.
Das kann an unterschiedlichen Einstellungen de Pfades liegen. which wget in der ssh und per exec() könnten dir Hinweise darauf liefern.
Verwende auch mal einige der anderen Program Execution Functions, um die komplette Ausgabe zu erhalten, nicht nur wie bei exec() die letzte Zeile.
echo "$verabschiedung $name";
Hallo,
wenn ich shell_exec nehme gibt es mir nichts zurück.
Wenn ich -b verwende gibt er mir dies zurück:
Continuing in background, pid 26231.
Aber wenn ich in der console ps eingebe existiert 26231 nicht, auch wenn die Datei mehre hundert megabyte groß ist.
- Marie
echo $begrüßung;
wenn ich shell_exec nehme gibt es mir nichts zurück.
Wenn ich -b verwende gibt er mir dies zurück:
Continuing in background, pid 26231.
Heißt das, dass du dir sicher bist, dass wget gefunden wurde, wenn du es ohne den genauen Pfad zu spezifieren mit exec() und Co. aufrufst?
Ein wget ist normalerweise deutlich gesprächiger. Bekommst du denn eine Ausgabe, wenn du beispielsweise wget mit -V aufrufst? Was hat dein which-Versuch ergeben?
echo "$verabschiedung $name";
Hello,
wenn ich shell_exec nehme gibt es mir nichts zurück.
Wenn ich -b verwende gibt er mir dies zurück:
Continuing in background, pid 26231.Aber wenn ich in der console ps eingebe existiert 26231 nicht, auch wenn die Datei mehre hundert megabyte groß ist.
Wenn, dann 'ps -ax' oder 'ps -aux' oder ähnliches...
Du wolltest doch die Prozesse ohne Konsole auch sehen. dafür ist das kleine x (zumindest bei meinem ps)
weiß denn wget, in welches Verzeichnis es die Ausgabe schreiben soll und hat nobody dort auch Schreibrechte? Die Fehlermeldung läuft ja auf der Konsole oder der Standardfehlerausgabe auf und wird nicht an PHP zurückgegeben. Wenn da also irgendwo "access denied" im Nirwana verschwindet, bekommst Du das nicht mit. Du musst Dir schon die Fehlerausgabe in das Array der Rückgabewerte von exec() reinholen...
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hello,
wenn ich per SSH wget benutze funktioniert es wunderbar.
Wenn ich jedoch exec('wget [...]'); aufrufe passiert einfach gar nichts.Das kann an unterschiedlichen Einstellungen de Pfades liegen. which wget in der ssh und per exec() könnten dir Hinweise darauf liefern.
Verwende auch mal einige der anderen Program Execution Functions, um die komplette Ausgabe zu erhalten, nicht nur wie bei exec() die letzte Zeile.
Bei exec() kann man ALLE Zeilen der Ausgabe abfragen.
Man muss nur ein Array dafür bereitstellen
string exec ( string $befehl [, array $ausgabe [, int $return_var ]] )
^
+----- Array für die komplette Ausgabe
http://de3.php.net/manual/de/function.exec.php
System() liefert nur eine Zeile.
http://de3.php.net/manual/de/function.system.php
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
echo $begrüßung;
Verwende auch mal einige der anderen Program Execution Functions, um die komplette Ausgabe zu erhalten, nicht nur wie bei exec() die letzte Zeile.
Bei exec() kann man ALLE Zeilen der Ausgabe abfragen.
Man muss nur ein Array dafür bereitstellenstring exec ( string $befehl [, array $ausgabe [, int $return_var ]] )
^
+----- Array für die komplette Ausgabe
Dann sollte man da auch mal die entsprechenden Parameter mit Variablen versorgen. Vor allem auch den dritten Parameter nicht unbeachtet lassen. Du hast bei deinem Zitat übrigens mal wieder die falsche Handbuchseite erwischt. Da fehlen die & vor den Parametern 2 und 3, die darauf hinweisen, dass diese per Referenz übergeben werden. Das heißt also, dass nach der Ausführung in den Variablen Werte drinstehen, die man sich mit var_dump() wegen der genaueren Ausgabe als beim einfachen echo ausgeben sollte.
echo "$verabschiedung $name";
Hello,
[...] Du hast bei deinem Zitat übrigens mal wieder die falsche Handbuchseite erwischt. Da fehlen die & vor den Parametern 2 und 3, die darauf hinweisen, dass diese per Referenz übergeben werden.
Ja, stimmt tatsächlich. Ich hatte die deutsche Seite erwischt...
Ich hatte sie noch im Tab vom Browser offen, sonst hätte ich es gar nicht mnachvollziehen können eben.
Das ist ja wirklich hässlich, wieviele kleine gemeine Fehler oder Auslassungen in der Übersetzung sind.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom