Kalle_B: fclose - Problem

Hallöle,

ein (Update-) Server fordert bei einem anderen Server eine Datei an. Bei der ersten Anfrage pro Tag wird die neu erstellt, auf dem Server gespeichert, sofort wieder gelesen und verschickt.

Obwohl die Datei mit knapp 7000 Bytes auf dem Sende-Server vorhanden ist, erhält der Empfänger-Server nur 0 Bytes. Erst wenn die vorhandene (!) Datei nochmals angefordert wird, klappt die Übertragung.

Ich habe das Kommando fclose (include-Datei) im Verdacht, das erfolgreiche Schliessen nicht abzuwarten, sodass das folgende Öffnen nur 0 Bytes vorfindet.

include:
...
foreach( $arr_dateien as $datei )
{
  fwrite( $out, $datei."\n" );
}
fclose( $out );

Hauptscript anschliessend:
if ( file_exists( $input_file ))
{
  $contents = fread($handle, filesize($input_file));
...

Muss ich nach dem fclose in eine Zeitschleife gehen und abfragen, ob die Datei eine Länge hat? Oder was kann sonst der Grund sein?

MfG Kalle

  1. beim Durchlesen merkte ich, dass $handle nicht erklärt wird. Beim Kürzen des Codes habe ich das unterschlagen. Hier die vollen Zeilen:

    if ( $input_file )
    {
      if ( $input_file == '_dateiliste.txt' )
      {
        include( '_erzeugen_dateiliste.php' );
        erzeugenDateiliste( "_dateiliste.txt" );
      }

    if ( !file_exists( $input_file ))
      {
        $contents = "FALSE - Datei [".$input_file."] nicht gefunden\n";
      }
      else if ( $handle = fopen( $input_file, 'rb' ) )
      {
        if ( strpos( 'x'.$input_file, 'send_file' ))
        {
          $contents = "FALSE - Zugriff auf send_file nicht erlaubt\n";
        }
        else
        {
          $contents = fread($handle, filesize($input_file));
        }
      }
      else
      {
        $contents = "FALSE - Datei [".$input_file."] nicht gefunden\n";
      }

    // STRING CODIEREN
      $contents = codiereString( $contents );
      echo strlen( $contents )."/";
      echo $contents;
    }

    1. Beim Aufruf der DB-Tabellen hatte ich einen ungültigen Namen.

      Da die Fehlermeldung per echo zuerst gesendet wurde, konnte das empfangende Programm keine Dateilänge lesen.