Ahoj.
Načítám celkem velký objem dat (několik giga) po kouskách o velikosti typicky 2096 bajtů. A následně ho zapisuju do souboru v tempu:
$tmpdir = sys_get_temp_dir();
$tmpname = tempnam($tmpdir, 'app-');
$handle = fopen($tmpname, 'a');
// velikost $s je obvykle 2096 bajtů
function write($s)
{
$len = strlen($s);
$wrote = fwrite($handle, $s);
if ($len !== $wrote) {
echo "\n\nERROR: Nesedí počet zapsaných bytů. C1 {$wrote} ~ {$len}\n\n"; // "419 ~ 2096"
var_dump(error_get_last()); // nic
$wrote2 = fwrite($handle, substr($s, $wrote));
if ($wrote2 !== ($len - $wrote)) {
echo "\n\n{$s}\n\n"; // zde vidím, že to není poslední záznam. Je to uřízlé uprostřed textu.
throw new RuntimeException('Nesedí počet zapsaných bytů. C2 ' . "{$wrote2} ~ " . ($len - $wrote) ); // "0 ~ 1677"
}
}
}
Celé mi to chcípne na tom, že nesedí počet zapsaných bajtů. Je možné, že mi třeba došlo místo v tempu, nebo tak něco. Ale vadí mi, že mi to nevypíše žádnou chybu.
Otázka tedy zní, jak zjistím, co se stalo?
Děkuji za odpověď.