Bertram: Dateizeile wird nicht korrekt ausgegeben

Hallo,

Folgender Code läuft nicht nach meinem Willen ab:

<?php
$telefonnummer="01234567890";
$dateinr=fopen('nr.txt','r');
$zeilensuche=fgets($dateinr,12);
echo $zeilensuche;
if ($zeilensuche==$telefonnummer) {
echo "Telefonnumer bereits enthalten.";
}
else {
echo "Telefonnummer noch nicht enthalten.";
}
fclose($dateinr);
?>

Die Ausgabe von "$zeilensuche" bringt kein Ergebnis, "$dateinr" wenigstens "Resource id #2" hervor. Ich hatte das, wohl leicht anders gestaltete, Teilchen vor wenigen Stunden korrekt vor mir ablaufen sehen, aber versehentlich gelöscht ;(

Die Datei "nr.txt" enthält den Inhalt "01234567890".

Danke und Grüße!
Bertram

  1. Hallo

    <?php
    $telefonnummer="01234567890";
    $dateinr=fopen('nr.txt','r');

    $zeilensuche=fgets($dateinr,13);  <===  11 Nutzbytes + Zeilenumbruch + EOF = 13

    Lies Dir die Beschreibung von fgets() aufmerksam durch.
    Außderdem würde ich fgets() nicht benutzen, sondern fread(). Das liest tatsächlich soviele Zeichen, wie man vorgibt, wenn sie denn da sind.

    Die Nummer sollte außerdem auch Formatiert in die Datei geschrieben werden, damit sie auch immer 11 Zeichen in anspruch nimmt, eventuell mit führenden Leerzeichen oder Nullen.

    LG
    Chris©

    1. Hallo

      <?php
      $telefonnummer="01234567890";
      $dateinr=fopen('nr.txt','r');
        $zeilensuche=fgets($dateinr,13);  <===  11 Nutzbytes + Zeilenumbruch + EOF = 13

      Ich habe es ja schon mit drei- und vierstelligen Werten probiert ...

      Lies Dir die Beschreibung von fgets() aufmerksam durch.

      Noch ein Mal mehr? Ich kenne Beschreibungstexte und meine getippten Zeichen nun schon auswendig.

      Außderdem würde ich fgets() nicht benutzen, sondern fread(). Das liest tatsächlich soviele Zeichen, wie man vorgibt, wenn sie denn da sind.

      Danke für den Tipp. Es funktioniert, seitdem ich auf fread umgestellt und etwas an der txt-Zahlenformatierung geändert habe :)

      Die Nummer sollte außerdem auch Formatiert in die Datei geschrieben werden, damit sie auch immer 11 Zeichen in anspruch nimmt, eventuell mit führenden Leerzeichen oder Nullen.

      Könnte ich dem eintragenden Script nahelegen ;)

      Danke nochmals!
      Bertram

      1. Hallo Bertram,

        Lies Dir die Beschreibung von fgets() aufmerksam durch.

        Noch ein Mal mehr? Ich kenne Beschreibungstexte und meine getippten Zeichen nun schon auswendig.

        Ich hätte vielleicht noch dazu sagen sollen, dass Du auf jeden Fall (auch) die englische Doku des Manuals lesen solltest. Die anderen Versionen sind oft unvollständig oder falsch übersetzt. Man versteht dann nur die Hälfte oder oft auch leider genau das Gegenteil vom tatsächlichen Verhalten der Funktionen.

        LG
        Chris©

        1. Hallo Bertram,

          Lies Dir die Beschreibung von fgets() aufmerksam durch.

          Noch ein Mal mehr? Ich kenne Beschreibungstexte und meine getippten Zeichen nun schon auswendig.

          Ich hätte vielleicht noch dazu sagen sollen, dass Du auf jeden Fall (auch) die englische Doku des Manuals lesen solltest. Die anderen Versionen sind oft unvollständig oder falsch übersetzt. Man versteht dann nur die Hälfte oder oft auch leider genau das Gegenteil vom tatsächlichen Verhalten der Funktionen.

          Guter Ratschlag, da werde ich mich demnächst reinlesen.

          Hättest du aber trotzdem eine Möglichkeit parat, mit preg_match, file_get_contents, substring_count etc. Zahlen herauszufischen? Mir wird das vom Script immer verweigert, da nur Strings enthalten sein dürften. Ich möchte quasi nur die Bestätigung haben, ob eine Nummer in der Nummernsammeldatei schon enthalten ist oder nicht. Mit einer Nummer in der Datei klappt es nach o.g. Hinweis ja bereits (fread).

          Hmm, und auch dann wüsste ich noch lange nicht, wie ich die Nummer nach ihrem Fund (bei mehreren Auftritten einmal) entfernen kann ...

          Ich würde mich sehr über eine nochmalige Antwort freuen!

          Bertram

          1. Hallo Bertram,

            Hmm, und auch dann wüsste ich noch lange nicht, wie ich die Nummer nach ihrem Fund (bei mehreren Auftritten einmal) entfernen kann ...

            Es könnte viel einfacher sein, wenn Du z.B. mit einem serialiserten Array arbeitest.
            Das geht natürlich nur, wenn die Datenmenge nicht zu groß wird. Wenn dann irgendwann mehr als 100.000 Einträge in der Datei stehen, könnte PHP wegen Speichermangels streiken (bei den typischen 8MB für ein Script).

            Schau Dir mal die Funktionen serialize() und unserialize() an.
            Und wenn Du schon liest im Manual auch gleich flock().

            http://de3.php.net/manual/en/function.serialize.php
            http://de3.php.net/manual/en/function.flock.php

            Bevor Du deine Datei zum Lesen benutzt, mit LOCK_SH sperren.
            Bevor Du deine Datei zum Lesen und Schreiben benutzt, mit LOCK_EX sperren.
            Sonst wirst Du sie irgendwann schreddern.

            LG
            Chris©