non vedo il motivo di questo rigiro

print("x1fx8bx08x00x00x00x00x00");
$size = strlen($contents);
$contents = gzcompress($contents, 9);
$contents = substr($contents, 0, $size);

a parte gzcompress, il resto mi sembra abb inutile

PS: c'è già una funzione apposita per l'output compresso tramite gzip che fa uso di ob fornita direttamente da php quindi se non ti serve inserire altro puoi usare direttamente quella