[PHP] Write in file gaat fout

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • mazz
  • Registratie: November 2004
  • Laatst online: 08-06 13:48
Four = fout ... typo

Ik heb hier een phpcode die een php file gaat schrijven.
Echter lukt het mij niet om bij elk stukje tekst een regel over te slaan. Dan krijg ik een raar teken ipv van een nieuwe regel.

Hier is het script

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$maxplayers = $_POST['maxplayers'];
$servername = $_POST['servername'];
$type = $_POST['type'];
echo "$type";


$phpfile = "players.php";
$fh = fopen($phpfile, 'a') or die("Can't open file");
fwrite($fh, "$maxplayers");
fwrite($fh, "?>");
fclose($fh);
?>


De bedoeling is dus dat hij die variable in een php bestand wegschrijft en daarna een nieuwe regel maakt en ?> toevoegt.

Als ik \n erachter zit krijg ik dus een raar teken te zien?
Iemand een idee hoe ik dit op ga lossen?

20 jaar, en wat had ik bereikt?


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Waarom sla je zo het aantal spelers op? Kan je dat niet beter doen in een textbestand?

En die ?> staar er waarschijnlijk om users de toegang te ontzeggen.

Geef die dan geen rechten?

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Waarin bekijk je je source? Als dat notepad is dan komt het omdat notpad alleen windows newlines begrijpt. Zou je een andere editor gebruiken dan zul je zien dat deze wel met \n om kunnen gaan. Om het in notepad leesbaar te krijgen moet je windows newlines gebruiken. Deze bestaan uit twee tekens. Een \r en een \n.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • mazz
  • Registratie: November 2004
  • Laatst online: 08-06 13:48
Snakiej schreef op dinsdag 27 maart 2007 @ 18:26:
Waarom sla je zo het aantal spelers op? Kan je dat niet beter doen in een textbestand?

En die ?> staar er waarschijnlijk om users de toegang te ontzeggen.

Geef die dan geen rechten?
Sorry, maar hier snap ik werkelijk niks van?

Die ?> is de aflsluitende tag van php. Dit php bestand wordt later gebruikt om maxplayers te verivieren met de server.

@ Janoz thnx! Will try!

20 jaar, en wat had ik bereikt?


Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$maxplayers = $_POST['maxplayers'];
$servername = $_POST['servername'];
$type = $_POST['type'];
echo "$type";


$phpfile = "players.php";
$fh = fopen($phpfile, 'a') or die("Can't open file");
fwrite($fh, "$maxplayers");
fwrite($fh, "?>");
fclose($fh);
?>


Je krijgt met de huidige code geen newline, maar als je \n doet, krijg je er wel een. Als je dit met notepad bekijkt zie je een raar teken, maar php zal deze verder wel zien als een newline. Ook als je het met wordpad opent zie je een newline.

Acties:
  • 0 Henk 'm!

Verwijderd

het is beter om eerst de gehele content van je phpfile in een string variable te zetten en deze dan in 1 keer weg te schrijven.

ook ben ik niet helemaal zeker dat die fwrite($fp, "$maxplayers"); goed werkt. waarom post je het resultaat niet hier dan wordt mischien wat duidelijken wat er misgaat. let er ook op dat omdat je de file opent in "a" modus je file-pointer ALTIJD op het einde van de file zal staan. en gebruikt altijd "ab" of beter nog "wb" met de b voor binary zodat je zeker weet dat elke byte wordt geschreven zoals die is bedoeld. de "a" modus opened ook bestande files. deze worden dan niet overschreven maar aan toegevoegd. die a staat voor append oftewel toevoegen.

kortom, waarom stel je niet de hele file eerst op in een string variable. open dan pas de file in "wb" modus en schrijf deze weg. sluiten en klaar. werkt veel beter en is veel meer flexiebel.

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
Met Docey, bovendien kun je dan simpelweg file_put_contents gebruiken (als je PHP5 hebt tenminste).

Als het bovendien alleen maar om een stel settings gaat kun je dat netter in een ini zetten en met parse_ini de content daarvan ophalen. Mocht er dan iets mis gaan met het writen en je krijgt een leeg bestand bijvoorbeeld gaat PHP tenminste niet over z'n nek bij't includen.

Overigens moet je verdomde goed gaan kijken naar hoe je je data controleert, het is doodsimpel voor een beetje hacker zelf POST data te versturen, als iemand in plaats van een maxplayers aantal iets grapigs als "exec("del *.* > log.txt");" verstuurt ben je nu hard de sjaak.

[ Site ] [ twitch ] [ jijbuis ]

Pagina: 1