Toon posts:

[php] Bestand schrijven

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,
Ik ben al een tijdje bezig de wegen van PHP te verkennen. Om filehandling een beetje onder de knie te krijgen, heb ik gepobeerd een script te maken waarmee je email adressen aan een bestand kan toevoegen en verwijderen. Het toevoegen lukt nu prima, maar het verwijderen wil maar niet werken.
dit is het stuk waar het fout gaat. hierbij is $delete het te verwijderen adres. dit adres komt er in voor, want als ik een adres doe die er niet in voorkomt krijg ik de foutmelding:
PHP:
1
<?if ($action == "delete") {$filehandle = fopen("email.txt", "r");while (!feof($filehandle)) {$file_contents[] = fgets($filehandle, filesize("email.txt")); }fclose($filehandle);$howmuch = (count($file_contents)+1);for ($i=0; $i < $howmuch; $i++)  {if ($file_contents[$i] == $delete) { $flag = 1; } else { $filehandle = fopen("email.txt", "w");fputs($filehandle, $file_contents[$i]);  fclose($filehandle); } }if($flag) { print("Het verwijderen van <b>$delete</b> is succesvol verlopen");         } else { print("$delete kon niet gevonden worden");        }}?>

Als ik een adres wil verwijderen krijg ik de melding dat het succesvol is verlopen, als ik echter daarna het email.txt bestand bekijk zie ik dat ze allemaal verwijderd zijn.
Mischien heb ik een klein stom foutje heb gemaakt, maar ik kan het echt niet vinden. Ik hoop dat een van jullie mij kan helpen.
Groeten,
Remco

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 13:49

pietje63

RTFM

[off topic]
is het leren werken met mysql niet veel makkelijker
[/off topic]
ik heb niet veel ervaring met text based database's maar misschien is dit een idee:

1> lees tot het te verwijderen e-mail adres
2> lees vanaf het te verwijderen e-mail adres
3> stop die samen in 1 bestand
4> schrijf die weg

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


  • vinnux
  • Registratie: Maart 2001
  • Niet online
Fout zit hier :
PHP:
1
<?$filehandle = fopen("email.txt", "w")?>

Het betstand "email.txt" wordt geopene met de mode "w".
Op de php website staat :
'w' - Open for writing only; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.

Of te wel open het bestand en leeg het en zet je pointer op de 1e regel.

Voor meer informatie over de file modes kijk op :
[url="http://www.php.net/manual/en/function.fopen.php"]http://www.php.net/manual/en/function.fopen.php[/url]

Misschien is de mode "a" iets voor jou !

Hier een werkend script :
PHP:
1
2
3
4
5
<?
$emailToDelete ="kort@he.nl";
$content = readfile ("email.txt");
str_replace ($emailToDelete."\n",'',$content);
$fp = fopen("email.txt",'w');fwrite($fp,$content);fclose($fp);?>

Heb het alleen niet getest.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op maandag 29 juli 2002 00:11 schreef vgouw het volgende:
[..]
Misschien is de mode "a" iets voor jou !
[..]
Dat zou betekenen dat je iets ga toevoegen aan de bestaande bestand.

uit openingspost:
PHP:
1
<?for ($i=0; $i < $howmuch; $i++)  {  if ($file_contents[$i] == $delete) { $flag = 1; } else { $filehandle = fopen("email.txt", "w");  fputs($filehandle, $file_contents[$i]);    fclose($filehandle);   } }?>

vertaling:

Loop alle waarden uit de array door.

is deze waarde uit de array gelijk aan de email adres die verwijderd moet worden

- zoja zet de vlag op 1.
- zo niet:
-- creer een nieuwe file (als ie al bestaat wordt ie lengte 0)
-- schrijf de waarde uit de array weg in deze file
-- sluit de file
einde loop.

misschien voor de loop je file openen die je wilt maken,
dan je array doorlopen en alleen de adressen wegschrijven die je wilt hebben, en dan na de loop je file sluiten, zou ook wel eens performance kunnen opleveren.

ook aandachtig doorlezen van de functionaliteiten van de [url="http://www.php.net/manual/en/function.array-map.php"]arrays[/url] op php.net zou je wel eens een idee kunnen geven dat er een makkelijkere manier is dan alle items zelf doorlopen.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • mocean
  • Registratie: November 2000
  • Laatst online: 31-08 09:14
vgouw schreef op 29 juli 2002 @ 00:11:
Hier een werkend script :
[...]
Heb het alleen niet getest.
Eh, hoe weet je dan dat het werkt?

Koop of verkoop je webshop: ecquisition.com


  • vinnux
  • Registratie: Maart 2001
  • Niet online
Nou dat zijn 4 regels code en ik kan me niet voorstellen dat het niet zal werken !
Trouwens het lijkt mij niet verstandig om tegelijkertijd naar een file te schrijven en te lezen. Volgens mij gebeuren er dan "rare" dingen.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

vgouw schreef op 31 juli 2002 @ 10:57:
Nou dat zijn 4 regels code en ik kan me niet voorstellen dat het niet zal werken !
Trouwens het lijkt mij niet verstandig om tegelijkertijd naar een file te schrijven en te lezen. Volgens mij gebeuren er dan "rare" dingen.
Daar hebben ze dus flock voor uit gevonden..

Programmer - an organism that turns coffee into software.


  • vinnux
  • Registratie: Maart 2001
  • Niet online
Ja das best leuk maar :

flock() will not work on NFS and many other networked file systems. Check your operating system documentation for more details.

On some operating systems flock() is implemented at the process level. When using a multithreaded server API like ISAPI you may not be able to rely on flock() to protect files against other PHP scripts running in parallel threads of the same server instance!

flock() is not supported on antiquated filesystems like FAT and its derivates and will therefore always return FALSE under this environments (this is especially true for Windows 98 users).

Dus ik zou maar geen files gebruiken.

Verwijderd

Topicstarter
dusty schreef op 29 juli 2002 @ 09:33:
[...]
misschien voor de loop je file openen die je wilt maken,
dan je array doorlopen en alleen de adressen wegschrijven die je wilt hebben, en dan na de loop je file sluiten, zou ook wel eens performance kunnen opleveren.
[...]
Zoals je het beschreven had was inderdaad de bedoeling. Het buiten haakjes halen van het file openen heeft inderdaad geholpen. Bedankt Dusty! :*)

Ik heb op meerdere pagina's gelezen dat filehandling een beetje achterhaald is en MySQL beter is. Ik ga hierna met MySQL iets proberen te doen en bekijken hoe ik dit handiger kan doen.

Jongens bedankt!
Pagina: 1