Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   Perl CGI script time-out? (https://forum.scholieren.com/showthread.php?t=420923)

Preaper 28-03-2003 13:04

Perl CGI script time-out?
 
Goedenmiddag!

Ik draai op een up2date linux systeem, met een apache 2 http server.

Ik ben bezig met het schrijven van een CGI file manager, en alles ging tot nu toe prima. Maar nu opeens houd me script er mee op als ik mappen open waar meer dan 9 files in zitten.
Ik heb uren gezocht naar een bug in me Perl script, en ben uiteindelijk tot de conclusie gekomen dat er gewoon geen bug is.

Mijn vermoeden is dat er na een bepaalde tijd gewoon een time-out optreed.

Onder de commandline doet mijn script het prima, maar als ik hem met mijn apache2 webserver wil draaien, gaat ie flippen bij >9 files.

Weet iemand waar ik kan vinden waneer apache2 vind dat mijn script er lang genoeg over gedaan heeft? In de httpd.conf heb ik het niet kunnen vinden.
Of kan het probleem toch iets anders zijn?

Ik krijg geen foutmelding te zien, maar in me browser houd ie op een gegeven moment gewoon op, en zie ik maar een halve pagina. Maar hij blijft downloaden(het icoontje van activiteit, rechtsbovenin, beweegt) maar op den duur scheid ie daar ook mee uit.

eddie 28-03-2003 14:03

misschien handig om het scriptje te posten?

Er zit (afiak) altijd een timeout op een script. Waar dat is in te stellen weet ik niet...

Preaper 28-03-2003 20:34

Als ik het script zou posten, zou dat erg negatief zijn voor de serucity van me website ;)

niemand 28-03-2003 22:22

Citaat:

Preaper schreef op 28-03-2003 @ 21:34:
Als ik het script zou posten, zou dat erg negatief zijn voor de serucity van me website ;)
als jij een goed script schrijft niet

eddie 29-03-2003 09:45

Citaat:

Preaper schreef op 28-03-2003 @ 21:34:
Als ik het script zou posten, zou dat erg negatief zijn voor de serucity van me website ;)
Net alles natuurlijk :p
Alleen het gedeelte waar het volgens jou om gaat!

Preaper 30-03-2003 14:55

@niemand: Uiteraard als mijn script af is dan zullen er geen sercurety fouten meer zijn, maar het is gewoon nog neit af.

Maar hier is het gedeelte van het schript waar hij in stikt. Hierin zoekt hij via een simpel ls commando uit welke folders en bestanden er in een bepaalde directory staan.(Misschien weet iemand zelfs een betere methode? ;))


Code:

sub listdir {
 print "<h2>inhoud: <i>$relative$clpath</i></h2>";
  @list = split(/\n/, `ls  -p -c -h -lt -L --time-style="+%d-%m-%Y %H:%M" "$apath"`);
 #print "<PRE>",`ls  -p -c -h -lt -L "$apath"`,"</PRE>";
 $totalsize = substr(shift (@list),7);
  foreach $i (@list) {
  $file = substr($i, 60);
  $hsize = substr($i,35,8);
  $hmod = substr($i,43,16);
  $writeabl = substr($i,8,1);
  if (substr($i,16,6) eq "nobody" && substr($i,2,1) eq "w") { $writeabl = "w"; }
  $hsize =~ s/ //g;
  $laatt = substr($file, length($file) - 1);
  $dirn = substr($file,0, length($file) - 1);
  if ($laatt eq "@") { $laatt = "/"; } #$i = $dirn; }
  if ($laatt eq "/") {
    @dir = (@dir, $dirn);
    %mod = (%mod, $dirn, $hmod);
    %write = (%write, $dirn, $writeabl);
  } else {
    %size = (%size, $file, $hsize);
    %mod = (%mod, $file, $hmod);
    @files = (@files, $file);
    %write = (%write, $file, $writeabl);
  }
 }
 @dir = sort { ($da = lc $a) =~ s/[\W_]+//g;
                ($db = lc $b) =~ s/[\W_]+//g;
                $da cmp $db;
              } @dir;
 @files = sort { ($da = lc $a) =~ s/[\W_]+//g;
                ($db = lc $b) =~ s/[\W_]+//g;
                $da cmp $db;
              } @files;
 print "<table><td width=20></td><td width=300>Naam</td><td width=120>Laatst gewijzigd</td><td width=40>Bytes</td><td>Acties</td></table><hr><table>";
 $color = $col1;
 # Back ( '../' )
 print "<td width=20 bgcolor=$col1>
        <img src=\"/icons/index.gif\"><br></td><td width=300>
        <a href=\"manager.cgi?path=$clpath\">./</a></td><td width=120></td><td width=40></td><td width=40></td>";
 if ($clpath ne "/")
 {
  print "<tr bgcolor=$col2><td width=20>
          <img src=\"/icons/back.gif\"><br></td><td width=300>
          <a href=\"manager.cgi?path=", join('/',@hdir[0..scalar(@hdir)-2]), "\">../</a></td><td width=100></td><td width=40></td><td width=40></td>";
          $color = $col2;
 }
 # Folders
 foreach $i (@dir) {
  if ($color eq $col1) { $color= $col2; $pcolor = $pcol2 } else { $color= $col1; $pcolor = $pcol1; }
  if ($write{$i} eq "w") { print "\n<tr bgcolor=$color>"; } else { print "\n<tr bgcolor=$pcolor>"; }
  print "<td width=20>
          <img src=\"/icons/folder.gif\"><br></td><td width=300>
          <a href=\"manager.cgi?path=$aclpath/$i\">$i</a></td><td width=120>$mod{$i}</td><td width=40>-</td>";
  if ($write{$i} eq "w") { print "<td width=40><a href=\"manager.cgi?path=$clpath\&bestand=$i\&actie=hernoem\">H</a> <a href=\"manager.cgi?path=$clpath\&bestand=$i\&actie=verwijder&folder=true\">V</a></td>";
  } else { print "<td width=40></td>"; }
 }
 # Files
 foreach $i (@files) {
  if ($i ne "") {
  if ($color eq $col1) { $color= $col2; $pcolor = $pcol2 } else { $color= $col1; $pcolor = $pcol1; }
  # Find extentions
  $numm = 0;
  do {
    $numm++;
    $fext = substr($i, length($i) - $numm);
    if ($numm >= 50) { $fext = ".error"; }
  } while (substr($fext, 0, 1) ne ".");
  $ext = substr($fext, 1);
  #if ($icons{$ext} ne "") { $icon = $icons{$ext}; } else { $icon = "unknown.gif"; }
  if ($write{$i} eq "w") { print "\n<tr bgcolor=$color>"; } else { print "\n<tr bgcolor=$pcolor>"; }
  print "<td width=20><img src=\"/icons/$icon\"><br></td><td width=300><a href=\"$path/$i\">$i</a></td><td width=120>$mod{$i}</td><td width=40>$size{$i}</td>";
    if ($write{$i} eq "w") { print "<td width=40><a href=\"manager.cgi?path=$clpath\&bestand=$i\&actie=hernoem\">H</a> <a href=\"manager.cgi?path=$clpath\&bestand=$i\&actie=verwijder\">V</a> ";
  } else { print "<td width=40>"; }
  print "<a href=\"manager.cgi?path=$clpath\&bestand=$i\&actie=kopieer\">K</a></td>";
  }
 }
 print "</table>";
 print "<hr><font color=gray>Totale grootte: $totalsize</font>";
}

sub writelog {
  $mess = join('',@_);
      open LOGF, ">>$absolute_path$relative/.log/log.html";

        print LOGF $mess;

      close UPLOADFILE;
}


Preaper 30-03-2003 15:03

Ter verduidelijking, hij blijft dus hier haken:

Code:

# Files
 foreach $i (@files) {
  if ($i ne "") {
  if ($color eq $col1) { $color= $col2; $pcolor = $pcol2 } else { $color= $col1; $pcolor = $pcol1; }
  # Find extentions
  $numm = 0;
  do {
    $numm++;
    $fext = substr($i, length($i) - $numm);
    if ($numm >= 50) { $fext = ".error"; }
  } while (substr($fext, 0, 1) ne ".");
  $ext = substr($fext, 1);
  #if ($icons{$ext} ne "") { $icon = $icons{$ext}; } else { $icon = "unknown.gif"; }
  if ($write{$i} eq "w") { print "\n<tr bgcolor=$color>"; } else { print "\n<tr bgcolor=$pcolor>"; }
  print "<td width=20><img src=\"/icons/$icon\"><br></td><td width=300><a href=\"$path/$i\">$i</a></td><td width=120>$mod{$i}</td><td width=40>$size{$i}</td>";
    if ($write{$i} eq "w") { print "<td width=40><a href=\"manager.cgi?path=$clpath\&bestand=$i\&actie=hernoem\">H</a> <a href=\"manager.cgi?path=$clpath\&bestand=$i\&actie=verwijder\">V</a> ";
  } else { print "<td width=40>"; }
  print "<a href=\"manager.cgi?path=$clpath\&bestand=$i\&actie=kopieer\">K</a></td>";
  }

En als ik dan een of 2 'print' commando's op comemtnaar zet (dus een # ervoor) wil hij het wel eens gaan doen. Maar daar heb ik uiteraard niets aan, want hij moet die zooi gewoon printen!
En het allaer raarste vind ik dat hij bij de directories het wel altijd doet, en bij de files niet. Terwijl ze niet veel van elkaar verschillen.

eddie 30-03-2003 18:23

je gebruikt ls om je dir in te lezen?

Raar. Ooit van opendir en readdir gehoord?
Is vele male makkelijker.

Verder kun je de extensie van een bestand toch gewoon opvragen door te kijken naar het rechter stuk van het bestand tot aan de laatste punt (index)? Of met
Code:

($ext = $filename) =~ s/(.*\.)(.*)/$2/;
(als ik het zo even goed uit mijn hoofd doe)

Hier staan alle ingebouwde perlfuncties opgesomd. Kijk maar eens onde de kopjes 'Functions for filehandles, files, or directories' en 'Input and output functions'

Preaper 30-03-2003 19:48

Het is pas mijn 5e dag dat ik emt perl werk, dus ik weet nog lang niet alle funcites. En die +~ functie begrijp ik ook nog niet echt.

Preaper 30-03-2003 19:51

Maar ik ben ze aan het onderzoeken ;) Maar ik denk niet dat het genoeg me script versneld om die verdomde &$&(#$&(* eruit te halen.

Ik ben echt tot de conclusie gekomen dat het niets met me script te maken heeft. Als ik mijn pc belast, scheid mijn script er veel eerder mee uit, en als ik de priority boost dan gaat ie een stuk verder.
Dus het moet wel een time-out zijn. Maar NERGENS vind ik eens optie om die te verhogen. Wel heb ik in apache er een gevonden, maar die schijnt geen invloed te hebben.

eddie 30-03-2003 19:53

Citaat:

Preaper schreef op 30-03-2003 @ 20:48:
Het is pas mijn 5e dag dat ik emt perl werk, dus ik weet nog lang niet alle funcites. En die +~ functie begrijp ik ook nog niet echt.
Ah, ok.

De s/// is een stringvervanging.
Tussen de eerste 2 slashes komt je pattern, tussen de laatste 2 de vervanging (je zoekt dus op een patroon, en vergangt dat).

De =~ geeft de waarde van de variabele die ervoor staat door aan de functie.

http://www.perldoc.com/perl5.8.0/pod/perlop.html voor de =~. De m///, s///, etc staan daar uitgelegd.

Preaper 30-03-2003 20:01

OK bedankt :)


Alle tijden zijn GMT +1. Het is nu 19:58.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.