PHP Datei auslesen

  • PHP

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Quellcoder02.

    PHP Datei auslesen

    Hallo liebe Community,

    ich habe ein kleines Problem mit meinem PHP-Code. Ich habe das Internet jetzt schon lange Zeit durchforstet, allerdings ohne Lösung. Ich möchte eine Textdatei auslesen und deren Wert dann in einer "if" auswerten.
    Jetziger Code:
    Spoiler anzeigen

    PHP-Quellcode

    1. <?php
    2. $datei = fopen("passing.txt", "r+");
    3. $text = $_GET["text"];
    4. $dateiRead = fgets($datei);
    5. if($dateiRead != "WARTUNG")
    6. {
    7. rewind($datei);
    8. fwrite($datei, $text);
    9. fclose($datei);
    10. }
    11. else if($dateiRead == "WARTUNG")
    12. {
    13. if($text == "!0")
    14. {
    15. $text = "0";
    16. rewind($datei);
    17. fwrite($datei, $text);
    18. fclose($datei);
    19. }
    20. }
    21. ?>



    Ich habe schon gefühlt Millionen Sachen ausprobiert, aber mittlerweile wird das Textdokument nicht mal beschrieben, ich habe es auch schon mit echo $dateiAuslesen probiert und daran gesehen, dass nichts ausgegeben wird.
    Ich bitte um hilfe!
    LG
    Quellcoder02
    Projekte
    Was gibt dir folgendes aus:

    PHP-Quellcode

    1. <?php
    2. # Fehler ausgeben!
    3. ini_set('display_errors', 1);
    4. error_reporting(E_ALL);
    5. # Die Datei die ausgelesen werden soll:
    6. $file = "./test.txt";
    7. try {
    8. # Prüfen ob die Datei existiert:
    9. if ( file_exists($file) ) {
    10. # Prüfen, ob die Datei gelesen werden kann ...
    11. if ( is_readable($file) ) {
    12. $content = file_get_contents($file);
    13. echo "Hat alles geklappt. Das ist der Dateiinhalt:<br>";
    14. echo "<pre style='background-color: #eeeeee; padding: 8px;'>" . $content . "</pre>";
    15. switch (true) {
    16. case $content == 'WARTUNG':
    17. /* Dein Code hier ... */
    18. break;
    19. default:
    20. /* Standardaktion */
    21. break;
    22. }
    23. } else {
    24. throw new \Exception("Die Datei [" . $file . "] kann nicht gelesen werden (Dateiberechtigung: " . fileperms($file) . ").");
    25. }
    26. } else {
    27. throw new \Exception("Die Datei existiert nicht ...");
    28. }
    29. } catch (\Exception $e) {
    30. echo "Da ist was schief gelaufen:<br>" . $e->getMessage();
    31. }
    32. ?>


    Link :thumbup:
    Hello World

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Link“ ()

    @Link Es funktioniert zwar, aber nicht richtig. Er ersetzt den Text nicht ganz, sondern nur die Länge die der mitgegebene Parameter hat, und gibt zusätlich folgendes aus:
    Spoiler anzeigen

    Notice: Undefined variable: datei in /home/.sites/96/site2105491/web/shout/passing.php on line 32 Warning: rewind() expects parameter 1 to be resource, null given in /home/.sites/96/site2105491/web/shout/passing.php on line 32 Notice: Undefined variable: datei in /home/.sites/96/site2105491/web/shout/passing.php on line 33 Warning: fwrite() expects parameter 1 to be resource, null given in /home/.sites/96/site2105491/web/shout/passing.php on line 33 Notice: Undefined variable: datei in /home/.sites/96/site2105491/web/shout/passing.php on line 34 Warning: fclose() expects parameter 1 to be resource, null given in /home/.sites/96/site2105491/web/shout/passing.php on line 34


    //EDIT: Habe das jetzt mal richtig gestellt wie es meines Wissens nach gehören sollte, jetzt liest er allerdings nichts mehr aus, gibt aber trotzdem zurück, dass alles funktionieren würde. Jetziger Code:
    Spoiler anzeigen

    PHP-Quellcode

    1. <?php
    2. $datei = fopen("passing.txt", "w+");
    3. $text = $_GET["text"];
    4. # Fehler ausgeben!
    5. ini_set('display_errors', 1);
    6. error_reporting(E_ALL);
    7. # Die Datei die ausgelesen werden soll:
    8. $file = "passing.txt";
    9. # Prüfen ob die Datei existiert:
    10. if ( file_exists($file) ) {
    11. # Prüfen, ob die Datei gelesen werden kann ...
    12. if ( is_readable($file) ) {
    13. try {
    14. $content = file_get_contents($file);
    15. echo "Hat alles geklappt. Das ist der Dateiinhalt:<br>";
    16. echo "<pre style='background-color: #eeeeee; padding: 8px;'>" . $content . "</pre>";
    17. switch (true) {
    18. case $content == 'WARTUNG':
    19. if($text == "!0")
    20. {
    21. $text = "0";
    22. rewind($datei);
    23. fwrite($datei, $text);
    24. fclose($datei);
    25. }
    26. break;
    27. default:
    28. rewind($datei);
    29. fwrite($datei, $text);
    30. fclose($datei);
    31. break;
    32. }
    33. } catch (\Exception $e) {
    34. echo "Irgendwas anderes ist schiefgelaufen:<br>" . $e->getMessage();
    35. }
    36. } else {
    37. throw new \Exception("Die Datei [" . $file . "] kann nicht gelesen werden (Dateiberechtigung: " . fileperms($file) . ").");
    38. }
    39. } else {
    40. throw new \Exception("Die Datei existiert nicht ...");
    41. }
    42. ?>



    LG
    Quellcoder
    Projekte

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Quellcoder02“ ()

    Hi,

    der Inhalt der Datei kann nicht gelesen werden, wenn vorher ein handle mit fopen erstellt wurde - die Datei ist zu dem Zeitpunkt ja durch das geöffnete Handle (fopen) in Verwendung. Damit nachher das file_get_contents funktioniert, muss zuvor ein fclose() erfolgen (der Stream auf die Ressource (Pointer oder Dateizeiger) wird geschlossen). Alternativ auch ein temporäres flock, was hier in dem Fall aber eh wegfällt - lies weiter.

    Generell solltest du den Mumpitz mit dem Handle eh weglassen. file_get_contents macht das schon alles für dich. Schau:

    PHP-Quellcode

    1. <?php
    2. ini_set('display_errors', 1);
    3. error_reporting(E_ALL);
    4. $text = (isset($_GET["text"]) ? $_GET["text"] : "");
    5. # Fehler ausgeben!
    6. # Die Datei die ausgelesen werden soll:
    7. $file = "test.txt";
    8. try {
    9. # Prüfen ob die Datei existiert:
    10. if (file_exists($file)) {
    11. # Prüfen, ob die Datei gelesen werden kann ...
    12. if (is_readable($file)) {
    13. # Datei auslesen und Inhalt in $content speichern
    14. $content = file_get_contents($file);
    15. echo "Hat alles geklappt. Das ist der Dateiinhalt:<br>";
    16. echo "<pre style='background-color: #eeeeee; padding: 8px;'>" . $content . "</pre>";
    17. switch (true) {
    18. # Wenn content gleich WARTUNG ist ...
    19. case $content == 'WARTUNG':
    20. if ($text == "!0") {
    21. # Daten in Datei schreiben
    22. file_put_contents($file, '0');
    23. }
    24. break;
    25. # Standard-Aktion falls oben nix zutrifft
    26. default:
    27. # Daten in Datei schreiben
    28. file_put_contents($file, $text);
    29. break;
    30. }
    31. } else {
    32. throw new \Exception("Die Datei [" . $file . "] kann nicht gelesen werden (Dateiberechtigung: " . fileperms($file) . ").");
    33. }
    34. } else {
    35. # Schau ggf. mit getcwd() oder __DIR__ nach, in welchem Verzeichnis du dich aktuell befindest
    36. throw new \Exception("Die Datei existiert nicht.<br>Aktuelles Verzeichnis ist " . __DIR__);
    37. }
    38. } catch (\Exception $e) {
    39. echo "Oha, da ist was schief gelaufen:<br>" . $e->getMessage();
    40. }
    41. ?>


    Jetzt musst du nur noch deine URL mit den gewünschten GET Parametern aufrufen und dann siehst du ja was dabei raus kommt.

    Zum Thema Dateien lesen, PHP sagt:
    file_get_contents() ist der empfohlene Weg, um den Inhalt einer Datei in einen String zu lesen. Es werden Techniken zur Speicherabbildung genutzt, um die Performance zu erhöhen [...]


    Und was das Handle betrifft, verhält es sich so wie ich oben geschrieben habe:
    [...] file_get_contents() entspricht fopen(), fwrite() und fclose(), um Daten in eine Datei zu schreiben.


    Ob das Auslesen der Datei mit file_get_contents erfolgreich war, kannst du zur Sicherheit auch nochmal prüfen. Das geht aber nur mit einem typsicheren Vergleich:
    if(file_get_contents('datei.txt') !== false){ /* ... */ }
    Warum? Wenn die Datei zwar erfolgreich ausgelesen werden kann, aber der Inhalt leer ist, wird auch false zurückgegeben.

    Mehr dazu hier: php.net/manual/de/function.file-get-contents.php (und zum Schreiben von Dateien siehe php.net/manual/de/function.file-put-contents.php )

    Link :thumbup:
    Hello World

    Dieser Beitrag wurde bereits 18 mal editiert, zuletzt von „Link“ ()