Bonjour,

Pour simplifier le téléchargement de groupe de fichiers aux utilisateurs, j'utilise un petit script PHP créant dynamiquement une archive ZIP avant de la mettre en téléchargement. Ce qui est un procedure assez courante.
Lorsque le script doit générer une archive volumineuse cela prend un temps fou du fait d'un quota d'E/S très bas (1.5Mo/s sur hébergement mutuallisé). Mais le plus gênant pour moi c'est que pendant la durée de génération qui dépasse facilement la minute, le site ne répond presque plus.

Je souhaiterais donc "ralentir" davantage le script. En fait je voudrais limiter la lecture écriture sur le disque.

Mon script PHP se base sur le code suivant.

$zip = new zipArchive();
if ($zip->open($destinationFile, ZIPARCHIVE::CREATE) !== true)
    die('Error...');

foreach($documents as $docName => $docURI)
    $zip->addFile($docURI, $docName);

Un premier bout de solution consiste à placer dans la boucle d'ajout des fichiers dans l'archive un sleep().
De cette manière je peux relâcher l'utilisation des ressources partiellement entre les ajouts.

Le souci c'est que cette solution n'est pas complète. Si dans l'archive je dois ajouter un fichier de queslques dizaines de Mo, alors durant l'ajout (quelques dizaines de secondes), le script utilisera toute la bande passante disque. Me bloquant/limitant fortement l'accès au site.

J'ai assez peu d'espoir de trouver une solution mais ne sait-on jamais.
Il s'agirait en fait de limiter plus globalement l'utilisation disque.
Pour rappel j'utilise un hébergement mutualisé et j'ai donc très peu de possibilité de manœuvre.

1 réponse


Bonjour,

De quel quota d'E/S tu parle exactement ? On est bien d'accord que le téléchargement débute une fois que la création de l'archive est terminé ?