deepsurfer wrote:aha.... wenn du also dran denkst die erste Zeile richtig zu setzen dann sollte das Script bei deinem Windows-Xampp laufen.
Wie sich das Perl mit MySQL connect verhält kann ich nix zu sagen, ich hab vor langer Zeit nur mit Textbasierten DBfiles hantiert und seither auch nicht mehr mit Perl gearbeitet. Da kann ich also nix zu sagen. Hoffe Du kommst jetzt damit klar... greets
Deep
salsa_experience wrote:hallo Freunde,
hier noch eine Nachfrage. Ich habe alles gemacht, habe ein ganzes Wochenend installiert und deinstalliert und wieder neu installiert. Nun nach zwei superlangen Nächten bin ich reichlich übermüdet - aber fast am Ziel: Ich habe auf meiner Kiste Xampp am laufen... und auch Perl.
http://localhost/cgi-bin/perltest.cgi gibt folgende Meldung aus:
- Code: Select all
GCI with MiniPerl
CGI with MiniPerl is ready ...
Das ist doch das Zeichen dass Perl gut läuft oder; Ist es das denn etwa nicht!? Ich gehe jedenfalls mal davon aus.
Aber es kann ja sein, dass ich immer noch was falsch gemacht habe. Ein eigenes Script habe ich nach /htdocs - gelegt in diesen Ordner hinein ein Unterberzeichnis angelegt mit dem Namen miner
In diesen Ordner habe ich ein Script gelegt, das ich parser.cgi genannt habe. Das Script habe ich unten mal reingestellt - zum angucken.
das macht dann im Ganzen diesen Ausdruck: htdocs/miner/parser.cgi
Dann rufe ich die Seite http://localhost/miner/parser.cgi auf
Es kommt allerdings dann eine Fehlermeldung auf dem Browser: Der
Bildschirminhalt.
- Code: Select all
Serverfehler!
Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.
Fehlermeldung:
couldn't create child process: 720003: parser.cgi
Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 500
Hmm ich bin momentan am rätseln was se sein kann. Also wenn doch die obenstehende Meldung mit dem kommt
- Code: Select all
GCI with MiniPerl
CGI with MiniPerl is ready ...
out
dann ist doch eigentlich zu erwarten dass Perl richtig läuft, oder!?
Was meint ihr denn dazu!?
ich freue mich auf Tipps.
greetz
sals
hier noch das script dass unter http://localhost/miner/parser.cgi aufrerufen wird, während es in htdocs / miner liegt und den Namen parser.cgi hat - Apropos der Shebang ist doch eigentlich auch richtig angepasst oder!?
- Code: Select all
#!/xampp/perl/bin/perl.exe
use strict;
use warnings;
use LWP::RobotUA;
use HTML::LinkExtor;
use HTML::TokeParser;
use URI::URL;
use Data::Dumper; # for show and troubleshooting
my $url = "http://www.nukeforums.com/forums/viewforum.php?f=17";
my $ua = LWP::RobotUA->new;
my $lp = HTML::LinkExtor->new(\&wanted_links);
my @links;
get_threads($url);
foreach my $page (@links) { # this loops over each link collected from the index
my $r = $ua->get($page);
if ($r->is_success) {
my $stream = HTML::TokeParser->new(\$r->content) or die "Parse error in $page: $!";
# just printing what was collected
print Dumper get_thread($stream);
# would instead have database insert statement at this point
} else {
warn $r->status_line;
}
}
sub get_thread {
my $p = shift;
my ($title, $name, @thread);
while (my $tag = $p->get_tag('a','span')) {
if (exists $tag->[1]{'class'}) {
if ($tag->[0] eq 'span') {
if ($tag->[1]{'class'} eq 'name') {
$name = $p->get_trimmed_text('/span');
} elsif ($tag->[1]{'class'} eq 'postbody') {
my $post = $p->get_trimmed_text('/span');
push @thread, {'name'=>$name, 'post'=>$post};
}
} else {
if ($tag->[1]{'class'} eq 'maintitle') {
$title = $p->get_trimmed_text('/a');
}
}
}
}
return {'title'=>$title, 'thread'=>\@thread};
}
sub get_threads {
my $page = shift;
my $r = $ua->request(HTTP::Request->new(GET => $url), sub {$lp->parse($_[0])});
# Expand URLs to absolute ones
my $base = $r->base;
return [map { $_ = url($_, $base)->abs; } @links];
}
sub wanted_links {
my($tag, %attr) = @_;
return unless exists $attr{'href'};
return if $attr{'href'} !~ /^viewtopic\.php\?t=/;
push @links, values %attr;
}
xampp\
E:\Server\xampp\cgi-bin
cgi.cgi
perltest.cgi
drivers.pl
printersv.pl
E:\Server\xampp\htdocs
E:\Server\xampp\htdocs\forbidden
E:\Server\xampp\htdocs\miner
E:\Server\xampp\htdocs\modperl
E:\Server\xampp\htdocs\modperlasp
E:\Server\xampp\htdocs\restricted
E:\Server\xampp\htdocs\xampp
#!/xampp/perl/bin/perl.exe
#!/usr/bin/perl
use strict;
use warnings;
Kleinweby wrote:deine Shebang is noch immer nicht richtig, denn bei windows gibs halt kein "/" du muss schon den vollen pfad eintragen.
kleinweby
#!/xampp/perl/bin/perl.exe
#!E:/Server/xampp/perl/bin/perl.exe
#!e:/Server/xampp/perl/bin/perl.exe
use strict;
use warnings;
use LWP::RobotUA;
use HTML::LinkExtor;
use HTML::TokeParser;
use URI::URL;
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html (View Source for full doctype...)>
- <html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
- <head>
<title>Serverfehler!</title>
<link rev="made" href="mailto:admin@localhost" />
- <style type="text/css" xml:space="preserve">
- <!-- /*
-->
- <![CDATA[
/*><!--*/
body { color: #000000; background-color: #FFFFFF; }
a:link { color: #0000CC; }
p, address {margin-left: 3em;}
span {font-size: smaller;}
/*
]]>
*/-->
</style>
</head>
- <body>
<h1>Serverfehler!</h1>
<p>Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.</p>
- <p>
Fehlermeldung:
<br />
Premature end of script headers: parser.cgi
</p>
- <p>
Sofern Sie dies f
ü
r eine Fehlfunktion des Servers halten, informieren Sie bitte den
<a href="mailto:admin@localhost" shape="rect">Webmaster</a>
hier
ü
ber.
</p>
<h2>Error 500</h2>
- <address>
<a href="/" shape="rect">localhost</a>
<br />
- <span>
09/12/06 09:52:22
<br />
Apache/2.2.2 (Win32) DAV/2 mod_ssl/2.2.2 OpenSSL/0.9.8b mod_autoindex_color PHP/5.1.4
</span>
</address>
</body>
</html>
deepsurfer wrote:STOP !!!
@Kleinweby !!
JAein, es reicht #!/xampp/perl/bin/perl.exe
wenn der xampp auf c:\xampp Installiert ist.
Wenn er in einem unterpfad liegt z.b. c:\apachefriends\xampp
so muss der SHEBANG #!/apachefriends/xampp/perl/bin/perl.exe lauten.
Richtig ist, das ein "absoluter Pfad" angegeben werden muss, die Laufwerkskennung kann dabei weg bleiben, da der erste SLASH die höchste Pfadangabe darstellt.
ist bei mir mit allen derzeit getesteten Scripten so funktionstüchtig.
Wenn man die Testscript von XAMPP selber mal editiert sieht man auch wie der SHEBANG auszusehen hat !!!
nochmals @deepsurfer: läuft das Script bei dir denn, [unter Windows], auch so oder so ähnlich ab...? Vielleicht ist ja auch mein Rechner zu langsam. Es ist halt wie im Blindflug.
ich stelle den nun abgeänderten Code mal unten rein.das hier: print "Content-Type: text/html\n\n":
deepsurfer wrote:Also wenn eine Sanduhr kommt, heist es ja erstmal das er was tut. Ich denke das er nach 3 Minuten nicht auffhört sodass ich von ausgehe das das Script seine Arbeit erstmal verrichtet.
Erste Check möglichkeit wäre eine abfrage auf deine DB mit phpmyadmin, ob dort überhaut daten auflaufen.
Zweite möglichkeit wäre das du ein Forum-Thread ausliest das eventuell nur 2 oder 3 Texte beinhaltet, sodass der CGI-DUMP nicht erst mir hunterten von Texten arebieten muss.
Wenn dann damit ein zufriedenes Ergebnis vorliegt weisst du das dein Script das tut was du willst und kannst es wieder auf einen ForumThread loslassen das gut gefüllt ist.nochmals @deepsurfer: läuft das Script bei dir denn, [unter Windows], auch so oder so ähnlich ab...? Vielleicht ist ja auch mein Rechner zu langsam. Es ist halt wie im Blindflug.
Ich hab dein Script (PrivatMessage) nicht getestet, da ich auf anhieb jetzt kein Forum zum CGI-Dumpen habe um es zu testen.
Da Perlscripte von hause aus keinen Status anzeigen, wäre vielleicht noch die möglichkeit das DUMPscript dahingehen zu erweitern das er jeweils nur einen Threadtext einliest, in DB abspeichert, eine Statusmeldung ausgibt und dann mit dem nächsten Threadtext weiterarbeitet.
Bedarf also einer zwischengelagerten Abfrageschleife im Script
(kann ich jetzt so nicht schreiben, müsste mich dafür wieder sehr viel einlesen.)
Was mir aber auffällt ist....warum in PERL ?, warum nicht in PHP geschrieben, damit sind Statusmeldungen mit drei befehlsfolgen direkt anzeigbar. Würde auch den Webserver nicht so sehr belasten, da PHP solche Abgriffe und Auswertungen fast "ON the Fly" durchführt.
Soll heissen, das bei PERL immer erst ein Ergebnis vorhanden sein muss um daraus eine Statusmeldung zu generieren, bei PHP kann man direkt in die Abarbeitung eine "echo" ausgabe einbauen worin man sieht was gerade vom Script abgearbeitet wird.
#!/usr/bin/perl -> verbesserter Shebang - der ist dann eben anders!!
use strict;
use warnings;
use LWP::RobotUA;
use HTML::LinkExtor;
use HTML::TokeParser;
use URI::URL;
use Data::Dumper; # for show and troubleshooting
my $url = "http://www.myforums.com/forums/viewforum.php?f=17";
my $ua = LWP::RobotUA->new;
my $lp = HTML::LinkExtor->new(\&wanted_links);
my @links;
get_threads($url);
foreach my $page (@links) { # this loops over each link collected from the index
my $r = $ua->get($page);
if ($r->is_success) {
my $stream = HTML::TokeParser->new(\$r->content) or die "Parse error in $page: $!";
# just printing what was collected
print Dumper get_thread($stream);
# would instead have database insert statement at
this point
##da muss es also als ersatz rein->
print "Content-Type: text/html\n\n":
## stimmts !?
} else {
warn $r->status_line;
}
}
sub get_thread {
my $p = shift;
my ($title, $name, @thread);
while (my $tag = $p->get_tag('a','span')) {
if (exists $tag->[1]{'class'}) {
if ($tag->[0] eq 'span') {
if ($tag->[1]{'class'} eq 'name') {
$name = $p->get_trimmed_text('/span');
} elsif ($tag->[1]{'class'} eq 'postbody') {
my $post = $p->get_trimmed_text('/span');
push @thread, {'name'=>$name, 'post'=>$post};
}
} else {
if ($tag->[1]{'class'} eq 'maintitle') {
$title = $p->get_trimmed_text('/a');
}
}
}
}
return {'title'=>$title, 'thread'=>\@thread};
}
sub get_threads {
my $page = shift;
my $r = $ua->request(HTTP::Request->new(GET => $url), sub {$lp->parse($_[0])});
# Expand URLs to absolute ones
my $base = $r->base;
return [map { $_ = url($_, $base)->abs; } @links];
}
sub wanted_links {
my($tag, %attr) = @_;
return unless exists $attr{'href'};
return if $attr{'href'} !~ /^viewtopic\.php\?t=/;
push @links, values %attr;
}
@Deepsurfer - es wäre für die Fehlersuche vielleicht sehr sehr hilfreich wenn du guckst ob das Script, dass ich dir in der pm gepostet habe, jenes mit der vollen URL, bei dir läuft. Im allergroessten Notfall koennte ich dann vielleicht einach ein kpl. Xampp von dir installieren -sozusagen eben recompiled - meinst du dass das geht oder ist diese Idee relativ verrrückt. diese Idee ist mir halt im Moment so eingeschossen
deepsurfer wrote:@Deepsurfer - es wäre für die Fehlersuche vielleicht sehr sehr hilfreich wenn du guckst ob das Script, dass ich dir in der pm gepostet habe, jenes mit der vollen URL, bei dir läuft. Im allergroessten Notfall koennte ich dann vielleicht einach ein kpl. Xampp von dir installieren -sozusagen eben recompiled - meinst du dass das geht oder ist diese Idee relativ verrrückt. diese Idee ist mir halt im Moment so eingeschossen
Ich werds testen... kann aber sein das ich morgen erst was zu schreibe (im moment viel auf dem schreibtisch hier liegen)
Eine XAMPP Version von mir wäre unnötig.
Ich hab alle Vorgehensweisen hier beschrieben.
Ich benutze:
- XAMPP 1.5.3a ZIP Version (einfach entpackt und läuft c:\xampp)
- Perl-Addon für "XAMPP 1.5.3a ZIP" heruntergeladen und entpackt
- Perl-testscripte von XAMPP durchgetetst
- PERL Sysinfoscript (was ich seit jahren benutze zum testen des PERL wie PHPINFO) läuft. Mit dem Sysinfoscript gesehen das die Erforderliche Module deines Scriptes im PerlAddon vorhanden sind
- Scripttesting innerhalb des /htdocs Pfades getestet und für Lauffähig erklärt
Und bevor die Frage aufkommt (auch von den anderen)
http://cologne-predators.de/deepsurfer/sysinfoxampp.rar
Ins CGI-BIN Verzeichnis entpacken http://localhost/cgi-bin/sysinfoxampp.cgi aufrufen.
An den SHEBANG denken !!
#!e:/Server/xampp/perl/bin/perl.exe
Objekt nicht gefunden!
Der angeforderte URL konnte auf dem Server nicht gefunden werden. Sofern Sie den URL manuell eingegeben haben, überprüfen Sie bitte die Schreibweise und versuchen Sie es erneut.
Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 404
localhost
09/12/06 15:34:08
Apache/2.2.2 (Win32) DAV/2 mod_ssl/2.2.2 OpenSSL/0.9.8b mod_autoindex_color PHP
Perl: E:\Server\xampp\perl\bin\perl.exe
Perl-Version: 5.008007
Betriebssystem: MSWin32
Perl befindet sich in:
Sendmail:
Verzeichnisse, die nach Perl durchsucht wurden E:/Server/xampp/perl/lib
E:/Server/xampp/perl/site/lib
deepsurfer wrote:Wurde zwar schonmal von dir getestet, aber nochmal schadet nicht.
Im \xampp\cgi-bin Verzeichnis liegen Testscripte
cgi.cgi
perltest.cgi
printenv.pl
Wenn alle drei mit dem aufruf http://localhost/cgi-bin/scriptname.xxx
laufen, so sollte das sysinfoxampp.cgi das dort nun auch sein sollte
funktionieren.
Wenn du das Perl-Addon falsch installiert hättest, so würde eine klare Fehlermeldung erscheinen (soeben getestet mit einer XAMPP Version ohne Perl-Addon)
Da nun bei dir 404 Meldung kommt, sieht für mich so aus das du den Aufruf falsch gemacht hast oder das sysinfoxampp.cgi nicht dort abgelegt hast wie es in dem HINWEIS.txt steht.
Die Äusserung das du CGI Scripte im XAMPP auch innerhalb vom htdocs Pfad benutzen kannst gilt auch bei diesem Script nur ist dementsprechend der Aufruf anders.
Folglich:
Scripte die im \xampp\cgi-bin sind, werden mit http://localhost/cgi-bin/scriptname aufgerufen.
Scripte die innerhalb des htdocs abgelegt sind (z.b. \htdocs\scripttestpfad )
werden mit http://localhost/scripttestpfad/scriptname aufgerufen.
Users browsing this forum: No registered users and 48 guests