Moin,
$handle = fopen($DiffDateiPfad, 'w');
fclose($handle); // Leere Datei erstellen
Das geht einfacher mit
file_put_contents($DiffDateiPfad, "");
$exec = $programmPfad . ' /Od' . $DiffDateiPfad . ' ' . $datei1 . ' ' . $datei2;
Hier fehlt meiner Meinung nach ein Leerzeichen nach /Od
print (filesize ($DiffDateiPfad)); // sollte != 0 sein
Auch wenn die Datei ($DiffDateiPfad = 'F:\tmp\DiffOutput.txt';) einen Inhalt hat, liefert filesize den Wert 0.
Hast du mal probiert die Datei einzulesen, um zu sehen, ob er wirklich die richtige hat?
Sollte hingegen die Datei wirklich noch geöffnet sein, dann sollte filesize einen Fehler werfen, den du aber nicht auswertest. Du könntest testweise folgendes an dieser Stelle probieren:
if( filesize($DiffDateiPfad) === false ) echo ("Ein Fehler ist beim Auslesen der Dateigröße aufgetreten");
else echo ("Wert kann ausgelesen werden.");
Vermutung: Datei ist noch nicht geschlossen, wenn das sizeof durchgeführt wird.
Wie kann ich dies ändern?
Erstmal ist es eine Vermutung, die du bestätigen solltest. PHP wartet aber eigentlich, bis das Programm beendet ist, welches mit exec()
aufgerufen wurde, bevor es mit der Ausführung fortfährt.
Sollte es wirklich noch an einem Dateilock liegen, kannst du auf die Verfügbarkeit der Datei prüfen.
while(fopen($DiffDateiPfad)===false) {}
Grüße Marco