SSI-Perl-Script hatn Fehler. Welchen? + Apache von aussen nicht erreichbar?

N

Narrator

Also, nach n paar Stunden suchen, hab ich es jetzt endlich geschafft SSI auf meim Apache zu aktivieren. So schwer wars letzendlich ja doch gar nich.:) Aber nun der Script nicht! Obwohl der Script kann es eigentlich gar nicht sein.
Naja das hier jedenfalls ist der relevante Teil in der shtml-file:
Code:
<span align=right style="color: RED;">
<!--#exec cgi="/cgi-bin/number.pl?id=0"-->
</span>
, und das hier ist der Script selbst
Code:
#!c:/perl/bin/perl -w
use strict;

#Nur ne Testausgabe
print "11";
exit;

Da fällt mir auf, wozu war eigentlich nochmal das "use strict;"? Also wozu braucht man das strict?

So und da ich nicht gleich 2 Themen aufmachen wollte hier mein 2. Prob:
Vor kurzem noch konnte ich meine Site von nem andren Computer über meine IP angugn, aber das geht jetzt nicht mehr. nur mit localhost und 127.0.0.1
Wie kann ichn das ändern? Der Apache is Version 1.3.29

Pls help me!
 
Mir ist noch eingefallen zu erwähnen das ich ExecCGI in httpd.conf durchaus aktiviert hab.
 
Okay, jetzt hab ich erstmal rausgefunden das es nicht am script lag. Ich durfte dem Script einfach nur keine Urlparameter übergeben. Aber ich muss dem Script die id da übergeben. Wie soll ichn das jetzt lösn?
 
Hallo!

Für dein ersteres Problem:
Bei der Ausgabe deines durch SSI aufgerufenen Scripts, musst du auch darauf achten, das du vor der ersten Ausgabe den Connte-Type (print "Content-Type: text/html\n\n";) ausgibst, sonst gibts nen 500er ServerFehler bzw. "[An error ocured while processing this directive]".

Ausserdem sollte general bevor man ein Script per SSI einbindet geprüft werden, ob es denn bei einem direktaufruf problemlos läuft, denn nur dann kann es auch problemlos per SSI eingebunden werden.

use strict;
hilft dir dabei Fehler im Code zu finden. Es zwingt dich so z.B. neue Variable mit my (oder einer anderen Namespace-deklaration) zu deklarieren. So werden auch ganz leicht lästige Tippfehler vermieden wie z.B. hier:

Code:
use strict;

my $timestamp = time();
print $Timestamp;

Endet mit use strict; in einem "fatal error". Ohne use strict; würdest du nur eine leere Ausgabe bekommen und evtl. ewig den Fehler in irgendwelche Funktionen suchen, bevor du auf die Idee kommst das du aus versehen mal timestamp und mal Timestamp geschrieben hast ;)

Um an dein Script per SSI Parameter zu übergaben musst du #Include Virtual="..." verwenden anstatt Exec. Exec führt nämlich das angegeben Script auf der Commandozeile aus und fängt die Rückgabewerte auf und gibt diese Zurück. Während Virtual eine HTTP Anfrage an das aufzurufende Script stellt und du dann auch wie gewohnt mit scriptname.pl?variable=wert Werte an das Script übergeben kannst.

Was das Addressierungsproblem deines Apaches angeht, kann ich dir leider nicht weiterhelfen, das Problem hatte ich noch nie.

Hoffe geholfen zu haben :)

Schönen Tag noch,
Sven
 
Das mit dem Content-Type: text/html\n\n hab ich testweise mal ausnem anderen Programm mitreingenommen, aber es hat wegen der Parameter trotzdem den gleichen 500erFehler angezeigt. Naja jetzt hab ich halt aaaalles umgemodelt und der aktualisiert halt immer die ganze File mit nem Script.Also nix mit SSI. Aber das mit Include Virtual="..." is cool. Werd ich mir ganz sicher merken. Thx vielmals.

use strict;
Ach deshalb hatter immer rumgemault, wenn ich ne Variable benutzt hab ohne sie zu deklariern. Stand ja eigentlich indem Perltut. was ich hab drin, dass man das nich muss. Aber das is gut so dassman es mit strict dann doch muss. ICh persönlich find das nämlich recht praktisch.

Danke für die Hilfe(mit dem Apacheprob. geh ich einfach noch mal in Webserverforum, vielleicht weiß da wer was.)
 

Neue Beiträge

Zurück