Datei auf "Leer" überprüfen?
Olaf
- php
0 Rouven0 Olaf
0 Christian Seiler0
Der Martin
0 seth_not@home
Hallo,
kann ich denn in PHP eine Text-Datei, die größer als 0 Byte ist, einfach dahingehend überprüfen, ob der Inhalt nicht
nur aus Leerzeichen besteht?
Danke
Olaf
Hi,
obs was vorgefertigtes gibt weiß ich nicht, aber mit einer Kombination aus file_get_contents und trim sollte es gehen.
MfG
Rouven
Hallo,
vielen Dank. Ich glaube file_get_contents ist mein Freund....
Gruß Olaf
Hallo Olaf,
kann ich denn in PHP eine Text-Datei, die größer als 0 Byte ist, einfach dahingehend überprüfen, ob der Inhalt nicht
nur aus Leerzeichen besteht?
Naja, mit file_get_contents einlesen und dann entweder gucken, ob trim($inhalt) == '' ist oder dies per reguläre Ausdrücke tun.
Viele Grüße,
Christian
Hallo Olaf,
kann ich denn in PHP eine Text-Datei, die größer als 0 Byte ist, einfach dahingehend überprüfen, ob der Inhalt nicht nur aus Leerzeichen besteht?
die einfachste Lösung, die mir momentan einfällt: Die gesamte Datei in einen String einlesen, dann alle führenden und abschließenden Leerzeichen entfernen und schließlich die Länge des resultierenden Strings auf Null prüfen.
So long,
Martin
gudn tach!
kann ich denn in PHP eine Text-Datei, die größer als 0 Byte ist, einfach dahingehend überprüfen, ob der Inhalt nicht
nur aus Leerzeichen besteht?
die loesungen der anderen sind alle gut, aber wenn du ueber die zu checkende datei nichts weisst, ausser, dass sie nicht 0 byte gross ist und wirklich nur wissen willst, ob sie _nur_ aus leereichen besteht, dann wuerdest du gefahr laufen, dass es bei grossen dateien recht lange dauern kann sie via file oder file_get_contents einzulesen (oder irre ich mich da? ich kenne die vorgehensweise von php da nicht genau).
deshalb wuerde ich bloss die ersten beiden zeilen (mit fgets) einlesen und abbrechen, falls eine zweite zeile existiert. anschliessend kann man die erste zeile mit
if(trim($first_line, ' ')==='') { /* nur leerzeichen */}
checken.
prost
seth
Hallo seth,
[...] dann wuerdest du gefahr laufen, dass es bei grossen dateien recht lange dauern kann sie via file oder file_get_contents einzulesen (oder irre ich mich da? ich kenne die vorgehensweise von php da nicht genau).
über diese Funktionen kann ich auch nur mutmaßen; ich vermute aber, dass der Zeitbedarf nicht wesentlich größer ist als der für das anschließende trim() auf den gesamten Pufferinhalt. Das bissl File-I/O dürfte im Verhältnis zur internen dynamischen Speicherverwaltung von PHP kaum ins Gewicht fallen.
deshalb wuerde ich bloss die ersten beiden zeilen (mit fgets) einlesen und abbrechen, falls eine zweite zeile existiert. anschliessend kann man die erste zeile mit
if(trim($first_line, ' ')==='') { /* nur leerzeichen */}
checken.
Jaaa...
Das ist 'ne gute Idee, falls der OP mit dem Begriff "Leerzeichen" wirklich nur Spaces (20h) gemeint hat. Falls er aber den Begriff etwas weiter fassen möchte und alles einschließen will, was üblicherweise unter dem Begriff "Whitespace" läuft, ist dein Vorschlag keine Alternative mehr.
Okay, man kann natürlich auch etwas Aufwand treiben und die Datei häppchenweise in einen kleineren Puffer lesen, trim() darauf loslassen, und beim ersten Vorkommen eines Reststrings mit einer Länge >0 die Aktion beenden. Bei sehr großen Dateien spart das möglicherweise etwas Zeit; aber ich glaube nicht, dass das im wahrnehmbaren Bereich liegt.
So long,
Martin
gudn tach!
über diese Funktionen kann ich auch nur mutmaßen; ich vermute aber, dass der Zeitbedarf nicht wesentlich größer ist als der für das anschließende trim() auf den gesamten Pufferinhalt.
je nach filesize waere auch noch fgetc in erwaegung zu ziehen. aber das wird evtl. wieder laenger dauern, weil jedesmal von neuem die datei gelesen werden muss(?).
deshalb wuerde ich bloss die ersten beiden zeilen (mit fgets) einlesen und abbrechen, falls eine zweite zeile existiert. anschliessend kann man die erste zeile mit
if(trim($first_line, ' ')==='') { /* nur leerzeichen */}
checken.Jaaa...
Das ist 'ne gute Idee, falls der OP mit dem Begriff "Leerzeichen" wirklich nur Spaces (20h) gemeint hat.
deswegen habe ich "nur" in "nur leer[z]eichen" unterstrichen.
in der regel meint man das damit. fuer whitespace werden dann eher solche begriffe wie leerraum, zwischenraumzeichen, leerstelle oder weissraum verwendet.
prost
seth