Fwite... update?

Status
Niet open voor verdere reacties.

acid007

Gebruiker
Lid geworden
13 jun 2002
Berichten
775
even een vraagke van mij, is al even geleden..

Ik heb een file weg geschreven, als een php bestand (extentie boeit verder niet, html content)

Hoe kan ik deze nu inlezen? en updaten?
als ik FWRITE doe.. zet hij alles er achter?
 
Ik denk niet dat je bedoelt dat het de bedoeling ook is dat alles achteraan gedumpt wordt? Voor zover ik weet kun je geen exacte positie aangeven waar php het moet neerzetten. Wel kun je dingen bufferen door het bestand regel voor regel uit te lezen (op php.net stond ergens een voorbeeld daarvan...) en dan op te slaan in een nummerieke array ([0], [1] enz.) waarbij elk nummer een regelnummer voorstelt. Dan kun je wel bepalen welke regel je wilt wijzigen. Feitelijk kun je dan alles ermee doen wat je wilt.
 
Heb het ff opgezocht, je kunt het onder andere met fgets() en een while loop doen:

PHP:
<?php

$handle = fopen ("/tmp/inputfile.txt", "r");
while (!feof ($handle)) {
    $buffer = fgets($handle, 4096);
    echo $buffer;
/*
    PHP.net echo'ed het hier alleen maar, maar je kunt het nu dus ook iedere keer opslaan in een array:
    $i = 0;   #kun je ook voor het gemak op 1 zetten voor regel 1
    $fbuffer[$i] = fgets($handle, 4096);
    $i++;    #tel 1 op bij de regelnummering, zodat hij een nieuwe sleutel neemt voor de volgende regel...
*/
}
fclose ($handle);
 
kep een paar tutorials op me site staan, maar aangezien ik de link niet overal verspreid enzo (vanwege hosting...) zal ik hier ff posten wat ik aan tutorials heb staan :) :
fwrite():
PHP:
<?
fwrite(fopen("berichten.dat","a"),"JPeetje zei: 'Hallow'");
fclose(fopen("berichten.dat","a"));
?>
uitlezen, een aantal manieren:
PHP:
<?
include("bestand.dat");
?>
of...
PHP:
<?
$regels = file("tekst.txt");
foreach ($regels as $regelnummer => $regelwaarde)
{
echo ("Regel #<b> " . $regelnummer . "</b>: " . $regelwaarde . "<br>");
}
?>
of...
PHP:
<?
$bestand = ("tekst.txt");
$handeling = fopen($bestand, "r");
$inhoud = fread($handeling, filesize($bestand));
echo ($inhoud);
fclose($handeling);
?>
je moet aangeven hoeveel bytes je wil uitlezen, filesize() leest alle tekens er dan dus uit...

updaten wordt lastiger, het lijkt me moeilijk om op specifieke plaatsen te beginnen met tekst plaatsen...dan zul je echt naar specifieke tekst moeten zoeken en vervangen...als je iets nieuws aan het einde wil plaatsen, gewoon openen met mode a of a+...
met de cursor aan 't begin van 't bestand worden de tekens overschreven...dat wil je niet, dus kun je eerst alle data uit het bestand uitlezen, daarna eerst de nieuwe data erin zetten, en vervolgens de ouwe data er weer achter plaatsen...
dit is hopelijk genoeg leesvoer, en daarmee MOET het lukken :D :thumb:
 
Laatst bewerkt:
Beetje omslachtig JPeetje, maar die ene manier met file() en foreach() is idd wel slim gevonden.

Wat ik dus al zei is dat er geen manier is voor zover ik weet dat je exact de positie van de file-pointer kunt bepalen maar dat je het dus zou moeten bufferen in 1 grote variabele string en dan met preg_match() en str_replace() de te veranderen dingen wijzigen en dan de gewijzigde inhoud weer terugschrijven naar het bestand...
 
waarom men dit heeft uitgevonden is mij een raadsel..
wat een gedoe

Kan ik niet gewoon het hele bestand uitwissen? is dat niet een optie?

Wat ik nu doe, ik heb een form met 2 velden (titel en content) en die schrijf ik weg naar een bestand. Dan hou je dus alleen html over.
Als ik dat nou open in een tekstvak, en dan bij het 'wijzigen' eerst het gehele filetje DELETE en dan een nieuwe aanmaak?


Of is dat onzin?
 
Dat hoeft niet. Je kunt hem ook eerst inlezen en de inhoud daarvan in dat veld plaatsen, dan editen en vervolgens submitten. De gesubmitte data uit dat veld laat je dan in dat bestand de andere data overschrijven met het argument 'w' bij fopen():

'w' Openen voor alleen schrijven; plaats de bestands pointer aan het begin van het bestand en maak het bestand 0 bytes lang. Als het bestand niet bestaat, probeer het aan te maken.

Dan de ge-edite content terugschrijven naar het bestand en sluiten (fclose()).
 
Beetje omslachtig JPeetje
wat nou ? :p:D
kep gewoon ff wat mogelijkheden op tafel gelegd ;)
maar die ene manier met file() en foreach() is idd wel slim gevonden
van tutorials maken leer je handige dingen :p:cool::D
Wat ik dus al zei is dat er geen manier is voor zover ik weet dat je exact de positie van de file-pointer kunt bepalen maar dat je het dus zou moeten bufferen in 1 grote variabele string en dan met preg_match() en str_replace() de te veranderen dingen wijzigen en dan de gewijzigde inhoud weer terugschrijven naar het bestand...
voor zover ik weet kun je idd ook niet zomaar ergens plaatsen...tis of aan 't begin, of aan 't einde...en dan lekker met ereg_replace() or str_replace() enzo lopen klooien :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan