begin process at 2012 05 27 20:45:38
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > UPLOAD AND ZIP YOUR FILES

UPLOAD AND ZIP YOUR FILES


 Information sur la source

Note :
9,67 / 10 - par 3 personnes
9,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Niveau :Débutant Date de création :27/01/2005 Date de mise à jour :28/01/2005 13:53:11 Vu / téléchargé :8 094 / 698

Auteur : malik7934

Ecrire un message privé
Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
ok, une source à 4 sous pour uploader un fichier sur votre serveur et qu'il soit sauver dans un zip à la manière de codes-sources: avec d'autres fichiers "publicitaires". Ici il s'agit d'un fichier ReadMe.txt. Un lien au passage est créer pour forcer le download (afin de vérifier).

Source

  • // -- fichier up_and_zip.php
  • <?php
  • function getFileName($fichier) // permet de récupérer le nom d'un fichier sans son extension
  • {
  • $pos = strrchr($fichier, '.'); // on regarde où il y a le point
  • $pos = strlen($pos);
  • $pos2 = strlen($fichier);
  • $pos3 = $pos2 - $pos;
  • $fichier = substr($fichier, 0, $pos3); // et on vire tout à partir de là
  • return $fichier;
  • }
  • $submit = (isset($_POST['submit']))?$_POST['submit']:NULL;
  • if($submit === NULL){
  • $max_size = 50; // 50kb. Mettez ce que vous voulez ici!
  • ?>
  • <form enctype="multipart/form-data" action="<?php echo $_SERVER['SCRIPT_NAME'];?>" method="post">
  • <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo 1024*$max_size;?>" />
  • Envoyez ce fichier : <input name="userfile" type="file" />
  • <input type="submit" name="submit" value="Envoyer le fichier" />
  • </form>
  • <?php
  • } // ok, là c'était le formulaire... ras...
  • else {
  • $uploaddir = $_SERVER['DOCUMENT_ROOT']."/uploads/"; // on fixe l'adresse du dossier uploads
  • $userfile = $_POST['userfile']; // on récupère le chemin du fichier à uploader
  • if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) {
  • // on upload dans le dossier uploads
  • echo "Le fichier ".$_FILES['userfile']['name']." est valide et a été téléchargé avec succès.<br />";
  • // si ça a marché, on va le zipper avec pclzip
  • // plus d'infos sur www.phpconcept.net/pclzip
  • include_once('libs/pclzip.lib.php');
  • $fich = $_FILES['userfile']['name'];
  • $fn = getFileName($fich);
  • chdir('uploads'); // répertoire courant
  • $archs = $fn.".zip";
  • $archive = new PclZip($archs); // archive en création
  • $listing = $_FILES['userfile']['name'];
  • $v_list = $archive->create("ReadMe.txt,".$listing); // création de l'archive avec son contenu: ReadMe.txt et le fichier
  • unlink($fich);
  • if ($v_list == 0) {
  • die("Error : ".$archive->errorInfo(TRUE));
  • }
  • else{
  • echo "Il a été zippé et a maintenant comme nom <b>$fn.zip</b>.<br />";
  • echo "Il est accessible en cliquant sur ce <A HREF=\"download.php?fichier=$archs\">lien</A><br />"; // et on peut checker le résultat
  • }
  • } else { // en cas d'échec au zippage, traitement des erreurs
  • echo "Le fichier n'a pas été téléchargé: ";
  • $size = $_FILES['userfile']['size'];
  • switch ($_FILES['userfile']['error']){
  • case "1": echo " fichier trop volumineux."; break;
  • case "2": echo " fichier trop volumineux."; break;
  • case "3": echo " fichier n'a été que partiellement téléchargé"; break;
  • case "4": echo " aucun fichier n'a été téléchargé"; break;
  • }
  • }
  • }
  • ?>
  • // -- fichier donwload.php
  • <?php
  • $fichier = $_GET['fichier'];
  • $path = "uploads/$fichier";
  • $type = "application/rar";
  • if (isset($path) and file_exists($path))
  • {
  • header("Content-type: application/force-download"); // pour forcer le téléchargement d'un fichier
  • header("Content-Disposition: attachment; filename=$fichier");
  • readfile("$path");
  • }
  • else{
  • echo "Le fichier $fichier n'existe pas!";}
  • ?>
// --   fichier up_and_zip.php

<?php

function getFileName($fichier) 	// permet de récupérer le nom d'un fichier sans son extension
{

$pos = strrchr($fichier, '.');	// on regarde où il y a le point
$pos = strlen($pos);		
$pos2 = strlen($fichier);		
$pos3 = $pos2 - $pos;
$fichier =  substr($fichier, 0, $pos3); // et on vire tout à partir de là
return $fichier;
}

$submit = (isset($_POST['submit']))?$_POST['submit']:NULL;
if($submit === NULL){
    
    $max_size = 50; // 50kb. Mettez ce que vous voulez ici!
?>


<form enctype="multipart/form-data" action="<?php echo $_SERVER['SCRIPT_NAME'];?>" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo 1024*$max_size;?>" />
Envoyez ce fichier : <input name="userfile" type="file" />
<input type="submit" name="submit" value="Envoyer le fichier" />
</form>
<?php
} // ok, là c'était le formulaire... ras...
else {

    $uploaddir = $_SERVER['DOCUMENT_ROOT']."/uploads/"; // on fixe l'adresse du dossier uploads
    $userfile   = $_POST['userfile']; // on récupère le chemin du fichier à uploader


    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) { 
	// on upload dans le dossier uploads
       echo "Le fichier ".$_FILES['userfile']['name']." est valide et a été téléchargé avec succès.<br />";
	// si ça a marché, on va le zipper avec pclzip
	// plus d'infos sur www.phpconcept.net/pclzip

        include_once('libs/pclzip.lib.php');
        $fich = $_FILES['userfile']['name'];
        $fn = getFileName($fich);
    
        chdir('uploads'); // répertoire courant
    
        $archs = $fn.".zip";
        $archive = new PclZip($archs); // archive en création
    
        $listing = $_FILES['userfile']['name'];
        $v_list = $archive->create("ReadMe.txt,".$listing); // création de l'archive avec son contenu: ReadMe.txt et le fichier

        unlink($fich);

            if ($v_list == 0) {
            die("Error : ".$archive->errorInfo(TRUE));
            }
    else{
        echo "Il a été zippé et a maintenant comme nom <b>$fn.zip</b>.<br />";
        echo "Il est accessible en cliquant sur ce <A HREF=\"download.php?fichier=$archs\">lien</A><br />"; // et on peut checker le résultat
    }


} else { // en cas d'échec au zippage, traitement des erreurs
        echo "Le fichier n'a pas été téléchargé: ";
    $size = $_FILES['userfile']['size'];
        switch ($_FILES['userfile']['error']){
        case "1": echo " fichier trop volumineux."; break;
        case "2": echo " fichier trop volumineux."; break;
        case "3": echo " fichier n'a été que partiellement téléchargé"; break;
        case "4": echo " aucun fichier n'a été téléchargé"; break;
        }
    }

}


?>

// --   fichier donwload.php

<?php

$fichier = $_GET['fichier'];
$path = "uploads/$fichier";
$type = "application/rar";
if (isset($path) and file_exists($path))
{
    header("Content-type: application/force-download"); // pour forcer le téléchargement d'un fichier
    header("Content-Disposition: attachment; filename=$fichier");
    readfile("$path");
}
else{
echo "Le fichier $fichier n'existe pas!";}

?>

 Conclusion

Ce qu'il faut faire...
- créer un dossier uploads avec les droits 777 (ainsi le fichier peut écrire dedans)
- y mettre un fichier ReadMe.txt (y écrire n'importe quoi, c'est pour essayer)
- créer un dossier libs et y mettre pclzip.lib.php ou modifier la ligne "include_once('libs/pclzip.lib.php');" La librairie est dans le zip en annexe

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

28 janvier 2005 11:15:33 :
ajout de commentaire et de unlink pour effacer le fichier source (oops!)
28 janvier 2005 12:09:51 :
Après réflexion, prise en compte de la remarque de eXon ;o)
28 janvier 2005 12:10:56 :
ooops, y avait un peut trop de "=" dans ($submit === NULL) !
28 janvier 2005 13:53:11 :
ben visiblement, fallait bien trois "="!

 Sources du même auteur

Source avec Zip Source avec une capture EXÉCUTER UN SCRIPT AU-DELÀ DU TIMEOUT DE PHP
Source avec une capture SAUVEGARDE AUTOMATISÉE DE VOS BASES DE DONNÉES
SAVOIR QUI CONNAÎT QUI DANS UN FORUM/CHAT/...
Source avec une capture CACHER UNE SIGNATURE DANS UNE IMAGE
NOUVEAUX MESSAGES SUR YAHOO MAIL

 Sources de la même categorie

SUPPRESSION AUTOMATIQUE DES FICHIERS RAW ORPHELINS APRÈS UN ... par malokaff
UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
FONCTION RECURSIVE DE DOSSIERS par tefa24600
Source avec Zip CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO...... par genetApt151

Commentaires et avis

Commentaire de jaco13 le 28/01/2005 10:37:32

Ton programme a l'air d'être bien mais pense aux débutants, tes explications finales sont faites pour des "pro" et sont inexploitables pour beaucoup d'entre nous!

Commentaire de malik7934 le 28/01/2005 11:09:28

Salut,

Ok, je vais corriger sous peu... d'autant que mon code oublie quelque chose d'imprtant: il n'efface pas le fichier non-zippé du serveur! Du coup, y a plus d'intérêt!

Je m'empresse de mettre à jour ;o)

Commentaire de malik7934 le 28/01/2005 11:17:17

Bon ben jaco13, là y a tout ce qu'il te faut j'espère!

Commentaire de eXon le 28/01/2005 11:39:02

Tu devrais codé avec ton error_reporting à E_ALL parce que tu as fait une petite erreur:
$submit = $_POST['submit'];
if (!($submit)){  
    $max_size = 50; // 50kb. Mettez ce que vous voulez ici!

à remplacer par:

$submit = (isset($_POST['submit']))?$_POST['submit']:NULL;
if($submit === NULL){
    $max_size = 50; // 50kb. Mettez ce que vous voulez ici!

Commentaire de malik7934 le 28/01/2005 11:41:27

euh... tu m'expliques ce que ça change au schmilblick?

Commentaire de eXon le 28/01/2005 13:49:15

Je te conseil de remettre if($submit === NULL) c'est une comparaison par objet. Donc avec if($submit === NULL il va retourné true si c'est NULL mais pas s'il est vide, quand est-ce qu'avec == il va retourné true s'il est vide aussi.

Commentaire de malik7934 le 28/01/2005 13:52:36

ah bon... je connaissais pas le triple égal! Je corrige et je prends note,
Thanx!

Commentaire de Anthomicro le 28/01/2005 18:28:42

Salut ;-)

Tu peux remplacer ta fonction getFileName() par celle-ci :

function getFileName($fichier)
{
         $fichier = basename ($fichier);
         return substr($fichier, 0,strlen($fichier)-4);
}

Ensuite les multiples ouvertures/fermetures des tags c'est crade. Pour ce qui est du ===NULL ou ==NULL, tu peux remplacer ça :

$submit = (isset($_POST['submit']))?$_POST['submit']:NULL;
if($submit === NULL){
    
    $max_size = 50; // 50kb. Mettez ce que vous voulez ici!

par ça :

if(!isset($_POST['submit'])){
    
    $max_size = 51200; // 50kb. Mettez ce que vous voulez ici!
echo '<form enctype="multipart/form-data" action="',$_SERVER['SCRIPT_NAME'],'" method="post">
<p><input type="hidden" name="MAX_FILE_SIZE" value="',$max_size,'" />
Envoyez ce fichier : <input name="userfile" type="file" />
<input type="submit" name="submit" value="Envoyer le fichier" /></p>
</form>';

}

//Ensuite dans le else toujours vérifier la taille du fichier, le html seul ne suffit pas et quelqu'un de mal intentionné pourra envoyer 5 Mo si il veut, malgré ta limite.
else
{
        $clef=array_keys($_FILES);
if($_FILES[$clef[0]]['size']>$max_size)
{
            //taille trop grosse
        }
}


a ++

Commentaire de malik7934 le 29/01/2005 06:38:25

Tcho,

Faut que t'apprennes à éviter le mot "crade" Anthony...

"Ensuite dans le else toujours vérifier la taille du fichier, le html seul ne suffit pas et quelqu'un de mal intentionné pourra envoyer 5 Mo si il veut, malgré ta limite."

F-A-U-X! PHP t'empêche d'uploader un fichier de plus de 2MB, donc pas de soucis de ce côté là! Regarde dans phpinfo(4) la limite de "upload_max_filesize"

Maintenant, entre ta variante et celle d'eXon pour $submit, je préfère la sienne, je la trouve plus "complète". Mais chacun fait comme il veut ;o)

Pour getFileName, you're right... pour autant que l'extension ait 3 caractères, ce qui est la majorité des cas, je crois.

Commentaire de Anthomicro le 29/01/2005 12:05:46

"Ensuite dans le else toujours vérifier la taille du fichier, le html seul ne suffit pas et quelqu'un de mal intentionné pourra envoyer 5 Mo si il veut, malgré ta limite."

F-A-U-X! PHP t'empêche d'uploader un fichier de plus de 2MB, donc pas de soucis de ce côté là! Regarde dans phpinfo(4) la limite de "upload_max_filesize""

Arf il va contester chacun de mes messages...

On va donc répondre point par point.

Tout d'abord effectivement par défaut l'upload max est à
2 Mo. Et alors ? il n'en veut que  50 Ko. A partir du moment où la limite souhaitée est inférieure au max_upload_size de php tu DOIS verifier la taille du fichier. (1er argument cassé)

On passe au suivant :

"[blabla] d'eXon pour $submit, je préfère la sienne, je la trouve plus "complète". Mais chacun fait comme il veut ;o)"

Oui, tu la trouves plus chargée, je suis d'accord avec toi.

Ensuite pour verifier l'existence d'une variable on n'utilise pas if($variable===NULL) mais if(isset($variable))

M'enfin bon je t'ai prouvé l'autre fois avec le XHTML que j'avais raison, j'ai pas envie de recommencer pour ça...

Ce qui m'arrangerait c'est que tu arrêtes d'essayer de me casser juste parce que j'ai critiqué je ne sais plus quoi sur ta manière de coder.

a +

Commentaire de malik7934 le 29/01/2005 13:45:53

"Ce qui m'arrangerait c'est que tu arrêtes d'essayer de me casser juste parce que j'ai critiqué je ne sais plus quoi sur ta manière de coder."

Crois pas ça... je te porte pas dans mon coeur, ça c'est certain, mais j'ai pas 12 ans d'âge mental non plus!

Concernant le XHTML, bien que je ne pratique pas bien encore, je me suis rallié à ta cause.

Ok pour la vérif si tu veux qqch de moins que le max_upload_size, effectivement.

Ensuite, je n'ai jamais dit "chargée", mais "complète". Merci de ne pas transformer mes paroles.

Commentaire de malik7934 le 29/01/2005 13:49:49

Encore un truc:

"Ensuite pour verifier l'existence d'une variable on n'utilise pas if($variable===NULL) mais if(isset($variable))"

... si tu regardes un peu mieux le code que m'a suggéré eXon, c'est

$submit = (isset($_POST['submit']))?$_POST['submit']:NULL;
if($submit === NULL)

... le isset à bien lieu ;o)

Commentaire de JulioDelphi le 29/01/2005 21:08:54 administrateur CS

je ne connaissais pas non plus le === ! merci du tuyau
Seul les commentaires constructifs ayant rapport a le source sont les bienvenus =)

Commentaire de eXon le 30/01/2005 05:11:42

Pour ceux qui veulent plus en savoir sur le triple égal (===), c'est très bien expliquer sur le site de PHP: http://www.php.net/manual/fr/language.oop5.object-comparison.php

Commentaire de emiilie le 26/04/2005 11:11:10

bonjour,
l'upload ça marche bien, c'est sur! mais je me posais la question si c'etait possible de le faire sans passer par un
<input name="userfile" type="file" />
dans la partie html ?
autrement dit dans le cas ou je sais a l'avance ou se trouve le fichier et que je veux faire une methode disont automatique !

merci

Commentaire de pehel le 29/04/2005 21:42:55

Une petite amélioration de getFileName
function getFileName($fichier)
{
         $fichier = basename ($fichier);
         return substr($fichier,0,-strlen(strrchr($fichier,'.')));
}

histoire de couper les cheveux en quatre.

Mais où serait le plaisir sinon.

Commentaire de Unknownn le 05/06/2005 19:37:55

Bonjour à tous,

Merci pour cette source. Je suis très interréssé et à vrai dire, je me suis peut-être enregistré pour vous remercier :p

Il faut améliorer le code, ça c'est sûr mais en attendant que je trouve des solutions à mes problèmes, je voulais vous faire remarquer qu'il était dommage qu'on ne fasse pas de rappel quand le fichier existe déjà. Autrement dit, il faudrait éviter d'écraser sans confirmation.

Encore merci,
Unknownn

PS: Je suis débutant et il n'est pas facile de reconnaître à première vue les défauts :p lol

Commentaire de Unknownn le 05/06/2005 22:31:28

Cette fois-ci c'est bonsoir lol !

Voilà, j'ai revu le code et j'ai apporté deux nouvelles fonctions : Celle d'une part d'accepter un certain type de fichier et d'autre part d'afficher un message d'erreur si un fichier zip porte déjà le même nom.

//A mettre après le deuxième <?php

} else if(!in_array( substr(strrchr($_FILES['userfile']['name'], '.'), 1), $extensions_ok)) {
echo "Veuillez s&eacute;lectionner un fichier de type jpg ou jpeg !.<br />";

} else if(file_exists("zipupload/".getFileName($_FILES['userfile']['name']).".zip")) {
echo "Attention ! Un autre fichier porte d&eacute;j&agrave; ce nom ! Veuillez renommer le votre.";


Et avant tout cela, il faut créer $extensions_ok grâce à :
$extensions_ok = array('jpg', 'jpeg');
Bien entendu, vous pouvez la modifier mais n'oubliez pas de rapporter les types de fichier sur le message d'erreur ! lol

Voilà ! J'ai récupéré ces codes sur un autre script puis apporté mes propres modifications.

Amicalement,
Unknownn ;)

_______________
Participer, c'est une autre manière de remercier

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales