Programm starten mit Perl ->Downloadfenster?

Hallo an alle,
Ich versuch gerade ein Linuxprogramm durch ein Perlscript zu starten. Das ganze sieht so aus:

prog.pl

#! /usr/bin/perl
@arg = (zexec, argumente);
system(@arg);

Das ganze funktioniert wunderbar wenn ich das Script über Telnet starte. Rufe ich das Script aus HTML heraus auf, wird jedesmal das Downloadfenster angezeigt. Egal ob ich das Skript über ein Formular aufrufe oder durch system"perl prog.pl".
Was mache ich falsch?

Vielen Dank,
Armin

Hallo an alle,
Ich versuch gerade ein Linuxprogramm durch ein Perlscript zu
starten. Das ganze sieht so aus:

prog.pl

#! /usr/bin/perl
@arg = (zexec, argumente);
system(@arg);

Das ganze funktioniert wunderbar wenn ich das Script über
Telnet starte. Rufe ich das Script aus HTML heraus auf, wird
jedesmal das Downloadfenster angezeigt. Egal ob ich das
Skript über ein Formular aufrufe oder durch system"perl
prog.pl"
.
Was mache ich falsch?

Gute Frage :wink:

Ist das Script für ALLE ausführbar?

Gehen andere Scripts (insbesondere mit der Endung .pl) auf dem Server oder hat da vielleicht jeand di MIME-Konfiguration vestellt?

Ansonsten: magst Du uns die URL verraten?

Gruß,

Sebastian

Gute Frage :wink:

Ist das Script für ALLE ausführbar?

Jup, das Skript ist für alle ausführbar und ich habe es im ASCII-Modus hochgeladen -> es funktioniert ja auch über Telnet.

Gehen andere Scripts (insbesondere mit der Endung .pl) auf dem
Server oder hat da vielleicht jeand di MIME-Konfiguration
vestellt?

Andere Skripts, in denen nicht auf Programme auf dem Linuxserver zugegriffen wird, laufen. Theoretisch müsste es also daran liegen. Das Programm (zexec) liegt momentan nur in meinem Homeverzeichnis, und ist dem Restlichen System nicht bekannt. Ich hab es allerdings für alle ausführbar gemacht. Muss ich das Programm also in das ‚bin‘ oder ‚sbin‘ Verzeichnis kopieren? Leider bin ich kein Admin und muss deshalb wegen jeder Kleinigkeit zum Cheffe.

Ansonsten: magst Du uns die URL verraten?

Gruß,

Sebastian

Die URL würde ich euch sehr gerne verraten, nur wird euch das sehr wenig nutzen, ich arbeite gerade an einem Intranetprojekt. Somit könnt ihr leider nicht drauf zugreifen.

Wenn dir noch was dazu einfällt, dann meld dich.
Gruß´, Armin

Andere Skripts, in denen nicht auf Programme auf dem
Linuxserver zugegriffen wird, laufen. Theoretisch müsste es
also daran liegen. Das Programm (zexec) liegt momentan nur in
meinem Homeverzeichnis, und ist dem Restlichen System nicht
bekannt.

Aha!

Ich hoffe, Dein Home-Verzeichnis ist nicht für alle Benutzer frei zur Einsicht. Damit dürfte der WWW-Server das Programm kaum finden!

Gruß,

Sebastian

Hi,

#! /usr/bin/perl
@arg = (zexec, argumente);
system(@arg);

Das ganze funktioniert wunderbar wenn ich das Script über
Telnet starte.

das hat ja nichts zu bedeuten :wink: CGI hat da noch einige zusätzliche Anforderungen; insbesondere mußt Du einen gültigen HTTP-Header mitschicken („Content-type: …“ etc.).

Rufe ich das Script aus HTML heraus auf, wird
jedesmal das Downloadfenster angezeigt. Egal ob ich das
Skript über ein Formular aufrufe oder durch system"perl
prog.pl"
.
Was mache ich falsch?

Ich vermute, Dein Fehler ist der, den Internet Explorer zu benutzen. Genauer kann ich es Dir sagen, wenn Du mir folgende Fragen beantwortest:

  • Welcher Content-Type wird vom Script geliefert?
  • Wird ein Content-Disposition-Header ausgegeben?
    Und ganz wichtig:
  • Ist auf Deinem System „*.pl“ mit perl.exe verknüpft?

Wenn die Antwort auf letztere Frage „ja“ lautet, kann ich Dir nur empfehlen, statt des IE einen Browser zu verwenden, der sich auch an die geltenden Standards hält. Der IE ignoriert korrekte Header und „tut einfach, was er will“ - teils vom Dateiinhalt abhängig, teils von der Dateiendung, manchmal sogar beeinflußt durch irgendwelche Header; in den meisten Fällen aber ist das, was er tut, schlichtweg falsch.

Da Du im Intranet zu arbeiten scheinst, würde ich den betreffenden Personen einfach den IE verbieten. Um genauer zu sein: Ich würde nicht, ich habe schon, und zwar aus genau diesen Gründen :wink: Der IE mag zur Anzeige von Seiten besser geeignet sein als jeder andere, aber zum professionellen Arbeiten ist er einfach nur unbrauchbar, weil er weltweite Standards in eklatanter Weise ignoriert. Du darfst mich gerne zitieren, falls Deine Vorgesetzten nicht einverstanden sind :smile:

Cheatah

Hi Cheatah,
Ich glaub ich beschreib dir das Problem nochmal genauer. Das Programm sieht folgendermaßen aus:

#! /usr/bin/perl

$ip = „xxx.xxx.xxx.xxx“;
@arg = (zexec, $ip, „CMD ID INTRANET PROCEDURE START LABEL USER“);
system(@arg);

print „Content-type: text/html“."\n\n";
print „ZIS/Bestätigung\n“;
print „\n$?\n“;
print „\n“;

Den HTML-Teil hab ich eigentlich nur proforma eingefügt. Nachdem ich beim content-type text/html\n\n durch text/html"."\n\n" ersetzt habe, bringt er zumindest mal kein Downloadfenster mehr, obwohl zwischen den 2 Versionen eigentlich kein Unterschied besteht. Egal, Header wird erkannt.

Wenn ich das Skript nun aufrufe, gibt er 65280 als Fehlercode aus. Das Programm zexec wird nicht ausgeführt. Was bedeutet die Fehlernummer bzw. warum startet das Programm nicht??

Zu deinen Fragen: Was ist ein Content-Disposition-Header? Keine Ahnung.
Ob die Endung .pl verknüpft ist? Ich muss im Telnet nur skript.pl eintippen, und der Perlinterpreter startet, das hängt allerdings wohl eher mit der ersten zeile eines jeden Skripts zusammen oder? Deine Anregung den ie zu verbieten ist nicht schlecht, allerdings weis ich nicht, ob so ein kleiner Studi wie ich das entscheiden kann. Ich fürchte selbst eine Empfehlung von Dir wird da nicht viel weiterhelfen. Mit Netscape funktioniert es übrigens auch nicht.
Wahrscheinlich ist die Lösung so trivial, ich seh nur den Wald vor lauter Bäumen nicht. Aber dafür gibt es ja wer-weis-was, gelle :wink:

Armin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

system(@arg);

system(@arg)==0 or die „Kann zexec nicht starten: $!“;

print „Content-type: text/html“."\n\n";
Den HTML-Teil hab ich eigentlich nur proforma eingefügt.
Nachdem ich beim content-type text/html\n\n durch
text/html"."\n\n" ersetzt habe, bringt er zumindest mal kein
Downloadfenster mehr, obwohl zwischen den 2 Versionen
eigentlich kein Unterschied besteht.

Nein, da ist in der Tat kein Unterschied. Wenn dies eine Änderung bewirkt, hast Du irgendwo anders einen vermutlich gravierenden Fehler. Ein Anführungszeichen vergessen vielleicht?

Wenn ich das Skript nun aufrufe, gibt er 65280 als Fehlercode
aus. Das Programm zexec wird nicht ausgeführt. Was bedeutet
die Fehlernummer bzw. warum startet das Programm nicht??

Ich kenne zexec nicht und weiß daher auch nicht, welche Fehlercodes es ausspuckt. 65280 ist jedenfalls hexadezimal FF00, falls das hilft. In der Doku zu dem Befehl sollte mehr stehen.

Durch obiges ‚or die „$!“‘, was bei allen kritischen Aktionen benutzt werden sollte (Datei öffnen usw.), erfährst Du im Error-Log Deines Servers vielleicht mehr.

Zu deinen Fragen: Was ist ein Content-Disposition-Header?

Mit diesem kann man einen Dateinamen mitliefern, den der Browser beim Abspeichern anbietet.

Keine Ahnung.
Ob die Endung .pl verknüpft ist? Ich muss im Telnet nur
skript.pl eintippen, […]

Ich meinte eigentlich auf Clientseite, also dort, wo der Browser läuft.

und der Perlinterpreter startet, das
hängt allerdings wohl eher mit der ersten zeile eines jeden
Skripts zusammen oder?

Auf einem geeigneten System schon.

Deine Anregung den ie zu verbieten ist
nicht schlecht, allerdings weis ich nicht, ob so ein kleiner
Studi wie ich das entscheiden kann.

Wenn Du im Betrieb der Techniker bist, kannst Du das. Du weißt, was technisch machbar ist und was nicht. Den IE mit gängigen Standards zu vereinen ist nicht machbar.

Mit Netscape funktioniert es übrigens auch nicht.

Wie ich oben schon erwähnte, vermute ich dann doch einen etwas tiefer liegenden Fehler. Mehr erfährst Du vielleicht durch

perl -c script.pl
perl -w script.pl

sowie die Zeile „use strict;“ am Anfang des Scripts (unter der ersten Zeile („Shebang“)).

Cheatah

Wenn ich das Skript nun aufrufe, gibt er 65280 als Fehlercode
aus. Das Programm zexec wird nicht ausgeführt. Was bedeutet
die Fehlernummer bzw. warum startet das Programm nicht??

Es ist doch in Deinem Verzeichnis!

Darauf kannst Du zwar zugreifen, wenn Du Telnet benutzt, der Server nicht. Wenn Du sichger bist, daß Du alleine im Netz bist, kannst Du den Zugiff in Dein Verzeichnis ja mal probehalber erlauben.
ACHTUNG; DIES IST EINE EKLATANTE SICHERHEITSLÜCKE. Also schnell wieder stopfen!

Gruß,

Sebastian

Durch obiges ‚or die „$!“‘, was bei allen kritischen
Aktionen
benutzt werden sollte (Datei öffnen usw.),
erfährst Du im Error-Log Deines Servers vielleicht mehr.

Hmm, in vielen Fällen ist eine eigene Error-Routine aber durchaus angebracht um noch den nötigen Clean-Up zu machen, falls zum Beispiel temoräre Dateien benutzt wurden oder was auch immer…

Gruß
Bruno

Das Problem ist gelöst, nachdem ich mir einen Admin geschnappt habe, der das Programm allen, und somit auch dem Webserver, zugänglich gemacht hat.
Danke für eure Hilfe

Armin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

Durch obiges ‚or die „$!“‘, was bei allen kritischen
Aktionen
benutzt werden sollte (Datei öffnen usw.),
erfährst Du im Error-Log Deines Servers vielleicht mehr.

Hmm, in vielen Fällen ist eine eigene Error-Routine aber
durchaus angebracht um noch den nötigen Clean-Up zu machen,
falls zum Beispiel temoräre Dateien benutzt wurden oder was
auch immer…

gut, ‚die‘ ist einfach nur die Standardfunktion für solche Fälle. Man kann natürlich eigene Routinen verwenden, sofern man sich die Fehlerbehandlung zutraut. Worauf es mir ankommt ist, daß der Fehler erst mal abgefangen wird - damit a) kein Unglück (Datenverlust) geschieht und b) potentielle Scriptfehler auffindbar sind.

Cheatah

Ok ich muss ja zugeben, ich mache meistens weder dies noch jenes :wink:

Bruno