2016-03-30 13 views
0

Ich benutze XAMPP auf einem Windows Server (nicht mehr im Büro, wird morgen die exakte Version hinzufügen).Warum schlägt exec() mit leeren Nachrichtenzeichenfolgen fehl?

Heute bin ich über dieses seltsame Verhalten gestolpert: Bei der Verwendung von exec() zum Ausführen von Programmen funktionieren einige Befehle, andere scheitern ohne Angabe von Gründen.

//working 
exec("dir", $output, $retval); 

//$retval = 0; 
//$output = array with response-lines 


Es scheint, als auch mit meinem wkhtmltopdf.exe zu arbeiten:

//working as well 
exec("C:\some_path\wkhtmltopdf.exe --help", $output, $retval); 

//$retval = 0; 
//$output = array with lines from the help-file 


aber sobald es etwas komplizierter wird, ist es nicht:

//not working 
exec("C:\some_path\wkhtmltopdf.exe C:\other_path\test.html C:\target_path\test.pdf", $output, $retval); 

//$retval = 1; 
//$output = array with 11 empty strings ?!?! 


Wenn ich die exakt gleiche Zeichenfolge an die Server-Maschine wi th rdp, und verwenden Sie es in der Windows-Shell (cmd), es funktioniert.

Ich habe keine Ahnung, was vor sich geht - es ist sehr seltsam, dass ich ein Array mit 11 leeren Strings zurückbekomme.

danke für jede Hilfe oder Tipps!

+0

Jeder Rückgabewert ('$ retval'), der ungleich 0 ist, sollte als Fehler betrachtet werden. –

+0

@CharlotteDunois ja ich weiß. und ich weiß, dass ich einen Fehler habe - aber ich habe keine Ahnung, welchen Fehler ich habe - das ist das Problem. –

Antwort

1

Ich denke, die Frage die Schrägstriche in den Argumenten ist:

$input = 'C:\other_path\test.html'; 
$target = 'C:\target_path\test.pdf'; 

exec("C:\some_path\wkhtmltopdf.exe '$input' '$target'", $output, $retval); 

Sie es nicht so codieren, aber versuchen, die Wege mit ' eingekapselt wird.

Der obige Code führt dazu:

exec("C:\some_path\wkhtmltopdf.exe 'C:\other_path\test.html' 'C:\target_path\test.pdf'", $output, $retval); 

Sie können auch versuchen, die Schrägstriche zu entkommen:

exec("C:\some_path\wkhtmltopdf.exe C:\\other_path\\test.html C:\\target_path\\test.pdf", $output, $retval); 

Aber das ist ein chaotisch-Code.

+0

danke für deinen Vorschlag! also sollte ich die Variablen in doppelte Hochkommata setzen? Ich frage mich, warum Sie die Variablen auch in die 'exec'-Zeichenkette in Anführungszeichen setzen, wie zum Beispiel '' $ input''; –

+0

Es gibt hier keine doppelte Quotierung, $ input und $ target sind literale Strings. Doppelt zitierte Strings akzeptieren Variablen und stellen sie auf einen Wert zurück. Ich werde die Frage aktualisieren. – Xorifelse

+0

ok, danke - ich bin müde, deshalb habe ich das falsch verstanden. Ich werde bis morgen warten müssen, um es in meinem Büro auszuprobieren. Ich werde dir sagen, wenn es etwas ändert. Danke bis jetzt! –