Hi,
Es soll eine zufällige Zeile finden, deren Wert benutzen und die Zeile dann aus der Datei löschen, damit der Wert kein zweites Mal benutzt wird.
Das Problem ist nun, dass die Datei ziemlich groß ist (mehrere MB) und ich sie deshalb nicht komplett in den Speicher laden will. Eine zufällige Zeile herauszufinden ist nun kein Problem, ich nehme einfach an eine zufällige Position in der Datei (ermittelt per rand() und filesize()) und suche dann den nächstbesten Zeilenumbruch. Das Problem ist aber das Löschen der Zeile.
Nur mal so als Idee:
Erweitere die Suche nach dem nächsten Zeilenumbruch etwas, nämlich um die Suche nach dem nächsten Zeilenumbruch, dem kein weiterer Zeilenumbruch folgt.
Zum Löschen überschreibst Du dann die benutzte Zeile mit lauter Zeilenumbruchzeichen.
(wahlweise auch mit einem anderen, sonst nicht benutzten Zeichen überschreiben, dann halt die Suche nach der Zeile entsprechend anpassen)
Im Chat habe ich mir sagen lassen, dass PHP hierfür keine Boardmittel mitbringt. Also wurde mir empfohlen, die Datei Stück für Stück auszulesen, auf diese Weise den Inhalt in eine andere Datei zu kopieren – bis eben auf die Zeile – und dann die Original-Datei mit der neuen zu überschreiben.
Ist nicht so sehr ein PHP- wie ein Dateisystem-Problem: man kann nicht einfach mitten in einer Datei etwas rauslöschen.
cu,
Andreas
Warum nennt sich Andreas hier MudGuard?
Schreinerei Waechter
Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.