Upload and zip your files

Soyez le premier à donner votre avis sur cette source.

Vue 9 455 fois - Téléchargée 804 fois

Description

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 / Exemple :


// --   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

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Unknownn
Messages postés
5
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
4 juillet 2005
-
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électionner un fichier de type jpg ou jpeg !.
";

} else if(file_exists("zipupload/".getFileName($_FILES['userfile']['name']).".zip")) {
echo "Attention ! Un autre fichier porte déjà 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
cs_Unknownn
Messages postés
5
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
4 juillet 2005
-
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
pehel
Messages postés
2
Date d'inscription
vendredi 29 avril 2005
Statut
Membre
Dernière intervention
30 avril 2005
-
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.
cs_emiilie
Messages postés
37
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
17 août 2005
-
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

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
cs_eXon
Messages postés
167
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
8 avril 2007
1 -
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.