Toon posts:

[php]raar fenomeen bij het inlezen van een file

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een php file gemaakt die als database bestandje (kan helaas niet van mysql gebruik maken) moet gaan dienen
per regel schijd ik de username, password etc. door een | zodat ik die later met een explode() weer uit elkaar kan halen. Ik doe het in een php file, zodat de file zelf nooit uitgelezen kan worden van buitenaf. Ziet er dus zeg maar zo ongeveer uit
============
<?php
username1|password1|voornaam1|achternaam1
username2|password2|voornaam2|achternaam2
?>
============

Nou treedt er echter gelijk al iets geks op. als ik dit bestand nu zo inlees:
code:
1
2
3
4
5
6
    if (@!$fp = fopen("data.php", "r"))
    {
        echo "Couldn't open file.<br>\n";
    }
    $filearray = file("data.php");
    fclose($fp);

en ik doe print_r($filearray)
dan krijg ik 3 waardes terug.
key 0 -> username1 etc
key 2 -> username2 etc
key 3 -> ?>

nou vraag ik me dus af, waarom staat username1 etc niet onder key 1; <?php niet onder key 0; en waar is key 1 uberhaupt gebleven?

  • jvreuls
  • Registratie: Januari 2002
  • Laatst online: 31-07 13:13
Waarom open je 'm eerst met fopen()?
Dat hoeft namelijk niet als je file() gebruikt.
(ook fclose() hoeft dan niet natuurlijk)

Circuits Online


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

de fopen en file zullen elkaar zelfs tegen werken...

en trouwens, als ie niet te openen is wordt ie alsnog ingelezen met je file...

Verwijderd

Hmm..

Post eens een stukje code van data.php.

Heb je als eens gekeken hoe die array gevuld wordt. Als
de array verkeerd gevuld wordt is het logisch dat ie ook verkeerd "geprint" wordt.

Dit kun je met een watch doen :) Ik hoop dat je php-editor dit ondersteund. Zou wel makkelijk zijn.

Verwijderd

Topicstarter
Op woensdag 26 juni 2002 21:21 schreef jvreuls het volgende:
Waarom open je 'm eerst met fopen()?
Dat hoeft namelijk niet als je file() gebruikt.
(ook fclose() hoeft dan niet natuurlijk)
Omdat je er dan zeker van bent dat de file geopend kan worden (zo niet krijg je een nette foutmelding) en omdat ik uit artikelen heb begrepen dat als je het zo doet de kans op inlees problemen ook kleiner wordt

Verwijderd

Topicstarter
Op woensdag 26 juni 2002 21:26 schreef ridde100 het volgende:

Post eens een stukje code van data.php.
Die ziet er precies zo uit als dat ik in m'n eerste post heb gezet (tussen de ======s)
Heb je als eens gekeken hoe die array gevuld wordt. Als
de array verkeerd gevuld wordt is het logisch dat ie ook verkeerd "geprint" wordt.
die wordt door de functie file() gevuld. kan weinig fout aan gaan lijkt me
Dit kun je met een watch doen :) Ik hoop dat je php-editor dit ondersteund. Zou wel makkelijk zijn.
heb geen idee wat een watch doet, maar ik gebruik Vim, lijkt me wel een goede editor

Verwijderd

Topicstarter
Op woensdag 26 juni 2002 21:25 schreef ACM het volgende:
de fopen en file zullen elkaar zelfs tegen werken...
mag ik zo bijdehand zijn te vragen waar je die wijsheid vandaan heb?
en trouwens, als ie niet te openen is wordt ie alsnog ingelezen met je file...
moet ook eigenlijk nog een else tussen.....

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:23
Op woensdag 26 juni 2002 21:33 schreef linux-newbie het volgende:
heb geen idee wat een watch doet, maar ik gebruik Vim, lijkt me wel een goede editor
Tja, ik zou ook denken dat vim een goede editor is als ik niet zou weten wat een IDE is.

Maar wat doet:
code:
1
  print_r(file("data.php"))?

Je hebt trouwens fopen nergens voor nodig; checken op fouten kan vast wel met file (heb je het ooit geprobeerd?).

Verwijderd

Topicstarter
Maar wat doet:
code:
1
  print_r(file("data.php"))?
precies hetzelfde. key 1 mist dus en zie nergens <?php terug. Ik begon zelfs aan mezelf te twijfelen dus heb data.php nog eens gechecked, maar die ziet er echt zo uit als dat er in m'n eerst post staat. snap er nix van
Je hebt trouwens fopen nergens voor nodig; checken op fouten kan vast wel met file (heb je het ooit geprobeerd?).
nouja, ik had ooit eens begrepen dat dat beter was. ik zal 'm wel eens weghalen, kijken wat dat doet

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 26 juni 2002 21:35 schreef linux-newbie het volgende:
mag ik zo bijdehand zijn te vragen waar je die wijsheid vandaan heb?
fopen opent een filepointer, file opent een filepointer.

Beide naar dezelfde file, niet dat het niet kan. Maar handig/netjes/etc is anders...

Btw, wat doet iets als:
code:
1
2
3
4
5
6
7
8
$array = array();
$fp  = fopen('data.php', 'r');
while(!feof($fp))
{
    $array[] = fgets($fp);
}
fclose($fp);
print_r($array);

?

Verwijderd

Topicstarter
oke, zou iemand hetvolgende voor me kunnen repliceren?
ik heb twee files:

functie.php
code:
1
2
3
4
5
<?php
echo "<pre>\n";
print_r(file("data.php"));
echo "</pre>\n";
?>

data.php
code:
1
2
3
4
<?php
username1|password1|voornaam1|achternaam1
username2|password2|voornaam2|achternaam2
?>

en dit is de output:
Array
(
[0] => username1|password1|voornaam1|achternaam1

[2] => username2|password2|voornaam2|achternaam2

[3] => ?>
)
letterlijk ge-copy-en-paste
dat klopt toch niet? (zou niet moeten kloppen)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:23
Ik begin een angstig vermoeden te krijgen...

Je gebruikt toch wel de command line versie en zoniet, dan doe je toch wel view source, hè?!

De correcte uitvoer is:
code:
1
2
3
4
5
6
7
8
Array
(
    [0] => <?php
    [1] => username1|password1|voornaam1|achternaam1
    [2] => username2|password2|voornaam2|achternaam2
    [3] => ?>
    [4] => 
)

In je browser valt een deel weg, omdat die het stuk van '<?php' tot '=>' op de volgende regel als 'n HTML tag ziet.

Verwijderd

Topicstarter
Op woensdag 26 juni 2002 21:42 schreef ACM het volgende:

Btw, wat doet iets als:
code:
1
2
3
4
5
6
7
8
$array = array();
$fp  = fopen('data.php', 'r');
while(!feof($fp))
{
    $array[] = fgets($fp);
}
fclose($fp);
print_r($array);

?
Dat laat m'n browser window crashen met een x aantal keer een warning WRONG PARAMETER COUNT FOR FGET

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 26 juni 2002 21:50 schreef linux-newbie het volgende:
Dat laat m'n browser window crashen met een x aantal keer een warning WRONG PARAMETER COUNT FOR FGET
Dan kijk je in de php-manual wat er aan parameters bij moet/mag ;)

En plak je er een 4096 bij. (fgets($fp, 4096) )

Verwijderd

Topicstarter
Op woensdag 26 juni 2002 21:50 schreef Soultaker het volgende:
Ik begin een angstig vermoeden te krijgen...
Jij Bent Echt Slim!

hmmm....of ik gewoon heeeeel erg dom.
shit, wat voel ik me een sukkel zeg....
:D

Verwijderd

waarom gebruik je eigenlijk niet de serialize functie van php? Die is toch voor dit soort dingen bedoeld?

Verwijderd

Topicstarter
Op woensdag 26 juni 2002 22:15 schreef dj_delta het volgende:
waarom gebruik je eigenlijk niet de serialize functie van php? Die is toch voor dit soort dingen bedoeld?
Wat ik er van begrijp op php.net zie ik niet waarom dat hier makkelijk zou kunnen zijn...
kun je het eens uitleggen?

Verwijderd

BTW, waarom gebruik je <?php en ?> in je data.php???
Dat is toch helemaal niet nodig??
Het staat ook een beetje slordig om de eerste en laatste regel in je code niet uit te lezen.
Ik zou als ik jou was ook een controle op de invoer zetten, zodat het | teken nooit ingevoerd mag worden, want dan heb je best een probleem....

Verwijderd

Topicstarter
Op donderdag 27 juni 2002 00:38 schreef Grote Vos het volgende:
BTW, waarom gebruik je <?php en ?> in je data.php???
Dat is toch helemaal niet nodig??
Het staat ook een beetje slordig om de eerste en laatste regel in je code niet uit te lezen.
Ik zou als ik jou was ook een controle op de invoer zetten, zodat het | teken nooit ingevoerd mag worden, want dan heb je best een probleem....
Dat is wel nodig, anders ziet ie het gewoon als html-code. Als iemand dan het bestand data.php oproept kan ie in z'n browser alles uitlezen. Hoewel ik de wachtwoorden encrypt met md5 vind ik dat toch niet echt een fijne gedachte
met dat | zal wel goed gaan, want ik ben de enige die wat invoert. alleen de wachtwoorden kunnen zelf gezet worden, maar door die md5 toestand zal daar nooit een | in voorkomen
Pagina: 1