exec() trotz safe_mode=Off rätselhaft
MSUser
- php
0 Sven Rautenberg0 MSUser0 Jens Holzkämper0 Tom0 Sven Rautenberg0 MSUser
0 Tom
Hallo,
ich versuche eine ausführbare Datei in "/usr/bin" mit exec() auszuführen.
Konkret
exec("/usr/bin/pdftex"...);
Dabei erhalte ich
"No such file or directory"
als Fehler.
Laut phpinfo() ist safe_mode=Off, ich kann auch mittels chdir() nach "/usr/bin" wechseln.
Server: Apache/2.2.9 (Debian) mit PHP/5.2.6-1
Ich verstehe leider nicht, was hier schief läuft. Google spuckte keine funktionierende Lösung aus. Anscheinend liegt ein Pfadproblem vor, doch ich komme nicht dahinter, wie ich es löse.
Schöne Grüße
MSUser
Moin!
ich versuche eine ausführbare Datei in "/usr/bin" mit exec() auszuführen.
Konkret
exec("/usr/bin/pdftex"...);
Das ist kaum der komplette Befehl.
Ansonsten: file_exists()? is_executable()? Kommandozeile mal außerhalb generieren lassen, dabei korrektes Escaping für Variablen benutzt, und manuell in der Shell getestet?
- Sven Rautenberg
Hallo,
Ansonsten: file_exists()? is_executable()? Kommandozeile mal außerhalb generieren lassen, dabei korrektes Escaping für Variablen benutzt, und manuell in der Shell getestet?
den gesamten Befehl habe ich in einer Shell getestet, dort funktioniert er, jedoch <nicht> manuell "php dasFile.php" drüberlaufen lassen, da ich offenbar als angemeldeter User keinen Zugriff auf das Executable-File von php habe (kann php nicht lokalisieren, ein find in / liefert nur ein paar php-Files).
In PHP ist is_executable() sowie file_exists() beides false.
Danke und schöne Grüße,
MSUser
Tach,
In PHP ist is_executable() sowie file_exists() beides false.
klingt als liefe PHP in einer Sandbox (chroot, jail, …)
mfg
Woodfighter
Hello,
In PHP ist is_executable() sowie file_exists() beides false.
Und der Pfad zur Befehlsdatei stimmt auch wirklich?
Wird PHP als Modul oder als CGI/FastCGI ausgeführt?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
Und der Pfad zur Befehlsdatei stimmt auch wirklich?
als "normaler" User eingeloggt kann ich "/usr/bin/pdflatex" ausführen, "which" hat mir diesen Pfad geliefert. Es scheint also ein Problem zu geben, wenn der www-data oÄ. auf die Pfade zugreifen will.
Wird PHP als Modul oder als CGI/FastCGI ausgeführt?
Gute Frage - Apache 2.0 Handler steht als Server API in phpinfo().
Schöne Grüße,
MSUser
Hello,
Wird PHP als Modul oder als CGI/FastCGI ausgeführt?
Gute Frage - Apache 2.0 Handler steht als Server API in phpinfo().
Also als Handler des Apache == Modul
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Moin!
In PHP ist is_executable() sowie file_exists() beides false.
Und du wunderst dich noch, das es nicht geht?
PHP sieht die Datei nicht, sie ist auch nicht ausführbar. Also muss exec() scheitern.
- Sven Rautenberg
Hallo,
Und du wunderst dich noch, das es nicht geht?
Mich wundert nicht unbedingt, dass exec() nicht geht, sondern vielmehr, dass die Files trotz absoluter Pfadangabe nicht gefunden und damit nicht ausgeführt werden.
Schöne Grüße,
MSUser
Hello,
ich versuche eine ausführbare Datei in "/usr/bin" mit exec() auszuführen.
Konkret
exec("/usr/bin/pdftex"...);
Dabei erhalte ich
"No such file or directory"
als Fehler.
Bekommst Du das als Rückgabewert von Exec oder als Fehlermeldung von PHP?
Das ist ein großer Unterschied.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
Bekommst Du das als Rückgabewert von Exec oder als Fehlermeldung von PHP?
Das ist ein großer Unterschied.
als Rückgabewert von Exec, PHP sagt leider nur einen leeren Text (?).
Danke und schöne Grüße
MSUser
Hello,
Bekommst Du das als Rückgabewert von Exec oder als Fehlermeldung von PHP?
Das ist ein großer Unterschied.als Rückgabewert von Exec, PHP sagt leider nur einen leeren Text (?).
Dann kann exec also entweder die Befehlsdatei nicht finden, oder aber die Befehlsdatei kann ihren Paramter nicht interpretieren. Da Du Augenscheinlich aber gar keinen Parameter übergeben hast, kann sie also eventuell nicht ohne Parameter arbeiten.
Wenn die Befehlsdatei nicht ausführbar wäre für den PHP-Interpreter-Prozess, dann würde mMn eine andere Fehlermeldung kommen.
Du solltest und ggf. auch den wirklichen Befehlsstring aus exec() nennen, wenn Du noch Hilfe benötigst. So kann der ja nicht stimmen!
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
Dann kann exec also entweder die Befehlsdatei nicht finden, oder aber die Befehlsdatei kann ihren Paramter nicht interpretieren. Da Du Augenscheinlich aber gar keinen Parameter übergeben hast, kann sie also eventuell nicht ohne Parameter arbeiten.
Wenn die Befehlsdatei nicht ausführbar wäre für den PHP-Interpreter-Prozess, dann würde mMn eine andere Fehlermeldung kommen.
Du solltest und ggf. auch den wirklichen Befehlsstring aus exec() nennen, wenn Du noch Hilfe benötigst. So kann der ja nicht stimmen!
ich vermute, dass php einfach nicht auf die entsprechenden Files zugreifen kann. Der ganze Befehl würde etwa lauten
exec("/usr/bin/pdflatex ./testInput.tex");
Schöne Grüße,
MSUser