raketenfehlersuchsystem: externes Skript starten

Beitrag lesen

Fehlermeldung

malformed header from script 'mu.pl': Bad header: This is is pdfTeX, Version 3.1415,

Das ist einfach.

Erstes Problem:

malformed header from script 'mu.pl'

CGI-Programme müssen erste eine Zeile mit dem Content-Type ausgeben, dann eine Leerzeile, dann den Payload.

Aus irgendeinem Grund unterbleibt das. Demnach hat Dein obiges Perl-Skript den falschen aufbau:

#!/usr/bin/perl -w

print "Content-type: application/pdf\n\n";
system "python3 Generator.py";

Zweites Problem:

"This is is pdfTeX, Version 3.1415,"

Du musst untersuchen, warum diese Zeile überhaupt erscheint. Scheinbar hat jemand die Kanäle für <stdout> und <stderr> „verhauen“.

Wenn Du PDF liefern willst, dann solltest Du auch PDF liefern und keineswegs das Zeug unterhaltsame Zeug von der Konsole.

Schau also, was die Generator.py macht.

Was ich mich überhaupt frage:

Mit der richtigen Endung und shebang ...

#!/usr/bin/python3
/**
*file: generator.cgi
*/

print ("Content-type: application/pdf\n\n");

[Hier der Rest der generator.py]

... kannst du Dir das Herumgefummel mit Perl als wrapper sparen.

Oder Du sagst Deinem Apache endlich, dass er .py auch als CGI-Skript "drannnehmen" soll.

Dennoch muss Du das Skript noch reparieren.

In PHP mach ich Vergleichbares so:


chdir ( '/tmp' );
$system = "pdflatex  -interaction=nonstopmode \-synctex=0 -output-directory=/tmp $tmpfile_tex";

$dummy = exec( $system );
header( 'content-type: application/pdf' );
header( 'Content-Disposition: attachment; filename="' . $_POST['Filennumber'] . '.pdf"' );
echo file_get_contents( $tmpfile_pdf );

Ich unterdrücke also den Output von pdflatex und sende dann den inhalt der enstandenen Datei.

[Y] funktioniert.