drbommel
Goto Top

Php System() funktioniert nicht

Hallo Leute,

wie der Titel des Threads schon aussagt, geht bei mir die system() Funktion von php nicht und weiss leider nicht mehr weiter.

Zunächst ein paar Fakten:

Ich habe einen V-Server gemietet auf dem Plesk läuft und möchte hier FOP (=formatting object processor) verwenden um eine pdf-Datei zu erzeugen.
Um diesen FOP zu verwenden benötige ich allerdings eine .fo - Datei die durch den Saxon Prozessor erzeugt wird - Und hier kommen wir zum Problem.

Der Saxon funktioniert folgendermaßen:

$saxon9 ="java -jar saxon9he.jar ".xml-Datei" ".xsl-Datei";
system($saxon9);

Auf dem XAMPP auf meinem Home PC funktioniert alles wie es soll und es wird durch diesen Befehl eine .fo Datei erzeugt. Auf dem V-Server leider nicht und ich weiss nicht warum und das witzige ist, wenn ich $saxon9 ausgebe und 1:1 in die cmd eingebe wird die .fo-Datei erzeugt.

Kennt jemand das Problem oder vermutet einen Fehler ??

Nochmal zum Verständnis:

Aus der xml und xsl soll eine fo gemacht werden, anschließend wird eine pdf daraus.

xsl -----> .fo ----> pdf
xml----->

Vielen Dank für jede hilfreiche Antwort ! face-smile

Gruß DrBommel

Content-Key: 163835

Url: https://administrator.de/contentid/163835

Printed on: April 16, 2024 at 18:04 o'clock

Member: builder4242
builder4242 Apr 01, 2011 at 23:14:21 (UTC)
Goto Top
guten abend,


ich vermute mal, dass das mit der php.ini zu tun hat weil bei xampp so gut wie alles aktiviert ist um bestmögliche kompatibilität zu gewärleisten.
Bei produktiven Webserver sind standartmäßig die meisten module deaktiviert zwecks der sicherheit.

Aber ich gehe mal davon aus das du root zugang zum server hast, was dir ermöglicht die php.ini anzupassen

klick dich am besten mal durch php.net und prüfen was da über deine funktionen steht, da wird auch meistens gleich erläuter wo du in der php.ini schauen musst

grüße
Member: dog
dog Apr 01, 2011 at 23:14:51 (UTC)
Goto Top
<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors','On');  
?>
Dann reden wir weiter...
Member: drBommel
drBommel Apr 02, 2011 at 08:09:49 (UTC)
Goto Top
Zunächst mal danke für eure Antworten.

@builder4242:
ich hab in der php.ini sowohl auf dem xampp @ home als auch vom Server ein wenig gestöbert, konnte aber keine großen Unterschiede feststellen.
Auf http://www.php.net/manual/de/function.system.php hab ich ebenfalls nachgeschaut und hab lediglich:

"Hinweis: Mit aktiviertem Safe Mode können Sie nur Programme ausführen, die im Verzeichnis liegen, das mit safe_mode_exec_dir angegeben wurde. Aus praktischen Gründen ist es gegenwärtig nicht erlaubt, dass der Pfad zu einem Programm .. enthält."

gefunden. Allerdings ist bei beiden php.ini's der safe_mode deaktiviert. Ansonsten hab ich da nichts gefunden

@dog:

ich habe diese 2 Zeilen vor und nach meinem Befehl eingetippt, allerdings erscheint nach wie vor keine Fehlermeldung.

Sonst noch irgendeine Idee ? face-smile
Member: drBommel
drBommel Apr 02, 2011 at 08:14:05 (UTC)
Goto Top
ach ja, ein Comment hab ich noch auf der Seite gefunden:

So, if your system() call is failing mysteriously and giving no results, after trying the obvious (permissions, executable, etc.) considering upping:

memory_limit

in your php.ini from 8M to something larger.

der memory_limit in meiner php.ini is bei 128 mb, kann also daran auch net liegen
Member: LordGurke
LordGurke Apr 02, 2011 at 08:57:48 (UTC)
Goto Top
Schau dir mal mit "which java" an, wo die Java-Binary liegt die du ausführst und gib den ausgegebenen Pfad komplett so in deinem PHP-Script an.
Wenn der Webserver die Java-Binary nicht findet oder einfach die falsche nimmt, könnte das dieses Verhalten erklären.
Member: drBommel
drBommel Apr 02, 2011 at 09:34:27 (UTC)
Goto Top
Danke für den Hinweis.

Ich hab nun den exakten Pfad für "java" eingeben - sprich C:\Program Files....\bin\java.exe -jar saxon9he.jar ".xml-Datei" ".xsl-Datei"
Da kommt der Fehler: "Der Befehl "C:\Program " ist entweder falsch geschrieben oder konnte nicht gefunden werden"

Nächste Variante:

Ich habe von den restlichen Parametern die komplette Pfade angegeben - sprich "java -jar C:\.....\saxon9he.jar C:\....\.xml-Datei C:\...\.xsl-Datei"
In der Konsole funktioniert es wieder, über php wird der system-Befehl nicht ausgeführt.

Sonst noch irgendwelche Ideen? face-smile
Member: Arano
Arano Apr 02, 2011 at 11:48:59 (UTC)
Goto Top
Moin moin,

Darf der Webserver überhaupt auf die Java-Ausführungsdatei zugreifen bzw. in das Ziel schreiben - Zugriffsrechte.
Funktioniert der Aufruf der Funktion system() den generell überhaupt auf dem Server !?
Was gibt system() den zurück - Rückgabewerte; var_dump()

Mehr kann ich wohl auch nicht Helfen...

Ist das jetzt eigentlich ein Windows oder Linux Server !?


~Arano
Member: dog
dog Apr 02, 2011 at 14:23:41 (UTC)
Goto Top
"Der Befehl "C:\Program " ist entweder falsch geschrieben oder konnte nicht gefunden werden"

Anführungszeichen setzen (oder vorher chdir machen):

system('"C:\\Program Files\\java\\java.exe" ...');  

über php wird der system-Befehl nicht ausgeführt.

Das sollten wir erstmal prüfen.
Leg dir den Code hier als test.vbs irgendwo hin und ruf ihn mit PHP auf.
Wenn er aufgerufen wurde muss danach was in der Windows Ereignisanzeige stehen.
Const EVENT_SUCCESS = 0

Set objShell = Wscript.CreateObject("Wscript.Shell")  

objShell.LogEvent EVENT_SUCCESS, "Ich wurde aufgerufen!"  
Member: drBommel
drBommel Apr 03, 2011 at 14:49:42 (UTC)
Goto Top
danke schon ma für euere Ansätze und sorry, dass ich mich nicht mehr gemeldet habe, aber bei dem Wetter sitze ich net rund um die Uhr im Haus und programmiere :P

@dog

Das mit den Anführungsstrichen hat nichts gebracht, wird weder von der Konsole noch von system() genommen.
Ich habe die test.vbs erstellt und über system(Dateipfad) ausgeführt, habe allerdings nichts in der Ereignisanzeige feststellen können.

@Arano

bezüglich der Zugriffsrechte. Das könnte womöglich sein, dass ich mit Zugriff auf den Server (via cmd) es ausführen kann, jemand außerhalb über die domain aber nicht. Wie könnte man das lösen / testen ? Wobei.....Bevor ich zu system() komme, erstelle ich bereits zwei temporäre Dateien.
Naja...Der Befehl sollte ja prinzipiel funktionieren. Haste einen Code parat der auf deinem Server funktioniert - wäre vermutlich der einfachste Test.
Rückgabewert: Ich habe system() einer Variablen übergeben und ausgeben lassen - ohne Resultat. Es wird nichts ausgegeben.
Zum Server: Es ist ein virtueller Windows Server
BS: Windows 2008

Kann es nicht vllt. doch an der php.ini liegen, wie es builder4242 bereits meinte?? Weiss jemand, was man on bzw. off schalten muss, damit es 100%ig funktioniert müsste ?? Dann könnte man die php.ini schon ma abhacken.

Danke nochmals für euere Hilfe und hoffe, es hat noch jemand eine Idee an was es liegen kann.

Gruß drBommel
Member: drBommel
drBommel Apr 09, 2011 at 13:29:18 (UTC)
Goto Top
Hey Leute,

momentan habe ich leider viel zu tun, sodass ich nur am WE zum Arbeiten am Server komme. Hier was ich heute rausgefunden habe:

Zunächst mal habe ich endlich mal einen Rückgabewert bekommen:

system($saxon9, $return);
echo ($return);

Ausgabe ist : 6

Kann jemand was damit anfangen ?? was hat das zu bedeuten ??

Dann habe ich nun richtig

Var_dump(system($saxon9)); verwendet und dabei kam folgendes raus:

string(0) ""

Kp, was das genau zu bedeuten hat - vllt., dass system keinen String zu verarbeiten hat , oder ?

Und zu guter Letzt habe ich noch versucht einen stinknormalen system() auszuführen mit folgendem Resultat:

$cmd = "date";
$output = system($cmd);

-->

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator to inform of the time the error occurred and of anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Naja...und wenn das net ma funktioniert, kann ich den gewünschten system() wohl vollens abhacken^^

Kann jemand mit diesen Informationen was anfangen ?? face-smile Danke schon ma