2010-12-15 130 views
0

Je construis une application personnalisée pour un client (un photographe pour l'immobilier commercial) en utilisant une configuration PHP/MySql typique. Cette application permettra aux clients de mon client d'accéder aux images qui leur sont attribuées, de les visualiser et de les télécharger.Vous voulez créer une fonctionnalité d'application Web qui permet à un utilisateur de cliquer sur télécharger toutes les images. Besoin de quelques pointeurs

Je dois ajouter l'option permettant à ses clients de cliquer sur «télécharger tout - qualité d'impression» et «télécharger toute résolution Web». Lorsque les images sont téléchargées, elles seront automatiquement sauvegardées dans ces résolutions séparées. Pour vous donner une idée, additionner les images qu'un client voudrait typiquement télécharger, équivaudrait jusqu'à 500MB. Je pense qu'avoir toutes les images compressées à un zip serait la voie à suivre.

Comment suggérez-vous que j'aborde cette question, et si vous connaissez une source qui pourrait m'aider?

Répondre

1

Vous pouvez utiliser PHP Zip

exemple se trouvent ici: http://www.php.net/manual/en/zip.examples.php

OU

Si vous préférez la solution sale, vous pouvez utiliser linux intégré tar fonction, et se combinent avec exec


Je suppose que vous devriez avoir 3 dimensions différentes pour chaque image, et votre zip est seulement mettre l'accent sur la sélection des images avec la dimension correcte à ajouter dans l'archive.

Cependant, ce qui précède n'est pas un problème, vous devriez convaincre vos clients d'une meilleure façon de télécharger ces énormes fichiers, comme utiliser un programme ftp, ou des outils de téléchargement plutôt que via HTTP. trop élevé)

+0

Malheureusement FTP n'est pas une solution élégante. le client veut que son client puisse se connecter via une interface web et avoir accès aux images sous leur porfolio. vous avez mentionné "quelques outils de téléchargement". pourriez-vous clarifier? – Roeland

+0

quelque chose comme [flash get] (http://download.cnet.com/FlashGet/3000-2071_4-10566273.html), où l'utilisateur peut faire un clic droit et ajouter dans la file d'attente de téléchargement, et bien sûr, vous pouvez intégrer la connexion de l'utilisateur vérifier pour éviter d'être téléchargé par un utilisateur non vérifié.) Prenez note sur la vérification des informations d'identification de votre application) – ajreal

0

Je dirais que le zip serait le chemin à parcourir. Utiliser PHP pour compresser les fichiers sélectionnés à la volée et demander à l'utilisateur de les télécharger automatiquement.

Probablement que l'utilisateur clique sur les cases à cocher en regard des images d'un formulaire, les données envoyées à une page de traitement qui crache le fichier ZIP pour l'utilisateur.

cela pourrait aider http://davidwalsh.name/create-zip-php

+1

Quel type de stress ajoute 500Mb d'images à un fichier zip sur un serveur? Je ne veux pas que l'utilisateur clique sur le téléchargement, puis attendez 2 minutes avant que le serveur crache un zip. – Roeland

+0

Tout dépend de la bande passante sortante de la connexion au serveur, de la vitesse et de la mémoire du processeur du serveur en termes de vitesse de fermeture des fichiers et de la quantité de trafic que vous anticipez. – mmundiff

1

Vous ne devriez pas générer un fichier ZIP à la volée pour chaque téléchargement. Ce serait très inefficace.

Lorsque des photos sont téléchargées, créez deux nouveaux fichiers ZIP à partir des images (un pour chaque taille). Ajouter deux colonnes à votre table, en pointant vers le plus petit ZIP, et l'autre pointant vers le plus grand. Juste pointez vos deux liens là.

+0

Probablement juste, après avoir relu la question il n'y a pas de choix des fichiers à télécharger, il suffit de les télécharger tout ce que je suppose en haute résolution ou web. +1 – mmundiff

+0

Je pensais à cette route, cela nécessite essentiellement le double de l'espace de stockage sur le serveur. Je suppose que ce serait le seul inconvénient. le client pense à avoir jusqu'à 2tb de données .. de sorte que ce serait effectivement 4tb. – Roeland

0

Utilisez ZipArchive, le stocker dans un fichier temporaire puis le sortir:

$path = '/path/to/your/images'; 

// search for files matching *.png; *.gif; *.jpg 
$files = glob($path.'/*.{png,gif,jpg}', GLOB_BRACE); 

// create temporary filename 
$tmp = tempnam(sys_get_temp_dir(), 'images'); 

// create zip 
$zip = new ZipArchive; 
$zip->open($tmp, ZIPARCHIVE::CREATE); 
foreach ($files as $file) { 
    // may want to manipulate $file to remove the directory prefix 
    $zip->addFile($file); 
} 
$zip->close(); 

// output as an attachment 
header('Content-Type: application/zip'); 
header('Content-Disposition: attachment;filename=foo.zip'); 
readfile($tmp); 

Bien sûr, si vous avez vraiment 500Mo d'images, cela prendra un certain temps. Il est probablement préférable de compresser vos fichiers à l'avance (un cron ou sur chaque téléchargement).

+0

Quand vous dites un certain temps, parlons-nous 30 secondes .. 20 min .. 5 secondes? – Roeland

+0

Vous devriez savoir ... Cela dépend en fait du matériel (processeur, mémoire, disques) et de la charge du serveur. – netcoder