• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

fopen() erstellt mehrere Dateien

G

Gelöschtes Mitglied 35303

Guest
Hallo,
mein PHP-Skript soll eine Datei erstellen. Der Dateiname wird dabei mit weiteren Information in einer JSON-Datei gespeichert und anschließend mittels json_decode() in einem Array gespeichert.
Problem an der ganzer Sache ist, dass gleich mehrere Dateien durch fopen() erstellt werden. Der Dateiname setzt sich dabei aus zwei Teilen zusammen. Einmal aus "file-" und dem Identifier aus der JSON-Datei. Allerdings scheint das nicht so ganz zu funktionieren, denn angenommen der Dateiname soll "001" lauten, werden folgende Dateien erstellt:
  1. file-.txt
  2. file-001.txt
file-.txt ist dabei die falsche Datei, beziehungsweise soll nicht erstellt werden. Befülle ich das Array mit dem Dateinamen nochmal manuell in PHP, so wird nur file-001.txt erstellt. Verarbeite ich die Informationen jedoch direkt aus der JSON-Datei, so werden die oben aufgelisteten Dateien erstellt.
Meine Vermutung liegt darin, dass sich der Zeichensatz unterscheidet, wobei mb_detect_encoding() allerdings in beiden Fällen ASCII ergab.
Mehrmals aufgerufen wird das fopen() nicht.

Ich danke für Eure Hilfe!
:)
 
Werbung:
Ich kann hier nicht den ganzen Quellcode posten, da er sich auf mehrere Dateien aufteilt und an sich recht lang ist. Einen vereinfachten Quellcode habe ich schon probiert, da funktioniert aber alles.
 
Werbung:
Irgendwelche Ideen habt ihr nicht 'rein zufällig?
Hab' gerade nochmal versucht, das ganze nochmal nachzustellen, klappt nur mit dem Originalcode. Wäre es denn möglich, dass ich jemandem die Dateien privat schicke?
 
Werbung:
Ich würde die Dateien ungern für alle (zum Beispiel Forengäste) offen legen, deswegen wäre Mir privat schicken eigentlich lieber.
 
Ich würde die Dateien ungern für alle (zum Beispiel Forengäste) offen legen, deswegen wäre Mir privat schicken eigentlich lieber.
Private Nachhilfe wirst Du hier wohl kaum erlangen. Und wer sich an ein Forum um Hilfe wendet, muß bereit sein, den Quellcode offen zu legen.

Andernfalls verschieben wir das Ganze nach https://www.html.de/forums/jobboerse.12/ , wo Du Dich per PN austauschen kannst.
 
So ... es scheint an dem fopen(), beziehungsweise fgets() der vorherigen Datei zu liegen. Versuche ich, sie mit fgets() auszulesen, bekomme ich null, beziehungsweise false. Stelle ich dann hingegen ein "json_decode" davor, scheint es zu funktionieren, allerdings werden dann die zwei Dateien erstellt.

PHP:
    $id = "uskpvm3cfs92";

    $datei= fopen(__DIR__ . "/ergebnisse-{$id}.json", "r");
    $dateiarray = json_decode(fgets($datei), true);
    $dateijson = fgets($datei);

    var_dump($dateiarray);
    echo $dateijson;


   if ($dateijson == null) {
        echo "null";
    }
    if ($dateijson == false) {
        echo "false";
    }

Als Ergebnis bekomme ich dann folgendes:
array(4) { ["nummer1"]=> string(3) "132" ["nummer2"]=> NULL ["nummer3"]=> string(3) "232" ["nummer24"]=> string(3) "047" } nullfalse

Ich frage Mich halt nur, warum ich trotzdem "nullfalse" erhalte, obwohl es ja scheinbar doch ausgelesen werden kann.

Die JSON-Datei enthält:
Code:
{"nummer1":"132","nummer2":null,"nummer3":"232","nummer24":"047"}
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
Ich frage Mich halt nur, warum ich trotzdem "nullfalse" erhalte
Das fragst du dich wirklich? Tipp: nachdenken!

  1. Die Datei besteht aus einer Zeile
  2. Mit $dateiarray = json_decode(fgets($datei), true); liest du diese eine Zeile ein
  3. Was soll dann bei $dateijson = fgets($datei); rauskommen? Da ist nix mehr zum einlesen!
 
Hallo,

probiers doch mal mit file_put_contents(), statt mit fopen().

LG
 
PHP:
// Den Dateinamen entsprechend ändern
$datei= file("ergebnisse.json");

// Ab jetzt steht jede Zeile aus deiner Datei in dem Array $datei

/*
*
* Die Schleife durchläuft ALLE Zeilen deiner Datei (das gesamte Array $datei)
* dekodiert jede Zeile und gibt dir dein Array zurück.
*
* So wird notfalls auch eine zweite, dritte, xte Zeile gelesen
*
*/
for($i = 0; $i < count($datei); $i++)
{
  // eventuelle Leerzeilen filtern
  if(trim($datei[$i]) == '')
  {
     continue;
  }

  /* Das trim entfernt eventuelle Steuerzeichen. Das ist eigentlich gerade bei Dateien wichtig.
   * Umbrüche etc willst du in deinem Array nicht
  */
  $dateiarray = json_decode(trim($datei[$i]), true);

  // formatiert nur die Ausgabe
  echo '<pre>';
  var_dump($dateiarray);
  echo '</pre>';

}

Dein NULLFALSE kommt, weil das EOF ebenfalls gelesen bzw von deinem Script interprtiert wird, also das Ende der Datei
 
Zuletzt bearbeitet:
Werbung:
Zurück
Oben