[PHP] file() probleem?

Pagina: 1
Acties:

  • StratoFarmer
  • Registratie: April 2000
  • Laatst online: 04-09 21:10
met dank aan deze topic: [topic=30279/1/25]

heb ik nu het volgende gebrouwen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function make_random() {                        //maakt random nummer
    srand ((double) microtime() * 100000000);
    $random = rand(1, 52);
    return $random;
}

function make_string($input) {          //neemt regelnummer en maakt string
    $fp = fopen("sponsors.txt", "r");
    if (!$fp) {
        echo "<i>oeps, file weg?\n</i>";
        exit;
    }
    $sponsor_array = file ("sponsors.txt");  //$fp wil mijn apache setup niet eten?
    $sponsor_string = $sponsor_array[$input];
    fclose($fp);
    return $sponsor_string;
}

for($i = 1; $i != 7; $i++ ) {           //loopje om een lijstje te outputten
    $regel_nummer = make_random();
    $sponsor_output = make_string($regel_nummer);
    
    echo "<b> $i . </b> &nbsp; <i> $sponsor_output </i> <BR>\r\n";
}

Dit werkt wel aardig, maar er gebeuren rare dingen!
Vaak verschijnt een regel niet, in de souce van de html is dan te zien dat regels zijn versprongen enzo. Ik snap er niks van. :?

Hier heb je een demo: http://www.vada-korfbal.nl/fopen/ :P

En nog iets, die random is veel te vaak hetzelfde?!
Hoe komt dat, en hoe werkt die zooi eigenlijk? :?

Mijn plekkie + Sympathisant van 'GoT voor Behoud der Nederlandsche Taal' [GvBdNT]


  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 15-09 09:37

Altaphista

1. check manual, 2. ask

s_rand() of zoiets (check manual) is beter.
edit:

hmm, zoiets heb je al staan zie ik...


heb je wel rekening gehouden met " ' "," " ",...e.d.? htmlentities(), htmlspecialchars()....

Als bijv. piet's fiets wordt geparsed en je hebt die " ' "'s niet afgevangen, tja...

Je gaat het pas zien als je het doorhebt.


  • StratoFarmer
  • Registratie: April 2000
  • Laatst online: 04-09 21:10
Op zaterdag 13 oktober 2001 00:25 schreef Altaphista het volgende:
heb je wel rekening gehouden met " ' "," " ",...e.d.? htmlentities(), htmlspecialchars()....

Als bijv. piet's fiets wordt geparsed en je hebt die " ' "'s niet afgevangen, tja...
ow, wacht aha...dat is natuurlijk zo ja. |:( :z

Mijn plekkie + Sympathisant van 'GoT voor Behoud der Nederlandsche Taal' [GvBdNT]


  • Grum
  • Registratie: Juni 2001
  • Niet online
code:
1
2
3
4
5
6
7
8
9
10
11
12
function make_string($input) {
    //neemt regelnummer en maakt string
    $fp = fopen("sponsors.txt", "r");
    if (!$fp) {
        echo "<i>oeps, file weg?\n</i>";
        exit;
    }
    $sponsor_array = file ("sponsors.txt");  //$fp wil mijn apache setup niet eten?
    $sponsor_string = $sponsor_array[$input];
      fclose($fp);
    return $sponsor_string;
}

waarom open je in godsnaam die file met fopen ??
als je wilt kijken of een file bestaat .. doe dan gewoon file_exists()..

  • StratoFarmer
  • Registratie: April 2000
  • Laatst online: 04-09 21:10
Op zaterdag 13 oktober 2001 01:01 schreef Grum_ het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
function make_string($input) {
    //neemt regelnummer en maakt string
    $fp = fopen("sponsors.txt", "r");
    if (!$fp) {
        echo "<i>oeps, file weg?\n</i>";
        exit;
    }
    $sponsor_array = file ("sponsors.txt");  //$fp wil mijn apache setup niet eten?
    $sponsor_string = $sponsor_array[$input];
      fclose($fp);
    return $sponsor_string;
}

waarom open je in godsnaam die file met fopen ??
als je wilt kijken of een file bestaat .. doe dan gewoon file_exists()..
nou, als ik het niet doe dan weigert PHP om ook maar iets uit te voeren....tsja.

Mijn plekkie + Sympathisant van 'GoT voor Behoud der Nederlandsche Taal' [GvBdNT]


  • StratoFarmer
  • Registratie: April 2000
  • Laatst online: 04-09 21:10
Maaremm...ik heb mijn script nu ongebouwd, wat simpeler:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$fp = fopen("sponsors.txt", "r");
if (!$fp) {
       echo "<i>oeps, file weg?\n</i>";
       exit;
}
$sponsor_array = file ("sponsors.txt");
fclose($fp);

for($i = 1; $i <= 6; $i++ ) {
    
    $max = count($sponsor_array);
    mt_srand ((double) microtime() * 100000000);
    $regelnummer = mt_rand(0, $max);
    
    $sponsor_string = $sponsor_array[$regelnummer];
    
    echo "<b>$i . </b> &nbsp; <i>";
    echo $sponsor_string;
    if ($sponsor_array[$regelnummer] == "") {
        echo "heej, een lege regel!";
    }
    echo "</i><BR>";
}

Maar ik heb nu dus nog steeds last van lege regels zo nu en dan. Dan staat er dus niets op die plek in de array... :?

Mijn plekkie + Sympathisant van 'GoT voor Behoud der Nederlandsche Taal' [GvBdNT]


  • Grum
  • Registratie: Juni 2001
  • Niet online
dan heb je toch echt wat fout zitten :)

file doet namelijk zelf al fopen en fclose

dus het is onzinnig om een fopen te doen ervoor

  • StratoFarmer
  • Registratie: April 2000
  • Laatst online: 04-09 21:10
Op zaterdag 13 oktober 2001 01:38 schreef Grum_ het volgende:
dan heb je toch echt wat fout zitten :)
file doet namelijk zelf al fopen en fclose
dus het is onzinnig om een fopen te doen ervoor
hmmm, wat zou er fout kunnen zitten dan?
Hij wil toch echt niet....

Ik heb overigens mijn probleem opgelost, de array is 1 element langer dan het aantal regels in de text file.
Hoe komt dit eigenlijk?
code:
1
$max = count($sponsor_array);

Mijn plekkie + Sympathisant van 'GoT voor Behoud der Nederlandsche Taal' [GvBdNT]


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
wat voor fout geeft ie dan als je dat fopen gedoe weglaat?

  • Grum
  • Registratie: Juni 2001
  • Niet online
Op zaterdag 13 oktober 2001 01:45 schreef StratoFarmer het volgende:

[..]

hmmm, wat zou er fout kunnen zitten dan?
Hij wil toch echt niet....

Ik heb overigens mijn probleem opgelost, de array is 1 element langer dan het aantal regels in de text file.
Hoe komt dit eigenlijk?
code:
1
$max = count($sponsor_array);
trailing newline :?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
$random = rand(1, $max)
gaat van 1 - 52, maar array ($sponsor_array) begint bij 0. moet dus $random = rand(0, $max-1) zijn

Verwijderd

Je hebt nu de srand() in de make_random() routine staan. In dit geval wordt voor elke keer dat je een random nummer wilt, de random sheet overnieuw ingesteld. Echt random kan je dat niet meer noemen.

Roep srand() maar 1 keer aan, aan het begin van het script.

  • StratoFarmer
  • Registratie: April 2000
  • Laatst online: 04-09 21:10
Heel erg bedankt mensen, het werkt nu allemaal perfect! :)
Je kan het resultaat bekijken op http://test.vada-korfbal.nl
voor de liefhebbers.... :P

Mijn plekkie + Sympathisant van 'GoT voor Behoud der Nederlandsche Taal' [GvBdNT]


Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?
$fp = fopen("sponsors.txt", "r");
if (!$fp) {
         echo "<i>oeps, file weg?\n</i>";
         exit;
}
$sponsor_array = file ("sponsors.txt");
fclose($fp);
for($i = 1; $i <= 6; $i++ ) {
      
      $max = count($sponsor_array);
      mt_srand ((double) microtime() * 100000000);
      $regelnummer = mt_rand(0, $max);
      
      $sponsor_string = $sponsor_array[$regelnummer];
      
      echo "<b>$i . </b> &amp;amp;nbsp; <i>";
      echo $sponsor_string;
      if ($sponsor_array[$regelnummer] == "") {
            echo "heej, een lege regel!";
      }
      echo "</i><BR>";
}
?>

Dit kan anders, nl:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
if($file_exists('sponsors.txt')
{
  $sponsor_array = file ("sponsors.txt");
  for($i=1;$i<=6;$i++) {
      $max = count($sponsor_array);
      mt_srand ((double) microtime() * 100000000);
      $regelnummer = mt_rand(0, $max);
      $sponsor_string = $sponsor_array[$regelnummer];
      echo "<b>$i.</b> <i>$sponsor_string";
      if ($sponsor_array[$regelnummer] == "") echo "heej een lege regel";
      echo "</i><BR>";
  }
}
else echo "O jee, file bestaat niet.";
?>
Pagina: 1