Det verkar som att jag äntligen har lyckats lösa detta otroligt frustrerande problem! Tänkte jag skulle skriva här vad vi gjorde, ifall nån får samma problem senare.
Efter mycket om och men lyckades vi lista ut att felet uppstod när PHP skickar ut filerna. Det verkar som att när servern var högt belastad blandade den ibland ihop zip- och gif-filer. Något med MIME-typer, alltså.
Lösning:
Vi la in följande i php.ini:
Kod:
zend.zel_compatibility_mode = Off;
zlib.output_compression = Off;
max_input_time = 60;
default_mimetype = "text/html";
Redan det gav en enorm förbättring, men vid ett tillfälle (kan ha berott på något annat) fick vi trasiga filer igen, så vi bytte ut...
Kod:
$fp=fopen("$filevault/$filename","r");
print fread($fp,filesize("$filevault/$filename"));
fclose($fp);
...i själva PHP-scriptet till:
Kod:
$fp=fopen("$filevault/$filename","rb");
fpassthru($fp);
fclose($fp);
Sedan dess har jag inte lyckats åstadkomma en enda korrupt nedladdning. Det verkar även funka bra för kunderna. Yay!

Det här är överlägset det jobbigaste problemet jag har haft sen jag startade hemsidan 1997, så det är minst sagt skönt att det är löst.