You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by "Sergey V. Stashinskas" <se...@mail.ru> on 2003/06/27 12:47:45 UTC
Problem with PerlTransHandler
Hi all,
Excuse me for my poor English because I'm from Russia.
I have the problem with url translation.
There are 2 scripts to do it.
1st script work perfectly, but 2nd failed.
Only difference between them is string "my $dbh = DBI->connect...";
I use Apche::DBI but without this module the same thing happens.
Why?
1st:
package Apache::StripSession
use strict;
use Apache;
use Apache::Constants qw(:common);
sub handler {
my $r = shift;
return DECLINED unless $r->uri =~ /^\/session\/([a-zA-Z0-9]{32})(.*)/;
$r->subprocess_env(SESSION => $1);
$r->uri($2);
return DECLINED;
}
2nd:
package Apache::StripSession;
use strict;
use Apache;
use Apache::Constants qw(:common);
sub handler {
my $r = shift;
my $dbh = DBI->connect('dbi:mysql:db', 'user', 'pswd');
$dbh->disconnect;
return DECLINED unless $r->uri =~ /^\/session\/([a-zA-Z0-9]{32})(.*)/;
$r->subprocess_env(SESSION => $1);
$r->uri($2);
return DECLINED;
}
Re[2]: Problem with PerlTransHandler
Posted by "Sergey V. Stashinskas" <se...@mail.ru>.
DBI->connect is working ok.
Strange problem is with regexp.
If "DBI->connect ..." string is present in script then $1 ok but $2 is undefined.
Otherwise $1 and $2 have real normal values.
-----Original Message-----
From: Thomas Klausner <do...@zsi.at>
To: modperl@perl.apache.org
Date: Fri, 27 Jun 2003 14:56:22 +0200
Subject: Re: Problem with PerlTransHandler
>
> Hi!
>
> On Fri, Jun 27, 2003 at 02:47:45PM +0400, "Sergey V. Stashinskas" wrote:
>
> > sub handler {
> > my $r = shift;
> >
> > my $dbh = DBI->connect('dbi:mysql:db', 'user', 'pswd');
> > $dbh->disconnect;
>
> maybe the DBI->connect isn't working and thus your script dies / throws some
> error ?
>
> I'd try to check if connect works, if $dbh works, etc.
>
> --
> #!/usr/bin/perl http://domm.zsi.at
> for(ref bless{},just'another'perl'hacker){s-:+-$"-g&&print$_.$/}
>
Re: Problem with PerlTransHandler
Posted by Thomas Klausner <do...@zsi.at>.
Hi!
On Fri, Jun 27, 2003 at 02:47:45PM +0400, "Sergey V. Stashinskas" wrote:
> sub handler {
> my $r = shift;
>
> my $dbh = DBI->connect('dbi:mysql:db', 'user', 'pswd');
> $dbh->disconnect;
maybe the DBI->connect isn't working and thus your script dies / throws some
error ?
I'd try to check if connect works, if $dbh works, etc.
--
#!/usr/bin/perl http://domm.zsi.at
for(ref bless{},just'another'perl'hacker){s-:+-$"-g&&print$_.$/}
Re[6]: Problem with PerlTransHandler
Posted by "Sergey V. Stashinskas" <se...@mail.ru>.
It's my original very simple script:
package Apache::StripSession;
use strict;
use Apache;
use Apache::Constants qw(:common);
use DBI;
sub handler {
my $r = shift;
my $dbh = DBI->connect('dbi:mysql:altboards', 'root', '');
# Session
return DECLINED unless $r->uri =~ /^\/session\/([a-zA-Z0-9]{32})(.*)/;
warn "$1, $2";
$r->subprocess_env(SESSION => $1);
$r->uri($2);
return DECLINED;
}
1;
When I try to get page from http://localhost/session/123343..12121/index
it work perfectly.
And this string has appeared in error.log -
"12345678901234567890123456789012, /index at ...."
But if I comment out string 'warn "$1, $2"; ' the same script with the same url doesn't work.
$2 is undefined and browser tell me something like "www.localhost could not be found ..."
Why???
__END__
-----Original Message-----
From: "Raf" <ra...@joshua.dreamthought.com>
To: <se...@mail.ru>
Date: Fri, 27 Jun 2003 15:35:16 -0000 (GMT)
Subject: Re: Re[4]: Problem with PerlTransHandler
>
> Sergey V. Stashinskas said:
> > Problem is not in connection with database.
> > When I try to connect then $2 regexp variable becomes undefined and
> > script can not redirect anywhere. ($r->uri($2)) But when script is not
> > connected with database all works perfectly and this variable has a real
> > defined value. I can not understand this ...
>
> What are you actually getting in your logs? Are you sure that it's even
> getting to $2? My thought is this:
>
> * if you don't get a $dbh back, then under strict you should get a
> cock-up reporting that it can't run the method disconnect on an undefined
> reference.
>
> Can't see why this would happen. How you tried to dump the uri with a
> STDERR? Noticed that you're from Russia, so perhaps it's some kind of
> character encoding/local problem, since you're matching against latin
> character classes? Can weird character creep into your session string?
>
> Just thoughts. Final thought is running it through Apache::DB if you
> fancy building it. Just a thought.
>
> Cheers,
>
> R.
>
>
>
>
>
>
>
>
> > Original source:
> > package Apache::StripSession;
> > use strict;
> > use Apache;
> > use Apache::Constants qw(:common);
> >
> > sub handler {
> > my $r = shift;
> >
> > my $dbh = DBI->connect('dbi:mysql:db', 'user', 'pswd');
> > $dbh->disconnect;
> > return DECLINED unless $r->uri =~
> > /^\/session\/([a-zA-Z0-9]{32})(.*)/;
> >
> > $r->subprocess_env(SESSION => $1);
> > $r->uri($2);
> >
> > return DECLINED;
> > }
> >
> > 1;
> >
> > -----Original Message-----
> > From: "Raf" <ra...@joshua.dreamthought.com>
> > To: <se...@mail.ru>
> > Date: Fri, 27 Jun 2003 15:09:13 -0000 (GMT)
> > Subject: Re: Re[2]: Problem with PerlTransHandler
> >
> >>
> >> Sergey V. Stashinskas said:
> >> > If these lines are commented out then script is working ok.
> >> >
> >> > -----Original Message-----
> >> > From: <cs...@fx.ro>
> >> > To: "Sergey V. Stashinskas "
> >> > <se...@perl.apache.org> Date: Fri, 27
> >> Jun 2003 16:39:12 +0300
> >> > Subject: RE: Problem with PerlTransHandler
> >> >
> >> >>
> >> >> Have you tried to comment out the 2 DBI lines like this:
> >> >>
> >> >> #my $dbh = DBI->connect('dbi:mysql:db', 'user', 'pswd');
> >> >> #$dbh->disconnect;
> >>
> >> Can't find your original post, however try doing something like:
> >>
> >> $dbh->disconnect if ref($dbh);
> >>
> >> or:
> >>
> >> if (ref $dbh) {
> >> $dbh->disconnect;
> >> else {
> >> ## CHECK LOGS for this
> >> print STDERR "\n Failed to connect \n";
> >> };
> >>
> >> Cheers,
> >>
> >> Raf
> >>
> >>
> >>
> >>
>
>
>
>
Re: Re[4]: Problem with PerlTransHandler
Posted by Raf <ra...@joshua.dreamthought.com>.
Sergey V. Stashinskas said:
> Problem is not in connection with database.
> When I try to connect then $2 regexp variable becomes undefined and
> script can not redirect anywhere. ($r->uri($2)) But when script is not
> connected with database all works perfectly and this variable has a real
> defined value. I can not understand this ...
What are you actually getting in your logs? Are you sure that it's even
getting to $2? My thought is this:
* if you don't get a $dbh back, then under strict you should get a
cock-up reporting that it can't run the method disconnect on an undefined
reference.
Can't see why this would happen. How you tried to dump the uri with a
STDERR? Noticed that you're from Russia, so perhaps it's some kind of
character encoding/local problem, since you're matching against latin
character classes? Can weird character creep into your session string?
Just thoughts. Final thought is running it through Apache::DB if you
fancy building it. Just a thought.
Cheers,
R.
> Original source:
> package Apache::StripSession;
> use strict;
> use Apache;
> use Apache::Constants qw(:common);
>
> sub handler {
> my $r = shift;
>
> my $dbh = DBI->connect('dbi:mysql:db', 'user', 'pswd');
> $dbh->disconnect;
> return DECLINED unless $r->uri =~
> /^\/session\/([a-zA-Z0-9]{32})(.*)/;
>
> $r->subprocess_env(SESSION => $1);
> $r->uri($2);
>
> return DECLINED;
> }
>
> 1;
>
> -----Original Message-----
> From: "Raf" <ra...@joshua.dreamthought.com>
> To: <se...@mail.ru>
> Date: Fri, 27 Jun 2003 15:09:13 -0000 (GMT)
> Subject: Re: Re[2]: Problem with PerlTransHandler
>
>>
>> Sergey V. Stashinskas said:
>> > If these lines are commented out then script is working ok.
>> >
>> > -----Original Message-----
>> > From: <cs...@fx.ro>
>> > To: "Sergey V. Stashinskas "
>> > <se...@perl.apache.org> Date: Fri, 27
>> Jun 2003 16:39:12 +0300
>> > Subject: RE: Problem with PerlTransHandler
>> >
>> >>
>> >> Have you tried to comment out the 2 DBI lines like this:
>> >>
>> >> #my $dbh = DBI->connect('dbi:mysql:db', 'user', 'pswd');
>> >> #$dbh->disconnect;
>>
>> Can't find your original post, however try doing something like:
>>
>> $dbh->disconnect if ref($dbh);
>>
>> or:
>>
>> if (ref $dbh) {
>> $dbh->disconnect;
>> else {
>> ## CHECK LOGS for this
>> print STDERR "\n Failed to connect \n";
>> };
>>
>> Cheers,
>>
>> Raf
>>
>>
>>
>>
Re[4]: Problem with PerlTransHandler
Posted by "Sergey V. Stashinskas" <se...@mail.ru>.
Problem is not in connection with database.
When I try to connect then $2 regexp variable becomes undefined and script can not redirect anywhere. ($r->uri($2))
But when script is not connected with database all works perfectly and this variable has a real defined value.
I can not understand this ...
Original source:
package Apache::StripSession;
use strict;
use Apache;
use Apache::Constants qw(:common);
sub handler {
my $r = shift;
my $dbh = DBI->connect('dbi:mysql:db', 'user', 'pswd');
$dbh->disconnect;
return DECLINED unless $r->uri =~ /^\/session\/([a-zA-Z0-9]{32})(.*)/;
$r->subprocess_env(SESSION => $1);
$r->uri($2);
return DECLINED;
}
1;
-----Original Message-----
From: "Raf" <ra...@joshua.dreamthought.com>
To: <se...@mail.ru>
Date: Fri, 27 Jun 2003 15:09:13 -0000 (GMT)
Subject: Re: Re[2]: Problem with PerlTransHandler
>
> Sergey V. Stashinskas said:
> > If these lines are commented out then script is working ok.
> >
> > -----Original Message-----
> > From: <cs...@fx.ro>
> > To: "Sergey V. Stashinskas "
> > <se...@perl.apache.org> Date: Fri, 27 Jun
> > 2003 16:39:12 +0300
> > Subject: RE: Problem with PerlTransHandler
> >
> >>
> >> Have you tried to comment out the 2 DBI lines like this:
> >>
> >> #my $dbh = DBI->connect('dbi:mysql:db', 'user', 'pswd');
> >> #$dbh->disconnect;
>
> Can't find your original post, however try doing something like:
>
> $dbh->disconnect if ref($dbh);
>
> or:
>
> if (ref $dbh) {
> $dbh->disconnect;
> else {
> ## CHECK LOGS for this
> print STDERR "\n Failed to connect \n";
> };
>
> Cheers,
>
> Raf
>
>
>
>
Re: Re[2]: Problem with PerlTransHandler
Posted by Raf <ra...@joshua.dreamthought.com>.
Sergey V. Stashinskas said:
> If these lines are commented out then script is working ok.
>
> -----Original Message-----
> From: <cs...@fx.ro>
> To: "Sergey V. Stashinskas "
> <se...@perl.apache.org> Date: Fri, 27 Jun
> 2003 16:39:12 +0300
> Subject: RE: Problem with PerlTransHandler
>
>>
>> Have you tried to comment out the 2 DBI lines like this:
>>
>> #my $dbh = DBI->connect('dbi:mysql:db', 'user', 'pswd');
>> #$dbh->disconnect;
Can't find your original post, however try doing something like:
$dbh->disconnect if ref($dbh);
or:
if (ref $dbh) {
$dbh->disconnect;
else {
## CHECK LOGS for this
print STDERR "\n Failed to connect \n";
};
Cheers,
Raf
Re[2]: Problem with PerlTransHandler
Posted by "Sergey V. Stashinskas" <se...@mail.ru>.
If these lines are commented out then script is working ok.
-----Original Message-----
From: <cs...@fx.ro>
To: "Sergey V. Stashinskas " <se...@perl.apache.org>
Date: Fri, 27 Jun 2003 16:39:12 +0300
Subject: RE: Problem with PerlTransHandler
>
> Have you tried to comment out the 2 DBI lines like this:
>
> #my $dbh = DBI->connect('dbi:mysql:db', 'user', 'pswd');
> #$dbh->disconnect;
>
> and is still not working? You really need the database connection?
>
> Lian
>
>
> > -----Original Message-----
> > From: Sergey V. Stashinskas [mailto:sergei_stashinsk@mail.ru]
> > Sent: Friday, June 27, 2003 1:48 PM
> > To: modperl@perl.apache.org
> > Subject: Problem with PerlTransHandler
> >
> >
> > Hi all,
> >
> > Excuse me for my poor English because I'm from Russia.
> >
> > I have the problem with url translation.
> > There are 2 scripts to do it.
> > 1st script work perfectly, but 2nd failed.
> > Only difference between them is string "my $dbh = DBI->connect...";
> > I use Apche::DBI but without this module the same thing happens.
> > Why?
> >
> > 1st:
> > package Apache::StripSession
> > use strict;
> > use Apache;
> > use Apache::Constants qw(:common);
> >
> > sub handler {
> > my $r = shift;
> >
> > return DECLINED unless $r->uri =~ /^\/session\/([a-zA-Z0-9]{32})(.*)/;
> >
> > $r->subprocess_env(SESSION => $1);
> > $r->uri($2);
> >
> > return DECLINED;
> > }
> >
> > 2nd:
> > package Apache::StripSession;
> > use strict;
> > use Apache;
> > use Apache::Constants qw(:common);
> >
> > sub handler {
> > my $r = shift;
> >
> > my $dbh = DBI->connect('dbi:mysql:db', 'user', 'pswd');
> > $dbh->disconnect;
> > return DECLINED unless $r->uri =~ /^\/session\/([a-zA-Z0-9]{32})(.*)/;
> >
> > $r->subprocess_env(SESSION => $1);
> > $r->uri($2);
> >
> > return DECLINED;
> > }
> >
> >
>
>
RE: Problem with PerlTransHandler
Posted by cs...@fx.ro.
Have you tried to comment out the 2 DBI lines like this:
#my $dbh = DBI->connect('dbi:mysql:db', 'user', 'pswd');
#$dbh->disconnect;
and is still not working? You really need the database connection?
Lian
> -----Original Message-----
> From: Sergey V. Stashinskas [mailto:sergei_stashinsk@mail.ru]
> Sent: Friday, June 27, 2003 1:48 PM
> To: modperl@perl.apache.org
> Subject: Problem with PerlTransHandler
>
>
> Hi all,
>
> Excuse me for my poor English because I'm from Russia.
>
> I have the problem with url translation.
> There are 2 scripts to do it.
> 1st script work perfectly, but 2nd failed.
> Only difference between them is string "my $dbh = DBI->connect...";
> I use Apche::DBI but without this module the same thing happens.
> Why?
>
> 1st:
> package Apache::StripSession
> use strict;
> use Apache;
> use Apache::Constants qw(:common);
>
> sub handler {
> my $r = shift;
>
> return DECLINED unless $r->uri =~ /^\/session\/([a-zA-Z0-9]{32})(.*)/;
>
> $r->subprocess_env(SESSION => $1);
> $r->uri($2);
>
> return DECLINED;
> }
>
> 2nd:
> package Apache::StripSession;
> use strict;
> use Apache;
> use Apache::Constants qw(:common);
>
> sub handler {
> my $r = shift;
>
> my $dbh = DBI->connect('dbi:mysql:db', 'user', 'pswd');
> $dbh->disconnect;
> return DECLINED unless $r->uri =~ /^\/session\/([a-zA-Z0-9]{32})(.*)/;
>
> $r->subprocess_env(SESSION => $1);
> $r->uri($2);
>
> return DECLINED;
> }
>
>