fopen W geht nicht

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • fopen W geht nicht

    Hallo,

    ich versuche seit stunden eine Datei zu öffnen den Inhalt zu ändern und dann zu speichern. Das öffnen und ändern habe ich bereits, allerdings haben die Datei mit "r" geöffnet. Jetzt dachte ich mir ich mache daraus "w" aber dann ist alles weg. ich weiß das ich den INhalt auslesen muss, da mit "w" die Datei quasi geleert wird, aber ich bekomme es nciht hin. Um es zu vereinfachen:

    Wie kann ich die geöffnete Datei mit dem Inhalt der Variable: "$text2" füllen?

    Quellcode

    1. if (isset($_POST['submit'])) {
    2. move_uploaded_file($_FILES['datei']['tmp_name'], "tmp/".$_FILES['datei']['name']);
    3. $fp = fopen("tmp/".$_FILES['datei']['name'],"r");
    4. $head = fgets($fp);
    5. $head2 = substr($head, -15);
    6. if ($fp)
    7. {
    8. // Dateizeiger auf 0 setzen **************************************************************************************************
    9. fseek($fp, 0);
    10. // **************************************************************************************************
    11. while(!feof($fp))
    12. {
    13. $text = fgets($fp);
    14. $text = explode(";",$text);
    15. // Werte ersetzen *****************************************************************************************************
    16. ...
    17. ...
    18. ...
    19. }
    20. echo "<tr>";
    21. for ($i=0; $i < 90; $i++) {
    22. echo "<td>$text[$i]</td>\n";
    23. }
    24. echo "</tr>";
    25. // Ausghabe ******************************************************************************************************************
    26. $text2 = implode(";",$text)."<br>";
    27. echo $text2;
    28. }
    29. fclose($fp);
    30. }
    31. }
    Alles anzeigen
  • Ahh r+ hatte ich ganz übersehen, danke.

    Aber das leeren der Datei klappt noch nicht ganz.
    Ich habe ja bei fopen von r auf r+ geändert.

    Unten habe ich den Text nun so geändert:

    Quellcode

    1. // Ausghabe ******************************************************************************************************************
    2. $text2 = implode(";",$text);
    3. ftruncate($fp, 0);
    4. fputs($fp, $text2."\n");


    Aber so bekomme ich ja immer nur eine Zeile in die Datei geaschrieben und dann wird der ganze Rest gelöscht, da dieser Codeschnipsen in einer Schleife liegt.
  • Ich kenne jetzt nicht deinen ganzen Code und dementsprechend weiß ich auch nicht, wo du die Datei öffnest. Aber ich versuche es mal in Pseudecode zu beschreiben

    Quellcode

    1. $filehandler = ÖffneDatei();
    2. $Inhalt = LeseDateiinhalt();
    3. DateiLeeren($filehandler);
    4. Solange(1==1) {
    5. SchreibeInDatei($text, $filehandler);
    6. }

    Kannst du das so umsetzen? Oder sieht es in deinem Code anders aus, so dass man den Code nicht auf dein Programm übertragen kann?

    Und woher bezieht bei dir die Variable $text ihren Inhalt?
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.
  • Eigentlich schon.

    Hier die $text Variable:

    Quellcode

    1. $fp = fopen("tmp/".$_FILES['datei']['name'],"r+");
    2. while(!feof($fp))
    3. {
    4. $text = fgets($fp);
    5. $text = explode(";",$text);


    Wäre es für dich einfacher, wenn ich dir die Datei per PM schicke? Sie enthält leider einige ILN-Nummern usw. die ich nicht veröffentlichen darf.
  • Ja du kannst mir mal gerne die Datei schicken und ich werde es mir ansehen.

    Was mir jedoch schon direkt beim Einlesen deiner Datei auffällt, ist, dass wenn sie mehr als eine Zeile hat, also mind. 2 Schleifendurchläufe, dann wird jedes Mal der Inhalt von $text durch die aktuelle Zeile überschrieben.
    So bleibt der Inhalt erhalten:

    Quellcode

    1. $fp = fopen("tmp/".$_FILES['datei']['name'],"r+");
    2. $content = array()
    3. while(!feof($fp))
    4. {
    5. $line = fgets($fp);
    6. $line = explode(";",$text);
    7. $content = array_merge($content, $line); //Verbindet zwei Arrays miteinander

    Wenn garantiert ist, dass die Datei nur eine Zeile hat, dann kannst du meinen Code ignorieren, obwohl ich dir empfehlen würde, diese potenzielle Fehlerquelle zu beseitigen.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.