Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 28-03-2003, 13:04
Preaper
Avatar van Preaper
Preaper is offline
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.
__________________
█████████████████████99%
Met citaat reageren
Advertentie
Oud 28-03-2003, 14:03
Verwijderd
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...
Met citaat reageren
Oud 28-03-2003, 20:34
Preaper
Avatar van Preaper
Preaper is offline
Als ik het script zou posten, zou dat erg negatief zijn voor de serucity van me website
__________________
█████████████████████99%
Met citaat reageren
Oud 28-03-2003, 22:22
niemand
Avatar van niemand
niemand is offline
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
Met citaat reageren
Oud 29-03-2003, 09:45
Verwijderd
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
Alleen het gedeelte waar het volgens jou om gaat!
Met citaat reageren
Oud 30-03-2003, 14:55
Preaper
Avatar van Preaper
Preaper is offline
@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;
}
__________________
█████████████████████99%
Met citaat reageren
Oud 30-03-2003, 15:03
Preaper
Avatar van Preaper
Preaper is offline
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.
__________________
█████████████████████99%
Met citaat reageren
Oud 30-03-2003, 18:23
Verwijderd
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'

Laatst gewijzigd op 30-03-2003 om 18:37.
Met citaat reageren
Oud 30-03-2003, 19:48
Preaper
Avatar van Preaper
Preaper is offline
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.
__________________
█████████████████████99%
Met citaat reageren
Oud 30-03-2003, 19:51
Preaper
Avatar van Preaper
Preaper is offline
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.
__________________
█████████████████████99%
Met citaat reageren
Oud 30-03-2003, 19:53
Verwijderd
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.
Met citaat reageren
Oud 30-03-2003, 20:01
Preaper
Avatar van Preaper
Preaper is offline
OK bedankt
__________________
█████████████████████99%
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 05:38.