|
|
CGI::Session per FTP auf fremdem Server installieren
[thread]13912[/thread]
hide all
open all
-

+39 replies
-
|
guest sman
|
2009-08-23 22:31 |
|
|
|
Hallo,
ich habe ein Strato Premium Paket mit allerhand Perl- und PHP-Modulen. Für meine Zwecke brauche ich das Session-Modul, PHP hat es, Perl nicht. Da das Modul installiert werden muss (kompiliert), nutzt es nichts es einfach dateiweise per FTP in den cgi-bin Ordner zu kopieren. Das führt zu massig Fehlermeldungen beim Ausführen.
Mein Ansatz war also, das aktuelle CPAN Session Modul auf meinem Windows2000 zu installieren, damit ist es kompiliert und ich kann den ganzen Session-Ordner samt Modul per FTP nach /cgi-bin/CGI/ kopieren.
Das erste Test-script /cgi-bin/test.cgi ist vielversprechend
| Code (perl): |
|
use CGI::Carp qw(fatalsToBrowser);
use CGI::Session;
$session = new CGI::Session();
print "content-type: text/html\n\n1";
|
Gibt ohne Probleme eine 1 aus.
Doch schon mit der folgenden zusätzlichen Zeile (an die Stelle wo # steht) verursacht das Problem
| Code (perl): |
$CGISESSID = $session->id();
|
führt zu folgendem Fehler
QuoteCan't call method "id" on an undefined value at /home/strato/http/premium/web8/43/39/534539/htdocs/cgi-bin/test.cgi line 5.
Weiß jemand Rat?
Für den Fall, dass ihm die Windows-Kompilierung nicht gefällt, wäre ich ratlos. Der Strato-Server lässt sich wie folgt identifizieren:
QuotePerl-Var $^V => This is perl, version 5.004_05 built for sun4-solaris
SERVER_SOFTWARE => Apache/2.2.11 (Unix) mod_fastcgi/2.4.6
INC-Pfade => /opt/KQperl/lib/sun4-solaris/5.00405, /opt/KQperl/lib, /opt/KQperl/lib/site_perl/sun4-solaris, /opt/KQperl/lib/site_perl, .
Vielleicht kann von euch jemand das Modul auf einem ähnlichen Server kompilieren und mir schicken?
|
|
|
|
-

+4 replies
-
User since 2004-07-19
1306
articles
|
Zunächst einmal sei angemerkt, dass jedes saubere Perlprogramm die Pragmas strict und warnings verwenden sollte (siehe auch UseStrict), besonders falls sich irgendwer dafür interessiert, ob das Programm auch funktioniert, und falls nicht, warum es fehlschlägt ;-)
Da Perl anscheinend das Modul korrekt lädt und nicht dabei schon eine Fehlermeldung produziert, hat die Installation vermutlich funktioniert. In Anbetracht der Tatsache, dass CGI::Session ein pures Perlmodul ohne XS-Anteil ist, wäre es auch ungewöhnlich, wenn man mehr unternehmen müsste, als den Baum mit .pm-Dateien in einen passenden Bibliotheksordner zu kopieren, damit es funktioniert.
Die Fehlermeldung, die Du siehst, bedeutet sehr wahrscheinlich einfach, dass der Konstruktoraufruf CGI::Session->new() einen undefinierten Wert zurückgeliefert hat. Du solltest also, so wie es in der Dokumentation von CGI::Session beschrieben ist, überprüfen, was CGI::Session->errstr() zurückgibt, um herauszufinden, wo das Problem liegt.
|
|
When C++ is your hammer, every problem looks like your thumb.
|
|
|
|
-

+3 replies
-
-

+2 replies
-
User since 2003-08-04
13296
articles
|
Guest sman
Die Fehlermeldung ist jetzt folgende
Quotenew(): failed: couldn't load CGI::Session::Driver::file: [Mon Aug 24 04:43:54 2009] test.cgi: [Mon Aug 24 04:43:54 2009] test_session.cgi: Can't continue after import errors at CGI/Session/Driver/file.pm line 9 [Mon Aug 24 04:43:54 2009] test_session.cgi: [Mon Aug 24 04:43:54 2009] test_session.cgi: BEGIN failed--compilation aborted at CGI/Session/Driver/file.pm line 9.
Anscheinend gibt es Fehler bei file.pm. Kann es was damit zutun haben, dass man als normaler Kunde auf dem Strato-Server nicht genug Schreibrechte in root, /Temp/, usw. hat? Kann ich das irgendwie umgehen?
Du kannst ein eigenes Verzeichnis angeben:
| Code (perl): |
$s = CGI::Session->new("driver:file", $sid, {Directory=>'/irgendein/verzeichnis/auf/das/du/zugriff/hast/'});
|
|
|
|
|
|
|
-
|
guest sman
|
2009-08-24 12:19 |
|
|
|
|
|
|
Das führt bei leider wieder auf den gleichen Fehler, "new" scheint nicht allgemein zu funktionieren.
|
|
|
|
-

+4 replies
-
User since 2003-08-04
8330
articles
|
Guest smanDa das Modul installiert werden muss (kompiliert),
da muss gar nichts kompiliert werden, das ist doch reines perl und verwendet auch keinen AutoLoader.
in ModuleWieInstalliereIchEinModul steht eigentlich drin, was man dazu wissen muss.
Quotenutzt es nichts es einfach dateiweise per FTP in den cgi-bin Ordner zu kopieren. Das führt zu massig Fehlermeldungen beim Ausführen.
sind diese fehlermeldungen geheim oder magst du sie uns mitteilen?
ich bin wie gesagt der meinung, bei CGI::Session muss nichts kompiliert werden, von daher geben die fehlermeldungen vielleicht auskunft darüber, ob was beim kopieren falsch gemacht wurde.
|
|
|
|
|
|
-

+27 replies
-
User since 2004-06-17
279
articles
|
... war bei mir ähnlich (bei 1&1).
Ich musste dann nur noch das Verzeichnis /auto/CGI/Session mit den darin enthaltenen *.al bzw *.ix Dateien einkopieren. Dann lief es.
Und Du musst natürlich in Deinem Skript noch angeben, dass in einem zusätzlichen Verzeichnis nach Modulen gesucht werden muss:
use lib '/dein/pfad/zum/modul/';
Last edited: 2009-08-24 16:28:35 +02:00
|
|
|
|
|
|
-
User since 2003-08-04
8330
articles
|
|
ah, es verwendet doch AutoLoader. hab ich mich verguckt.
|
|
|
|
|
|
-

+25 replies
-
|
guest sman
|
2009-08-24 17:24 |
|
|
|
|
|
Hey Martin,
ich bin jetzt sehr aufgeregt weil du so hoffnungsvoll überzeugt schreibst :)
Leider kann ich in meiner Perl Distribution in "/auto/CGI/Session/" nichts finden außer einer ".packlist"-Datei. Nach etwas googeln fand ich die Dateien hier. den auto-Ordner habe ich dann normal in /cgi-bin/ auf dem Server kopiert.
Das Script lässt sich davon aber nicht im geringsten beeindrucken :( Vielleicht sind die Dateien falsch oder muss ich ihm beibringen dass er nach ihnen suchen soll? (Weiß AutoLoader (ist bei Strato installiert) dass es im Ordner "auto" suchen soll??)
Mein Verzeichnis-Baum ist folgender:
| Code: |
|
/ /otherwwwfiles /cgi-bin/test.cgi /cgi-bin/CGI/Session/Session.pm /cgi-bin/CGI/Session/Session/other-dirs-and-files /cgi-bin/auto/CGI/Session/some-alien-al-and-ix-files
|
Ich gehe davon aus dass Perl in "." nach den Modulen sucht, was ohne zusätzlichen "use lib"-Befehl zumindest für CGI::Session funktioniert. Ist das nicht genug für /auto/CGI/Session?
|
|
|
|
-

+19 replies
-
User since 2003-08-04
8330
articles
|
darf ich mal ganz vorsichtig fragen, welche version von CGI::Session du hast? seit der version 4 wird kein AutoLoader mehr verwendet. und das war im februar 2005.
d.h. falls irgendwelche .al dateien verlangt werden, hast du eine sehr veraltete version.
du weisst nicht, wie du die version rausfindest? grep VERSION Session.pm
edit: und im übrigen ist es gar keine gute idee, irgendwelche dateien, die man so im netz findet, manuell in den auto-ordner zu legen. evtl. passen ja die versionen gar nicht zusammen.
besorg dir erstmal ne aktuelle version.
oder nutz cgipan, um CGI::Session direkt auf dem server zu installieren. ist vielleicht das einfachste.
manuell dateien von verschiedenen paketversionen wild rumzukopieren ist jedenfalls nicht angebracht, zumal dann auch keiner mehr irgendwelche fehler nachvollziehen kann.
Last edited: 2009-08-24 17:34:08 +02:00
|
|
|
|
|
|
-

+18 replies
-
|
guest sman
|
2009-08-24 19:42 |
|
|
|
|
|
Ich habe das aktuelle CGI::Session Modul von CPAN benutzt, das dürfte Version 4.20 sein.
Dass man keine Dateien aus dem Netz nimmt, weis ich, aber ich wollte zumindest alles ausprobiert haben, da der Tipp irgendwie hoffnungsvoll klang. Habe die Dateien nun wieder gelöscht.
CGIPAN:
danke für den Hinweis, das kannte ich noch nicht. habe es gleich abgelegt unter | Code: |
|
/cgi-bin/cgipan/cgipan.cgi /cgi-bin/cgipan/build /cgi-bin/cgipan/mylib
|
Zuerst trat nun im Browser ein "Insecure dependency" Software Error auf bzgl chdir im -T Switch mode. Das hab ich wegbekommen indem ich die Taint-Option -T im Aufruf von Perl (erste Zeile) entfernt habe. Dann kam der Fehler "Cant use an undefined value as a Symbol reference", behoben durch auskommentieren von "use strict;" und die Filehandler "my $dir" durch schlicht "DIR" ersetzen. Seit dem funktioniert das Script.
Ich kopiere also das Session-Modul (gepackt) von CPAN in den build-Ordner und drücke auf der cgipan-Seite auf Start, unpack.
Der erste Punkt danach enthält einen Link zum folgenden Fehler.
| Code: |
|
/usr/bin/perl5 -I/home/strato/www/me/www.meinedomain.de/htdocs/cgi-bin/cgipan/mylib Makefile.PL PREFIX=/home/strato/www/me/www.meinedomain.de/htdocs/cgi-bin/cgipan/mylib LIB=/home/strato/www/me/www.meinedomain.de/htdocs/cgi-bin/cgipan/mylib 2>&1: Not enough arguments for mkdir at Makefile.PL line 145, near "))" BEGIN not safe after errors--compilation aborted at Makefile.PL line 150.
|
Die anderen drei Punkte "make", "make test" und "make install" führen alle zu ähnlichen Fehlern:
| Code: |
|
/usr/bin/make install 2>&1: sh: /usr/bin/make: not found
|
Wo allerdings "make" bei Strato liegt, weiß ich nicht, versuche es aber noch herauszubekommen (via tech support, vielleicht wissen die ja wenigstens das...)
Oder habe ich bis hierhin schon irgendetwas falsch gemacht?
|
|
|
|
-

+13 replies
-
User since 2003-08-04
8330
articles
|
|
den fehler bei Makefile.PL kann ich nicht nachvollziehen. wenn du aber kein make zur verfügung hast, wirds eh schwer :-/
|
|
|
|
|
|
-
User since 2006-07-10
1293
articles
|
|
Gerade nachgeschaut. Ich habe kein Zugriff auf "make".
|
|
|
|
-

+11 replies
-
|
guest sman
|
2009-08-24 22:02 |
|
|
|
|
|
Fehler mit Makefile.PL behoben!
Ich habe der Funktion mkdir in Makefile.PL noch einen zweiten Parameter übergeben | Code (perl): |
mkdir(File::Spec->catfile('t', 'sessiondata'),0666);
|
Das hat er gebraucht und jetzt funktioniert Punkt 1, er gibt nun aus:
| Code: |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
/usr/bin/perl5 -I/home/strato/www/me/www.meinedomain.de/htdocs/cgi-bin/cgipan/mylib Makefile.PL PREFIX=/home/strato/www/me/www.meinedomain.de/htdocs/cgi-bin/cgipan/mylib LIB=/home/strato/www/me/www.meinedomain.de/htdocs/cgi-bin/cgipan/mylib 2>&1: Warning: prerequisite CGI 3.26 not found at (eval 2) line 222. Warning: prerequisite Data::Dumper not found at (eval 2) line 222. Warning: prerequisite Digest::MD5 not found at (eval 2) line 222. Warning: prerequisite Scalar::Util not found at (eval 2) line 222. Warning: prerequisite Test::More not found at (eval 2) line 222. ---------------------------------------- #### WARNING ####
If you are using custom CGI::Session drivers they may not be compatible with the current driver specifications. You will need to make some changes to your drivers' code before proceeding with this installation to make it compatible with CGI::Session 4.x.
Fortunately, current driver specifications are a lot easier to adapt to. Should you have any assistance re-coding your current drivers, please let me know.
Current driver specs are documented in CGI/Session/Driver.pm
#### TESTING #####
You are encouraged to run tests for the backend you will be using. The database backends that need a customized connection string won't run by default. To run them, some environment variables must be set.
The simplest method is to use the standard "DBI_DSN/DBI_USER/DBI_PASS" environment variables.
Otherwise, you can set these variables: For PostgreSQL: CGISESS_PG_DSN CGISESS_PG_USER CGISESS_PG_PASS
For MySQL: CGISESS_MYSQL_DSN CGISESS_MYSQL_USER CGISESS_MYSQL_PASS CGISESS_MYSQL_SOCKET
---------------------------------------- Warning: Module::Metadata::Changes's ini.report.pl failed to generate or update Changelog.ini. ---------------------------------------- 'ABSTRACT' is not a known MakeMaker parameter name. 'AUTHOR' is not a known MakeMaker parameter name. 'EXTRA_META' is not a known MakeMaker parameter name. Writing Makefile for CGI::Session
I didn't find CGI (version 3.26). You may find it here: CGI
|
Ist das jetzt gut oder schlecht? Besonders letzter Punkt irretiert mich, bei Strato habe ich Standardmäßig das CGI-Modul Version 2.42, heißt das er kann nicht richtig weiterarbeiten bei der alten version? Kann ich die neue irgendwie nachträglich einfügen bzw in /cgi-bin/ kopieren? Reicht dann ein use lib ... -Befehl um die neue CGi der älteren vorzuziehen?
|
|
|
|
-

+10 replies
-
User since 2003-08-04
8330
articles
|
ach du meine güte, was ist das denn für eine perl-version?
das erklärt einiges. CGI 2.42 ist von ca. 1998, Data::Dumper ist schon seit der version 5.005 im core mit dabei.
das kann so nicht funktionieren.
lass dir das perl updaten oder wechsle den hoster...
edit: ausserdem funktioniert das mkdir nur mit 2 argumenten, und das open mit 3 argumenten bzw. lexikalischem filehandle funktionierte auch nicht. es spricht sehr viel dafür, dass du es da mit 5.00405 zu tun hast. das ist steinzeit-perl, wenn strato sowas heute noch anbietet, weiss ich, warum ich die nicht mag...
Last edited: 2009-08-24 22:15:25 +02:00
|
|
|
|
|
|
-

+3 replies
-
User since 2003-08-04
8330
articles
|
ach, die version schriebst du ja oben schon, das hab ich völlig überlesen.
damit wirst du es sehr schwer haben, irgendwas modernes zu installieren, viele module verlangen heutzutage mindestens 5.6.0
also schmeiss dir am besten ein perl 5.10.1 drauf, dann bist du ein paar sorgen los.
|
|
|
|
|
|
-
|
guest sman
|
2009-08-24 22:28 |
|
|
|
|
|
Vielen Dank für die aufschlussreichen Worte!
ich hatte keine Ahnung wie der aktuelle Stand der Versionen ist, aber sehe nun ein dass es unzumutbar ist. Für eine Premium Version. Der Tech Support wirken morgen was von mir zu hören kriegen!
(Zur Rechtfertigung, mein Vater hat das Paket vor mehr als 10 Jahren gekauft und nutzt es für seine Firma. Ich bin dort kostenfrei Untermieter und arbeite darauf. Erst recht was die neuzeitliche Entwicklung in Sachen Webhosting betrifft würde ich, wenn ich es mir aussuchen könnte, heute Strato nicht wählen, wegen dieser und vieler anderer technischer Unproffessionalitäten die sich in den Jahren ergeben haben)
|
|
|
|
-

+5 replies
-
User since 2006-07-10
1293
articles
|
Ich habe hier:
wiki: Wie finde ich alle installierten Module?
Ein Script rein gestellt, mit dem sich nicht nur die Installierten Module finden lassen, sondern auch dessen Versionen.
Selbst mal bei Strato getestet:
perl-Version von "$]" ist '5.008005'
Die perl-Version von "perl --version" ist 'v5.8.5 built for sun4-solaris'
Scheint so als würde Apache ein anderes perl (fastcgi?) nutzen als sonst installiert ist.
Edit: Unsinn geschrieben, ist schon zu spät. Sollte besser hinschauen.
Last edited: 2009-08-24 23:27:44 +02:00
|
|
|
|
-

+4 replies
-
User since 2006-01-27
1241
articles
|
Guest smanDann kam der Fehler "Cant use an undefined value as a Symbol reference", behoben durch auskommentieren von "use strict;"
Ich würd da nicht von "beheben" schreiben, eher von "ich hab's auskommentiert und gebetet, dass es trotzdem funktioniert"...
Nur weil Du "use strict;" auskommentierst, ist ein "undefined value" nicht plötzlich definiert... Am Funktionieren kann das IMHO nichts ändern...
Last edited: 2009-08-24 20:14:33 +02:00
|
|
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
|
|
|
|
-

+3 replies
-
|
guest sman
|
2009-08-24 20:44 |
|
|
|
|
|
Keine Sorge, dabei ging es nur darum, dass im Script immer
| Code (perl): |
opendir my $dir, "."; ... readdir $dir; ... close $dir;
|
geschrieben wurde. Das hab ich vorher auch noich nicht gesehen, Erstezn durch einen simplen Handler
| Code (perl): |
opendir DIR, "."; ... readdir DIR; ... close DIR;
|
löst die Sache und sollte nichts an der Funktionalität ändern. $dir wird sonst nicht verwendet im Script.
|
|
|
|
-
User since 2006-01-27
1241
articles
|
Der Code ist eigentlich vollkommen OK und sollte so, wie er original dort stand, auch arbeiten.
Siehe auch Was ist ein lexikalischer Filehandle?.
Mein Einwand bezog sich übrigens auf das Auskommentieren des "use strict;", was IMHO (fast [1]) immer eine schlechte Idee ist, egal um was es geht.
[1]Ausnahmen mag es geben, fallen mir aber aktuell keine ein.
|
|
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
|
|
|
|
-
User since 2006-07-10
1293
articles
|
Warum daraus keine Funktion machen?
| Code (perl): |
|
sub read_cwdir
{
if(opendir(my $dir, "."))
{
my @list=readdir $dir;
close $dir;
return wantarray?@list:shift(@list);
}
else
{ return wantarray?():undef; }
}
|
Dann kann man später mal einen zentralen ErrorHandler einbauen.
|
|
|
|
-

+5 replies
-
User since 2006-01-27
1241
articles
|
Wie wäre es mit einer Anfrage beim Provider, ob die bitte das entsprechende Modul installieren können?
Ist das so schwer bei Strato?
"Premium" liesse mich jedenfalls hoffen, dass der Provider bei sowas behilflich sein würde.
|
|
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
|
|
|
|
-

+3 replies
-
User since 2006-07-10
1293
articles
|
Ich habe es gerade selber ausprobiert.
Mein lokale Installation unter: '/usr/share/perl5/' genommen und in das 'cgi-bin' Verzeichnis des Wabspaces kopiert. Dann dieses TestScript ausgeführt:
| Code (perl): |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
use CGI::Session;
my $cgi=CGI->new();
print $cgi->header();
warningsToBrowser(1);
my $session = CGI::Session->new();
my $id=$session->id();
my $header=$session->header();
print <<EOH;
<html>
<head><title>TESTS<title></head>
<body>
<h3>OUTPUT:</h3>
<pre>
$id
$header
</pre>
</body>
</html>
EOH
|
Funktioniert ohne Probleme.
Es könnte sein, dass die Installation unter Windows etwas anders abläuft, weshalb das Kopieren nicht klappt. (Rechtevergabe, Pfade, etc.)
Ich kann dir Mein CGI::Session zuschicken. vielleicht hilft es.
|
|
|
|
-
|
guest sman
|
2009-08-24 22:03 |
|
|
|
|
|
Ja bitte!
post at mschroen . de
|
|
|
|
-
|
guest sman
|
2009-08-24 23:01 |
|
|
|
|
|
Dein Modul verhält sich leider genauso wie meines, die Fehlermeldung
| Code: |
[Mon Aug 24 22:48:32 2009] Session.pm: [Mon Aug 24 22:48:32 2009] Session.pm: Can't use global $1 in "my" at CGI/Session.pm line 809. BEGIN failed--compilation aborted at /home/strato/http/premium/web8/43/39/534539/htdocs/cgi-bin/test.cgi line 6.
|
hatte ich auch schonmal. Die Zeile 809 in Session.pm ist | Code (perl): |
$dsn->{ $plug } = $mod_name = $1;
|
Ich gehe dank pq davon aus, dass die alte Perl-Version der Grund für all das Dilemma ist. Deswegen muss ich an dieser Stelle wohl aufgeben.
Vielen lieben Dank an euch für die fleißige, kompetente und vor allem zeitnahe Mithilfe!
PS: Ich habe mir in der Zwischenzeit eine Holzhammer-Lösung gebastelt, da zumindest PHP (ich will garnicht wissen welche Version) mit Sessions umgehen kann. Die Notfalllösung ist erstmal, mit perl ein php-script aufzurufen, dass für mich die Session verwaltet und an perl zurückgibt. Ich vermute aber das das nicht nur sehr hässlich ist, sondern vielleicht auch Sihcerheitslücken hat? Wie auch immer, ich werde alsbald einen Providerwechsel vornehmen... :)
|
|
|
|
View all threads created 2009-08-23.
|