ich habe folgendes problem:
ich nehme von einer html-seite (einem formular) eine ganze reihe von daten entgegen. den kompletten datensatz schreibe ich _ohne_ bearbeitung in eine datei.
ein anderes script liest nun diese datei ein und decodiert die einzelnen daten. diese werden dann in eine html-seite eingefügt. diese seite wird dann angezeigt.
auf meinem rechner (als localhost) unter win98/xitami funzt alles prima. auf dem zielrechner unter linux/apache wird die seite aber doppelt angezeigt und dazu noch mit datenmüll.
aus irgendeinem grund kann linux/apache die daten nicht korrekt einfügen. dafür scheint die seite aber zweimal hintereinander gehängt verschickt zu werden…
> #!usr/bin/perl
Du heißt ein Perl in /pfad/zu/deinem/cgi-bin/usr/bin/perl? :wink:
#!/usr/bin/perl -w
use strict;
[...]
> $Vorlage = "stelle\_view.html";
my $Vorlage = 'stelle\_view.html';
Das "my" wegen perldoc -f my, und bitte Doublequotes nur dann, wenn Du auch wirklich Stringparsing brauchst.
[...]
> my ($Name) = param("name");
Und hier würde "my $Name" ohne Klammern reichen :smile:
Übrigens gibt es wegen Groß- und Kleinschreibung einige Konventionen, die zwar nicht zwingend sind, aber das Lesen Deiner Codes leichter machen können. Variablennamen (eigene) schreibt man demnach klein.
> open (DATEI, ";
}
> # Rück-Konvertieren der Umlaute
Hm, wenn Du mit Hilfe von CGI.pm den Code geschrieben hast, ist das eigentlich schon geschehen... ein erneutes Konvertieren erzeugt dann natürlich Fehler. Aber gut:
$Stelle = CGI::unescape($Stelle);
> # zerlegen in hilfsarray
Ich glaube, ich habe zu viel von dem Code hier gelöscht, jedenfalls verstehe ich nicht mehr wirklich, woher der Input Deines Codes stammt (naja, aus einer Datei \*g\*).
> # einlesen der vorlage
> open (DATEI, ") {
> push (@Lines, $Line);
> }
my @Lines = ;
(Vorausgesetzt, Du hattes $/ wirklich nur lokal neu gesetzt :wink: )
> # ersetzen der platzhalter
> foreach $Line (@Lines) {
[...]
Hm, da könnte man mit einem Hash vermutlich eine effizientere Methode finden, die zudem leichter zu warten ist. Sind alle diese Platzhalter durch m/-[a-z]+-/g zu finden, und gibt es dieses Pattern nirgendwo sonst?
> # ausgabe der seite
> foreach $Line (@Lines) {
> print ("$Line\n");
> }
{
local $" = "\n";
print "@Lines";
}
wie gesagt, unter win/xitami ist alles super, nur unter
linux/apache…
das problem liegt eigentlich nicht im script (glaube ich jedenfalls nicht). so wie es aussieht ruft apache das script zweifach auf. wenn ich mir das ergebnis als html-source ansehe ist die tzu erzeugende seite 2x vorhanden…
he, ich habe vor 4 wochen noch nicht mal gewusst, daß es perl
gibt…
dafür mache ich mich doch schon recht gut
das stimmt. Bei mir kam ein solch… kreativer Mischmasch erst sehr viel später
Du heißt ein Perl in /pfad/zu/deinem/cgi-bin/usr/bin/perl?
ich habe keine ahnung, wo perl auf dem intranetserver liegt -
aber es läuft…
Das ist seltsam. Ändere die Shebang-Zeile doch mal auf
#!/usr/bin/perl -w
(das „-w“ solltest Du in Scripts immer benutzen; hier wird es allerdings viele Warnungen erzeugen… laß es also für Probezwecke ruhig weg) bzw. auf das, was Dir die Admins nennen.
das problem liegt eigentlich nicht im script (glaube ich
jedenfalls nicht).
Möglicherweise sowohl am Script als auch am Server. Wenn mod_perl installiert ist, ist Dein Script nicht darauf vorbereitet; obige URL hilft dabei. Interviewe doch mal die Admins ein wenig.
so wie es aussieht ruft apache das script
zweifach auf. wenn ich mir das ergebnis als html-source ansehe
ist die tzu erzeugende seite 2x vorhanden…
Tja, dieser spezielle Effekt ist mir unbekannt. Hast Du die Möglichkeit, das Script auch im Internet unterzubringen? Wenn dort unter ähnlichen Bedingungen der gleiche Fehler auftaucht, kann ich vielleicht ein wenig Analyse betreiben. Wenn nicht, mußt Du Dein Script an die spezielle Serverkonfiguration anpassen, bzw. mit den Admins zusammen einen anderen Weg finden.