/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
exit;
Fra : Simon [2700]


Dato : 28-10-03 00:03

Hej,

bør der stå exit i slutningen på et script ? eller stopper det selv når der
ikke er mere kode ? jeg har haft nogle problemer med et som fungerede fint i
omkring 4 uger (en counter), hvorefter det så begyndte at løbe helt løbsk på
serveren efter administratorerne havde ændret nogle settings (ved ikke
hvilke, men mine scripts kan ikke køre som 777 mere, kun som 755 men har
tilsyneladende skriveadgang alligevel)... scriptet var altså på serveren i
flere hundrede eksemplarer og lagde den åbenbart ned :(

mvh.Simon



 
 
Christian Laursen (28-10-2003)
Kommentar
Fra : Christian Laursen


Dato : 28-10-03 01:13

"Simon [2700]" <devnull@linux.org> writes:

> bør der stå exit i slutningen på et script ? eller stopper det selv når der
> ikke er mere kode ?

Det stopper selv, når der ikke er mere kode.

> jeg har haft nogle problemer med et som fungerede fint i
> omkring 4 uger (en counter), hvorefter det så begyndte at løbe helt løbsk på
> serveren efter administratorerne havde ændret nogle settings (ved ikke
> hvilke, men mine scripts kan ikke køre som 777 mere, kun som 755 men har
> tilsyneladende skriveadgang alligevel)...

Det lyder lidt som suExec: http://httpd.apache.org/docs/suexec.html

Permissions på dit script har ikke noget at gøre med, hvad det har skriveadgang
til.

> scriptet var altså på serveren i
> flere hundrede eksemplarer og lagde den åbenbart ned :(

Det er svært at sige noget klogt om, med den minimale mængde
information, der er til rådighed.

--
Med venlig hilsen
Christian Laursen

Simon [2700] (28-10-2003)
Kommentar
Fra : Simon [2700]


Dato : 28-10-03 08:14


> Det er svært at sige noget klogt om, med den minimale mængde
> information, der er til rådighed.

hvilke vil du have ?

her er kildekoden den kan sikkert også hjælpe :)

mvh.Simon


#!/usr/bin/perl
print "Content-type:text/html\n\n";
use CGI;
$query = new CGI();
$table = $query->param('id');
$from = $query->param('ref');
$table = "ref_".$table;
use DBI;
$|= 1;
$host = "";
$db="mydb";
$opt_user="user";
$opt_password="pass";
$dbh = DBI->connect("DBI:mysql:$db:$host",$opt_user,$opt_password);
$first = 1;
if ($from eq "")
{$from = "noref";}
$dbh->do("insert into $table values(\"$from\",1);");
first_time($dbh->errstr);
if ($first != 1)
{$dbh->do("update $table SET hits=hits+1 where url=\"$from\";");}
sub first_time
{
if ($_[0] ne "")
{$first = 0;}
}



Flemming Mahler Lars~ (29-10-2003)
Kommentar
Fra : Flemming Mahler Lars~


Dato : 29-10-03 21:38

Simon [2700] wrote:
>
> hvilke vil du have ?
> her er kildekoden den kan sikkert også hjælpe :)

Jeg ville nok have skrevet det samme noge i stil med nedenstående.
scripts der bruges som cgi'er bør efter min mening altid kunne klare
"-w" og "use strict", for bare at have lidt styr på man "gør det ordenligt".

----
#!/usr/bin/perl -w
use strict;
use CGI;
use DBI;

$|= 1;
print "Content-type:text/html\n\n";

# Database connection config
my $host = "";
my $db="mydb";
my $opt_user="user";
my $opt_password="pass";

my $dbh = DBI->connect("DBI:mysql:$db:$host",$opt_user,$opt_password);

# Get posted values
my $query = new CGI();
my $table = $query->param('id');
my $from = $query->param('ref') || 'noref';
$table = "ref_".$table;

$dbh->do("insert into $table values(\"$from\",1);");
if ($dbh->errstr) {
$dbh->do("update $table SET hits=hits+1 where url=\"$from\";");
}

# print "ok";
exit();
---

Der er dog udover strict og warnings også et par andre ting, du nok
burde kigge på:
- jeg bryder mig ikke om, at hvis insert-fejler, så er det
sikkert fordi vi skal update i stedet. Det kunne jo være databasen
der var nede eller noget andet, der var galt.
- Du burde nok også burge placeholders. Hvad sker der hvis $from
indeholder en string med: "; delete from table_noref;
- Hvis det skal være endnu mere sikkert, burde man nok bruge taint-mode.
På den måde tvinger du også dig selv til at "vaske" de data, som der
kommer udefra - og f.eks. fjerne quotes og andre onde tegn.

Der er sikkert mange andre måder at gøre det på, men dette var bare lidt
kommentarer :)

(( Flemming ))


Simon [2700] (30-10-2003)
Kommentar
Fra : Simon [2700]


Dato : 30-10-03 08:10

tak.
men var der noget desideret i min anden kode, som ville kunne få den til at
"hænge" ?
mvh.Simon



Flemming Mahler Lars~ (30-10-2003)
Kommentar
Fra : Flemming Mahler Lars~


Dato : 30-10-03 22:53

Simon [2700] wrote:
> tak.
> men var der noget desideret i min anden kode, som ville kunne få den til at
> "hænge" ?

Jeg lagde ikke lige mærke til noget specielt... men uden strict, uden
warnings check og uden taint-mode, så ville jeg personligt bare være
glad, hvis det virkede en gang i mellem.



(( Flemming ))






Søg
Reklame
Statistik
Spørgsmål : 177428
Tips : 31962
Nyheder : 719565
Indlæg : 6407936
Brugere : 218877

Månedens bedste
Årets bedste
Sidste års bedste