Aller au contenu


Photo

envoyer un fichier zippé par un formulaire


  • Please log in to reply
10 replies to this topic

#1 Amarok II

Amarok II

    NeoAdmin

  • Administrateurs
  • PipPipPipPipPipPip
  • 1 473 Messages :
  • Configuration:Un petit truc en alu avec un grand rectangle lumineux qui affiche des choses qui bougent quand je chatouille un autre truc en alu, là... tout plat.
  • Sexe:Mystère
  • Localisation:Perpignan, France
  • Passions:MacFr bien sûr !

Posté 18 avril 2008 - 19:24

Bonjour,

Je cherche mais ne trouve pas...

Je m'explique :

Je fait une interface d'administration pour un site web qui peut être amené à afficher une galerie de photos.
Le moteur du site est en php-mysql.
idéalement, je voudrais dans un formulaire pouvoir choisir un dossier (et non pas un fichier) ou à défaut un zip d'un dossier, et lors de la validation du formulaire, faire partir ce fichier zip sur le site web dans un dossier temp, le décompacter dans un autre dossier (disons "photos") et lui mettre des droits corrects afin de pouvoir le manipuler plus facilement (optionnel), et finalement virer le .zip initial.

Je précise que mon serveur possède bien la librairie ziplib.

Si quelqu'un peut m'aiguiller un petit peu... :unsure:

Ce message a été modifié par Amarok II - 18 avril 2008 - 19:25 .


MacBook Pro (13", fin 2012)
8Go RAM - 256Go SSD - 1To HD

Technicien certifié ACMT et plein d'autres trucs...

"On peut voir de bien des façons. On peut être aveugle de bien des façons." (Frank Herbert, Dune)

"Tu ne feras point de machine à l'esprit de l'homme semblable." (Frank Herbert, Dune)


#2 freemac

freemac

    Maniaque du clavier

  • Membres
  • PipPipPipPip
  • 550 Messages :
  • Configuration:macbook noir
  • Sexe:Masculin
  • Localisation:Montpellier
  • Passions:La programmation
    Les mangas
    Les westerns

Posté 18 avril 2008 - 21:50

Bonjour,

Je cherche mais ne trouve pas...

Je m'explique :

Je fait une interface d'administration pour un site web qui peut être amené à afficher une galerie de photos.
Le moteur du site est en php-mysql.
idéalement, je voudrais dans un formulaire pouvoir choisir un dossier (et non pas un fichier) ou à défaut un zip d'un dossier, et lors de la validation du formulaire, faire partir ce fichier zip sur le site web dans un dossier temp, le décompacter dans un autre dossier (disons "photos") et lui mettre des droits corrects afin de pouvoir le manipuler plus facilement (optionnel), et finalement virer le .zip initial.

Je précise que mon serveur possède bien la librairie ziplib.

Si quelqu'un peut m'aiguiller un petit peu... :unsure:


Il y a plusieurs voies...
PHP/MAIL : tu as un site pro perso avec ton truc que tu as créé perso pour consulter les mails ? bah tu t'envoies un mail et tu récupère le fichier :)
FTP/PHP : envoyer via un script le contenu du dossier ou le fichier zip sur le ftp, puis lancer wget (télécharger une page php pour en fait l'exécuter), puis écrire "ok c'est fini", avantage : une grande quantité de fichier ne pose pas de soucis de déconnexions.
PHP/AJAX : envoyer les images unes par unes mais pendant qu'on choisi la suivante la première est en cour de upload sur une barre progressive, ce qui fait qu'on a pas le sentiment d'avoir à attendre (c'est beau, ça pète mais faut apprendre ajax ^^')
JAVA/avec contrat douteux : faire un applet java qui sort du sandbox et propose un certificat (créé gratuitement mais écrit "contenu du site incertain, est tu certain de voir continuer sur ce site douteux ?"), sortir du sandbox (bac à sable), ça donne accès au disque dur notamment (c'est plus chiant à programmer (plusieurs phases de compilation : javac, signature logiciel du certificat...), mais peut être plus conviviale, genre gérer automatiquement les échecs, et si compilé en 1.2 ça marche même sur les vieux navigateurs)
Bourrin : Insérer la disquette sur le serveur.

Ce message a été modifié par freemac - 18 avril 2008 - 21:51 .


#3 kronos

kronos

    Macfr addict

  • Membres
  • PipPipPipPipPip
  • 873 Messages :
  • Configuration:PowerPC G5 - 2x2GHz - 4G RAM - OS 10.5.7
    MBP Core Duo 2GHz - 2G RAM - OS 10.5.8
  • Sexe:Masculin
  • Localisation:Gex

Posté 19 avril 2008 - 09:29

Moi, j'aime bien la méthode bourrin. Elle est simple et efficace. Et pas de problème de déconnexion. :whistling:

Bon, OK. Je viens de la jouer à la MacManiac.

Ok, ok, ok. Je sais où est la porte, ne poussez pas. :D

#4 Amarok II

Amarok II

    NeoAdmin

  • Administrateurs
  • PipPipPipPipPipPip
  • 1 473 Messages :
  • Configuration:Un petit truc en alu avec un grand rectangle lumineux qui affiche des choses qui bougent quand je chatouille un autre truc en alu, là... tout plat.
  • Sexe:Mystère
  • Localisation:Perpignan, France
  • Passions:MacFr bien sûr !

Posté 19 avril 2008 - 09:38

Ok, ok, ok. Je sais où est la porte, ne poussez pas. :D


...et n'oublies pas ta disquette, non mais sans blagues sur un Mac mini, une disquette.... pfff! :whistling:

bon, il semble que raisonnablement, je doive m'orienter sur une création d'un .zip manuellement, puis un upload de ce fichier (disons de 2Mo maxi) via un formulaire web vers un dossier de mon serveur. Et ensuite, décompacter ce zip grace à php, et c'est là que j'ai besoin d'aide ! (décompacter, classer, supprimer le zip du serveur, etc).

MacBook Pro (13", fin 2012)
8Go RAM - 256Go SSD - 1To HD

Technicien certifié ACMT et plein d'autres trucs...

"On peut voir de bien des façons. On peut être aveugle de bien des façons." (Frank Herbert, Dune)

"Tu ne feras point de machine à l'esprit de l'homme semblable." (Frank Herbert, Dune)


#5 AliGator

AliGator

    (Trop) Grand Bavard

  • Membres d'honneur
  • PipPipPipPipPipPipPipPipPip
  • 12 338 Messages :
  • Configuration:• MacBook Pro 15" 2,2GHz, 10.6
    • MacMini G4 1,42GHz, 10.5
  • Sexe:Masculin
  • Localisation:Rennes (Bretagne, France)
  • Passions:Piano, Cuisine, Danse (Rock, ...), faire des réponses de 3km

Posté 19 avril 2008 - 15:17

<?php 

		$zip = new ZipArchive; 

	$zip->open('test.zip'); 

	$zip->extractTo('./'); 

	$zip->close(); 

		echo "Ok!"; 

?>
Source : http://fr.php.net/ma...ip.examples.php

Le posteur fou de macfr
Mon blog: Crunchy Development
______________
Devise Shadok : S'il n'y a pas de solution, c'est qu'il n'y a pas de problème...


#6 sigma6

sigma6

    Macfr addict

  • Membres
  • PipPipPipPipPip
  • 960 Messages :
  • Sexe:Masculin
  • Localisation:GVA
  • Passions:Bof...

Posté 22 avril 2008 - 10:06

oyé, bon... je fais pile ce que tu veux pour mon admin alors voilà ma solution et les contraintes qui vont avec.

Quand tu upload un fchier via php, il est toujours uploadé sur le dossier temporaire qui a été configuré par php, ensuite grace a la fonction move_uploaded_file tu peux le "ranger" ou tu veux dans ton serveur.

$tmp = $_FILES['fichier'];

if (move_uploaded_file($tmp['tmp_name'], "truc/bidule/youpi")) {
	 echo "Youpiiiiii";
}


Pour le zip c'est pareil sauf que tu n'utilise pas move_uploaded_file mais une fonction spéciale qui va lire le contenu du zip (situé dans le dossier temp) et copier tout les fichiers qui se trouvent dedans.


function unpackZip($file, $dir) {
	if ($zip = zip_open($file)) {
		while ($zip_entry = zip_read($zip)) {
			$fp = fopen($dir."/".zip_entry_name($zip_entry), "w");
			if (zip_entry_open($zip, $zip_entry, "r")) {
				$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
				fwrite($fp, $buf);
				zip_entry_close($zip_entry);
				fclose($fp);
			}
		}
		zip_close($zip);
	}
	else {
		return false;
	}
	unlink($file);
	return true;
}

$tmp = $_FILES['fichier'];

if (unpackZip($tmp['tmp_name'], "truc/bidule/youpi")) {
	 echo "Youpiiiiii";
}



Mais attention..... comme tu le sais, les mac on pleins de fichiers cachés pour savoir quel type de présentation à le dossier, quels icones, etc... quand tu fais un zip avec BOAMArchiveHelper, le truc intégré d'apple, tu auras un dossier __MACOSX dans ton .zip.... ca c'est naze parce que dedans ya des fichiers cachés qui te créent pleins d'erreurs d'autorisations.. Si le zip vient de windows ca va, moi depuis mon mac j'utilise YemuZip qui permet de ne pas inclure tout ce merdier dans le zip!!


Voilà, j'espère que c'est pas trop compliqué?!? si tu sais pas comment faire le formulaire html je peux toujours te mettre un exemple ;)

Après, comme un fichier zip ca peut vite être lourd, il faut faire attention à la limite d'upload autorisée par php, par défaut je crois que c'est 4Mo....
Puis tu voudras peut-être une progressbar? Mais c'est pour un prochain épisode ;)


Et voilà, j'ai grillé un aligator :whistling:

#7 Didier

Didier

    Maniaque du clavier

  • Membres
  • PipPipPipPip
  • 698 Messages :
  • Configuration:Domicile : Cube
    Travail : Mac Pro - Quad Core Intel Xeon
  • Sexe:Masculin
  • Localisation:Angers
  • Passions:Toutes

Posté 22 avril 2008 - 15:58

Et l'aligator grillé, ça à un peu le goût du poulet... :whistling:
Avant, je ne terminais jamais ma signature. Mais maintenant je…

#8 sigma6

sigma6

    Macfr addict

  • Membres
  • PipPipPipPipPip
  • 960 Messages :
  • Sexe:Masculin
  • Localisation:GVA
  • Passions:Bof...

Posté 22 avril 2008 - 16:34

ouais, il parrait, j'ai jamais pu goûter :ph34r:

#9 BorakLeRouge

BorakLeRouge

    Hamster d'or (dort ?)

  • Membres
  • PipPipPipPipPipPipPip
  • 3 987 Messages :
  • Configuration:Mac Mini Core i7 2019 - 16Go - 2x1To SSD
  • Sexe:Masculin
  • Localisation:Cormeilles en Parisis.rb
  • Passions:Macintosh, Photo, Haute-fidélité, Ski, Roller, Call of Duty, Tactical Ops, Counter Strike, Worms 1

Posté 22 avril 2008 - 17:35

Sauf que le notre est breton : arrière-goût de cidre et de crèpes :)

Je fais mes sauvegardes sur NSA-Cloud !

Au bout de 10 ans, le vieux MacPro vient de laisser sa place à un MacMini i7...


#10 AliGator

AliGator

    (Trop) Grand Bavard

  • Membres d'honneur
  • PipPipPipPipPipPipPipPipPip
  • 12 338 Messages :
  • Configuration:• MacBook Pro 15" 2,2GHz, 10.6
    • MacMini G4 1,42GHz, 10.5
  • Sexe:Masculin
  • Localisation:Rennes (Bretagne, France)
  • Passions:Piano, Cuisine, Danse (Rock, ...), faire des réponses de 3km

Posté 22 avril 2008 - 23:03

Faut bien laisser un peu bosser les autres de temps en temps :P

Bon rien que pour mettre mon grain de sel, je dirais que la méthode de sigma6 est vraiment pas mal, mais :
- tu fais un fclose($fp) que si zip_entry_open a marché, alors que tu as fait le fopen dans tous les cas... pourquoi ne pas mettre le fclose($fp) hors du "if", pour balancer tes ouvertures/fermetures tout à fait symétriquement ??
- Ou alors dans la foulée tu crées aussi un "if" pour vérifier que $fp est valide (que le fopen a marché, cf pb de droits d'écriture etc)
- On peut tout à fait intégrer dans la méthode "unpackZip" de sigma6 un test si le nom du fichier/dossier dans le ZIP est .__MACOS_X voire même s'il commence par un "." tout simplement et plus génériquement : ça évitera sans doute des cas à la c*n :)

Voilà, mais c'est vraiment pour pinailler :D

Le posteur fou de macfr
Mon blog: Crunchy Development
______________
Devise Shadok : S'il n'y a pas de solution, c'est qu'il n'y a pas de problème...


#11 sigma6

sigma6

    Macfr addict

  • Membres
  • PipPipPipPipPip
  • 960 Messages :
  • Sexe:Masculin
  • Localisation:GVA
  • Passions:Bof...

Posté 22 avril 2008 - 23:30

bon, et bien parce que je suis hyper cool, voilà le bout de code que j'utilise personnellement, mais ca me plairais bien que le gator donne son point de vue, je suis toujours ouvert à optimisation ;) d'autant plus que le coup du __MACOSX, j'ai pas trop trouvé de solutions...


function unpackZip($file, $dir) {
	if ($zip = zip_open($file)) {
		while ($zip_entry = zip_read($zip)) {
			if (zip_entry_open($zip,$zip_entry,"r")) {
				$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
				$dir_name = dirname(zip_entry_name($zip_entry));
				if ($dir_name != ".") {
					$dir_op = $dir."/";
					foreach (explode("/",$dir_name) as $k) {
						$dir_op = $dir_op.$k;
						if (is_file($dir_op)) unlink($dir_op);
						if (!is_dir($dir_op)) mkdir($dir_op);
						$dir_op = $dir_op."/";
					}
				}
				$fp = fopen($dir."/".zip_entry_name($zip_entry), "w");
				fwrite($fp, $buf);

				fclose($fp);

				zip_entry_close($zip_entry);
			}
			else {
				return false;
			}
		}
		zip_close($zip);
	}
	else {
		return false;
	}
	unlink($file);
	return true;
}





1 utilisateur(s) en train de lire ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)