Perl CGI Skripte: Öffnen, Schreiben, Parameter

Igor1312

New Member
Hi,

ich habe einen Server unter Debian 6.0.7 mit Plesk 11.0.9 aufgesetzt.
Vor dem Plattencrash war auch Debian 6 installiert, jedoch habe ich den Server größtenteils mit Webmin konfiguriert.

Perl-Skripte liegen in /cgi-bin und Daten in /daten.

1. Problem:
Ein Skript soll eine Datei aus /daten öffnen. Die Pfadangabe ../daten/datei.txt klappt nicht, sondern nur /var/webs/webroot/daten/datei.txt.
Der Grund ist mir klar, aber kann man das Verhalten von Apache (oder Perl?) so umstellen, dass das aktuelle Arbeitsverzeichnis immer das des Skriptes ist und dann relative Pfadangaben funktionieren?

2. Problem:
Die Perl Skripte können keine Dateien mit Schreibzugriff öffnen. Das kann doch nur ein Rechteproblem sein. Ich bin leider überfragt, wie das korrekt zu konfigurieren ist. Alle Dateien in /daten sollen grundsätzlich von CGI-Skripten beschrieben werden können.

3. Problem:
Die Paramaterübergabe mit POST klappt nicht. Hier vermute ich eine Falschkonfiguration von Apache. Ich wüsste nur nicht, welche Direktive hier das Problem ist oder gar fehlt.

Ich habe PDF::Create installiert und kann keine PDFs generieren. Grund dafür kann 3. oder auch 2. oder beides sein.

Ist hier jemand so freundlich und hat die Muße, mir ein wenig unter die Arme zu greifen? Ich würde mich sehr freuen.

Vielen Dank.

Gruß,
Igor
 
Nachdem du informiert scheinst.

1. Problem
aktuellen Pfad des Skripts rausbekommen:
Code:
use FindBin qw($Bin);
my $pfad_zu_cgi = $Bin;
Dann eben so öffnen statt
Code:
open ($fh, '<', '../daten/datei.txt')
eben
Code:
open ($fh, '<', "$pfad_zu_cgi/../daten/datei.txt")

2. Problem
Das Verzeichnis muss die Zugriffsrechte rwx für die Gruppe haben, unter dem das CGI läuft

3. Problem
Paramaterübergabe mit POST klappt nicht? Wieso sollte kein POST beim Apache von Haus aus funktionieren. Es sei denn du hast es in deiner Konfiguration verboten. Bei APache Stichwort LIMIT bei den Direktiven.
Ich nehme an, dein Programm ist eher fehlerhaft.
Ich frage mich wie du erkennst, dass POST nicht klappt?

4. Problem
Tja. Ich weiß nicht wie du PDF::Create verwendest. Da können weitere Perl-Module fehlen oder du programmiertest einen Fehler rein.
 
Last edited by a moderator:
Hallo GwenDragon,

danke schön, dass du Hilfe anbietest.
1. FindBin ist cool, liefert aber nur den Pfad zum perl Binary, nicht zum Skript.
2. Das Daten Verzeichnis und die Dateien darin haben die gleiche User.Group wie die Skripte.
Die hat Plesk übrigens gesetzt. Der User ist der FTP-User für die Website und die Gruppe psacln (?) was auch immer das bedeuten soll.
3. Naja, die Skripte liefen ohne Veränderung auf dem alten Server, jetzt nicht mehr. Die Übergabe des Dateinamens an PDF::Create klappt nicht, die Variable bleibt leer.

Ich bin jetzt leider nicht wirklich weiter. Wie gesagt, die Skripte liefen genau so unter den früheren Bedingungen. Ich habe jetzt praktisch nur alles von Plesk konfigurieren lassen und früher hat das Webmin gemacht.

Gruß,
Igor
 
Vielleicht kommen wir der Sache jetzt näher.
mod_perl steht in /etc/apache2/mods-enabled

Das Skript wird über ein HTML-Formular gestartet.

Gruß,
Igor
 
Bist du in der Lage korrekt mit mod_perl umzugehen?

Wenn ja: dann solltest du wissen, wie ein Perl-Programm geschrieben werden muss, das unter mod_perl läuft.
Wenn Nein: stell halt in den Domaineinstellungen deiner Website im Tab Websites & Domains auf CGI-Unterstützung um und schalte die Perl-Unterstützung (Plesk meint hier mod_perl!) ab.

Das sollte wohl helfen. ;)
 
Bist du in der Lage korrekt mit mod_perl umzugehen?

Diese Frage ist rhetorisch, gell?

FindBin liefert also nun den Pfad des Skripts.
Ein Zugriff auf eine Datei unter ../daten klappt immer noch nicht.
Was muss ich denn als user.group einstellen? Für cgi-bin, daten, das Skript, sowie das Datenfile?
Danke!

Gruß,
Igor
 
Diese Frage ist rhetorisch, gell?
Nein, nix rhetorisch; woher soll ich wissen was du mit Perl kannst.

Ein Zugriff auf eine Datei unter ../daten klappt immer noch nicht.
Was bedeutet das genau? Was steht denn im Error-Log des Servers?
Hast du versucht, mal einen absoluten Pfad zu verwenden?
ich kenne dein Programm nicht.


Was muss ich denn als user.group einstellen? Für cgi-bin, daten, das Skript, sowie das Datenfile?
Den User und die Gruppe, denn alle für das httpdocs-Verzeichnis haben.
Der User ist die Kennung, die neben Systembenutzername
bei deinem Abonnement für die Domain steht. Die Gruppe ist psacln oder psaserv.
 
Wegen der Rhetorik, ich würde doch nicht hier solch Basiswissen abfragen, wenn mir das klar wäre, oder meinst du nicht? Ich habe nämlich leider fast keine Ahnung von Perl und wusste gar nicht, dass es einen Unterschied zwischen CGI und mod-perl gibt.
Anyhow, deine Tipps zeigen Wirkung, jetzt geht schon mal ne ganze Menge mehr. User.Group richtig einstellen und mod-perl abschalten half.

In den Skripten knallt es zwar immer noch an manchen Stellen, aber da muss mir der Programmierer derer ein bisschen mehr Debuginformationen hineinscripten. Es schmiert halt irgendwo ab und im Error-Log steht nichts. Das Skript hat ein eher bescheidenes Errorhandling ohne nützliche Ausgabe.

Ich frag dann noch mal, wenn ich mehr weiß. Vielen Dank zunächst für deine Hilfe und Geduld.

Gruß,
Igor
 
Ich setze mal voraus, dass jemand der ein Perl-Skript auf den Server packen, verwenden kann, schon etwas Ahnung davon hat.
Dass dir das jemand gemacht hat, wusste ich nicht.

Allerdings hat der Programmierer unheimlich geschlampt (oder es war nicht vom Kunden gewünscht), wenn das nicht mit mod_perl läuft oder abschmiert ohne Meldung und Fehlerlog.
Das solltest du überarbeiten lassen, wenn du das gekauft hast.

Wenn's dann immer noch nicht klappt, finde ich's vielleicht raus. Ob kostenlos oder nicht, ist dann aber eine Frage des Arbeitsaufwands. ;)

Viel Erfolg. Bis demnächst wieder ;)
 
Also, es ist so und ich weiß, dass jetzt alle die Hände über'm Kopf zusammenschlagen.
Ich betreibe seit 20 Jahren einen dedizierten Webserver unter Linux bei verschiedenen Hostern und vermiete in ganz kleinem Stil Web-/FTP- und Mailserver.
Ich bin daher nicht ganz unerfahren, aber von dem Knowhow eines Huschi weit entfernt. Meine Kernkompetenzen liegen halt nicht bei Linux und Perl.
Verrückt ist, dass ich individuelle Kundenwünsche und -probleme immer irgendwie lösen konnte. Aber das hier ist echt neu und lässt mich verzweifeln.
CGI oder mod-perl? Noch nie gehört, in 20 Jahren nicht! Ist doch unfassbar, oder?

Naja. Diese Skripte hat ein Kunde programmiert. Einer der sich freut, dass er auf meinem Server quasi wilde Sau spielen kann und bekommt, was er wünscht. Ich bin also kein Perl Coder, kenne aber ein kleines bisschen davon. Durch den Sourcecode will ich gar nicht durchsteigen, daher muss mir jetzt der Kunde weiterhelfen.

Wäre das als Prolog hilfreich gewesen? Ich denke nicht.

Gruß,
Igor
 
Ungewöhlich, dass jemand, der Webspace auf Server vermietet, kein grundlegendes Programmierwissen bezüglich CGI hat.
Na, war mein Fehler, sowas anzunehmen.

Hoffe ich mal, dass dein Kunde das richtet und nicht weiter Probleme produziert.
Viel Glück.
 
Back
Top