Avatar billede geffen Nybegynder
15. april 2002 - 23:56 Der er 26 kommentarer og
2 løsninger

Script forbedring

Okay, jeg har brug for noget hjælp her, jeg har har scriptet som vist nederst, jeg kan ikke hitte ud af hvorfor fanden det bruger en evighed om at udføre FOR-løkken nr. 2
Jeg har haft sat set_time_limit til 6 min og alligevel kan den ikke nå at udføre den.
Jeg er åbne for alternative måder at udføre det på, men account-tekst filen skal se ud som en gør med dette script, jeg kan bare ikke hitte ud af at lave det på andre måder.

her er scriptet:
if($mode=="w")
{
  $inline = file($filename);
  $number_of_lines = count($inline);
  $nr = -1;
  for($x = 0; $x <= $number_of_lines ;$x++)
  {
  $nr++;
  $x = $x + 2;
  $name[$nr] = $inline[$x];
  $x = $x + 1;
  $pass[$nr] = $inline[$x];
  $x = $x + 1;
  $enabled[$nr] = $inline[$x];
  $x = $x + 1;
  $banned[$nr] = $inline[$x];
  $x = $x + 1;
  $staffs[$nr] = $inline[$x];
  $x = $x + 1;
  $email[$nr] = $inline[$x];
  $x = $x + 1;
  $emailvis[$nr] = $inline[$x];
  $x = $x + 1;
  $news[$nr] = $inline[$x];
  $x = $x + 1;
  $activate[$nr] = $inline[$x];
  $x = $x + 2;
  };
  for($nummer = 0; $nummer <= $nr; $nummer++)
  {
  $namer = explode(chr(9),$name[$nummer]);
  $passer = explode(chr(9),$pass[$nummer]);
  $enabler = explode(chr(9),$enabled[$nummer]);
  $banner = explode(chr(9),$banned[$nummer]);
  $staffer = explode(chr(9),$staffs[$nummer]);
  $emailer = explode(chr(9),$email[$nummer]);
  $emailviser = explode(chr(9),$emailvis[$nummer]);
  $newser = explode(chr(9),$news[$nummer]);
  $activater = explode(chr(9),$activate[$nummer]);
  if($first=="Thefirst"){
    $accounting .= "\n";
  }
  else{
    $first = "Thefirst";
  };
  if($nummer = $accountnumber){
    $accounting .= $txt;
  }
  else{
    $accounting .= "Account
{
    Name    ".trim($namer[2])."
    Password    ".trim($passer[2])."
    Enabled    ".trim($enabler[2])."
    Banned    ".trim($banner[2])."
    //Staffs    ".trim($staffer[2])."
    //E-mail    ".trim($emailer[2])."
    //E-mailvis    ".trim($emailviser[2])."
    //Newsletter    ".trim($newser[2])."
    //activation    ".trim($activater[2])."
}
";
  };
  };
  $fd = fopen($filename, "w");
  fwrite($fd, $accounting);
  fclose($fd);
}
Avatar billede erikjacobsen Ekspert
16. april 2002 - 00:04 #1
min første indskydelse er at du skal bruge en database. For store datamængder er det
et håbløst foretagende du har gang i.
Avatar billede tipsen Nybegynder
16. april 2002 - 00:05 #2
Hvad skal scriptet egentlig udføre?
Avatar billede geffen Nybegynder
16. april 2002 - 00:07 #3
ja det var det jeg var bange for, men jeg er tvunget til det, jeg er ved at lave et script til min Ultima Online shard, og det er nemlig den txt fil den bruger til at styre accounts med som jeg skal kunne ændre i.
Avatar billede geffen Nybegynder
16. april 2002 - 00:09 #4
Det skal egentlig bare kunne ændre i en account
Avatar billede tipsen Nybegynder
16. april 2002 - 00:10 #5
Kan du beskrive formatet af den tekst-fil - eller copy/paste den ind sammen med en beskrivelse af hvad scriptet skal udføre!
Avatar billede geffen Nybegynder
16. april 2002 - 00:11 #6
Det skal lige sige at $txt indeholder det ny data for den account jeg vil ændre i.
Avatar billede erikjacobsen Ekspert
16. april 2002 - 00:11 #7
Ok, men så lad os effektivisere det lidt. Hvad er det der sker? er det en bruger der
skal ændres i. Jeg forestiller mig vi kunne beholder linierne i arrayet $inline, og
kun ændre den/de linier der er relevante.
Avatar billede geffen Nybegynder
16. april 2002 - 00:12 #8
Dette er en kort version af accounts.txt filen:
Account
{
    Name    fætterguf
    Password    blabla
    Enabled    1
    Banned    0
    //Staffs    0
    //E-mail    0
    //E-mailvis    0
    //Newsletter    0
    //activation    0
}

Account
{
    Name    Diggy
    Password    daggy
    Enabled    1
    Banned    0
    //Staffs    0
    //E-mail    0
    //E-mailvis    0
    //Newsletter    0
    //activation    0
}

Account
{
    Name    polle
    Password    snave
    Enabled    1
    Banned    0
    //Staffs    0
    //E-mail    0
    //E-mailvis    0
    //Newsletter    0
    //activation    0
}
Avatar billede erikjacobsen Ekspert
16. april 2002 - 00:14 #9
Løb igennem med en løkke startende i linien med det første
accountnumber, med spring på 12 (har jeg talt rigtigt), i søgning efter
det ønskede accountnummer.

Når det er fundet splitter du $txt ud i 12 linier (med split()) og
sætter dem ind.

Og så udskriver du $inline.
Avatar billede tipsen Nybegynder
16. april 2002 - 00:15 #10
NB: En sammenligning bruger "==" mens en tildeling bruger "=" - dvs if($nummer = $accountnumber){ skal have "==" i stedet for "="!!!
Avatar billede geffen Nybegynder
16. april 2002 - 00:15 #11
Det er både brugere og admins der skal kunne ændre i dataen
Avatar billede geffen Nybegynder
16. april 2002 - 00:17 #12
Tak Tipsen, den var sgu smuttet, men det burde jo ikke danne mit problem med at den overgår tidsbegænsningen selv med 6 mins grænse
Avatar billede erikjacobsen Ekspert
16. april 2002 - 00:18 #13
nå ja, tipsen....:)

Giver mit forslag mening for dig geffen? Det er bare en
effektivisering - har intet med evt sikkerhed overfor brugre at
gøre. Mit forslag er lige så sikkert/usikkert som dit eget script.
Avatar billede erikjacobsen Ekspert
16. april 2002 - 00:19 #14
Jo,
if($nummer = $accountnumber){
giver en uendelig løkke
Avatar billede geffen Nybegynder
16. april 2002 - 00:20 #15
Erik, du har fat i noget der... :)
Hvorfor fanden har jeg ikke tænkt det. DOH
Avatar billede erikjacobsen Ekspert
16. april 2002 - 00:21 #16
Hvor mange linier har du i filen? Jeg fik det indtryk der var maaaange
Avatar billede geffen Nybegynder
16. april 2002 - 00:23 #17
Erik, det er på nuværende tidspunkt ca. 120 accounts.. * 13 linier
Avatar billede tipsen Nybegynder
16. april 2002 - 00:23 #18
Var det evt. en idé at benytte fscanf() og fprintf() til at styre formatet ved ind- og udlæsning - ved egentlig ikke hvor effektivt det er i php...
Avatar billede erikjacobsen Ekspert
16. april 2002 - 00:23 #19
Ha, ha, det skal tage et sekund eller 2....
Avatar billede geffen Nybegynder
16. april 2002 - 00:27 #20
jeps.. det gør det også.. *GG*  men jeg forstår egentlig ikke hvorfor det giver en uendelig lykke, for $nummer vil jo overstige $nr når det når de ca. 120, jeg vil da bare få det samme til at stå der mange gange.... eller hva..?
Avatar billede tipsen Nybegynder
16. april 2002 - 00:28 #21
$nummer bliver jo tildelt $accountnumbers værdi....
Avatar billede tipsen Nybegynder
16. april 2002 - 00:29 #22
-men du laver stadig meget "spild" arbejde i dit script...
Avatar billede erikjacobsen Ekspert
16. april 2002 - 00:29 #23
Jo, du tæller nummer op med én i din forløkke.

Men i den if vi snakker om sætter du den hver gang til 14 (hvis du leder efter 14).
Så står den og svinger mellem 14 og 15 - og bliver ved med det. Stakkels computer,
Avatar billede tipsen Nybegynder
16. april 2002 - 00:32 #24
Der er vist mangen en computer som har stået og swinget en sen nattetime nede på Infinite Loop diskoteket...
Avatar billede geffen Nybegynder
16. april 2002 - 00:35 #25
LOL, mange tak for hjælpen gutter, jeg må heller hoppe til køjs inden jeg laver flere problemer for mig selv..... g'nat
Avatar billede erikjacobsen Ekspert
16. april 2002 - 00:38 #26
Nu må du ikke få onde drømme fordi du ikke kan komme af med point :))
Avatar billede geffen Nybegynder
16. april 2002 - 00:41 #27
Hmmm... Jeg tror nu ikke det bliver et problem, dog synes jeg at Tipsen også fortjener lidt point, da han jo fandt det egentlige problem... Vil han mon have nogen... Tipsen??
Avatar billede tipsen Nybegynder
16. april 2002 - 00:45 #28
Lidt point kan man jo altid bruge (om ikke til andet så til nye spørgsmål :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester