1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
| <?php
/*
VOIR PLUS D'INFORMATIONS ET POSSIBILITES DANS "UploadAjaxABCI_Php_Load.php"
*/
// Vous devez vérifier l'existence de ces dossiers ou changer ces adresses
/*------------------------------------------------------*/
$dossier_destination = '../Destination_Upload/';
$dossier_temporaire = '../Upload_Temp/';
/*------------------------------------------------------*/
session_start();
// maximise les possibilités de reprise d'upload en cas d'arrêt intempestif.
ignore_user_abort(true);
header('Content-type: text/html; charset=UTF-8');
/* NOTE : Si vous avez ajouté des champs input dans votre formulaire, utilisez la fonction urldecode() pour récupérer vos variables ex : $ma_variable = urldecode($_POST['ma_variable']) ;*/
// Charge la classe php d'upload
require 'UploadAjaxABCIServeur.php';
$up = new UploadAjaxABCIServeur($dossier_destination, $dossier_temporaire);
// $up->setModeDebug(); // ----- décommenter cette ligne pour avoir des retours serveur en phase de debuggage ------
// getUniqidForm() renvoie l'identifiant de formulaire
$unidid_form = $up->getUniqidForm();
// Il est conseillé de ne pas supprimer cette ligne car c'est le token qui assure que ce script est appelé depuis le formulaire. Permet également de renvoyer un message en cas de timeout du serveur, connexion perdue ou non valide.
/*if(!(isset($unidid_form,$_SESSION['UploadAjaxABCI'][$unidid_form]))) $up->exitErreurFichier("Connexion non valide ou perdue. Rafraîchissez la page et recharger votre fichier, si celui-ci dispose d'une sauvegarde automatique elle sera utilisée.");
*/
// getFragment() retourne true si un fichier (ou un fragment de fichier) est joint au formulaire, sinon false
$fichier_en_cours = $up->getFragment();
if($fichier_en_cours)
{
// On peut récupérer le nom originel du fichier avec getFichierNomOriginel();
$nom_fichier_originel = $up->getFichierNomOriginel();
$extensions_autorisees = array('jpg','jpeg','png','mp4','avi','mpg','m2ts','mkv','flv','mp3'); //mettre les extensions autorisées en minuscules, les variantes en majuscules sont inutiles. Pensez à utiliser conjointement l'option de configuration javascript ".config.extensions_autorisees" ce qui permettra une information visiteur plus rapide.
// ATTENTION : danger potentiel si un tableau vide (comme ci-dessous pour les besoins de la démo) est passé à la fonction (= pas de vérification des extensions)
$extensions_autorisees = array();
$verif_extension = $up->VerifExtensions($nom_fichier_originel,$extensions_autorisees);
if($verif_extension == false)
{
// Utilisez la fonction "exitErreurFichier ($value)" pour sortir du script en ajoutant un message qui sera concaténé au statut "info.status.erreur" de la classe javascript et envoyé dans le bloc html ayant la classe "UpAbci_status"
$up->exitErreurFichier('Extension du fichier non valide.');
}
// Pour vérification des doublons sur le serveur, on récupère la destination du fichier avec "getFichierDestination()" qui retourne "$adresse_relative.$dossier_destination renseigné dans l'initialisation de la classe.$fichier nettoyé"
$destination_fichier = $up->getFichierDestination();
// Plutôt que de renommer le fichier en cas de doublon comme je le fais plus loin avec la fonction "RenommeDoublon()", on pourrait sortir du script avant d'employer la fonction "Upload()" et envoyer un message d'erreur en faisant :
/*
if(is_file($destination_fichier))
{
$up->exitErreurFichier('Ce fichier existe déjà.');
}
*/
// Si aucune vérification ni renommage n'est fait, les fichiers du serveur ayant le même nom que les fichiers téléchargés seront écrasés.
// INDISPENSABLE : on doit utiliser la fonction "Upload()" pour réaliser le processus de téléchargement
$up->Upload();
// Le processus d'upload est dissocié de celui du transfert, pour permettre de traiter le fichier complet (par exemple pour faire des redimensionnements d'images en php) avant de le déplacer vers son emplacement définitif. La fonction "getFichierComplet()" qui doit être utilisée après la fonction "Upload()", retourne l'adresse du fichier temporaire lorsqu'il est complet, sinon false.
$fichier_complet = $up->getFichierComplet();
/* Par défaut la fonction "RenommeDoublon($destination_fichier)" ajoute un identifiant unique (uniqid) au nom des fichiers en cas de doublon avec des fichiers de même nom sur le serveur. Avec un second argument optionnel quelconque (ex : $up->RenommeDoublon($destination_fichier,'incr');) le nom des fichiers sera incrémenté. Un troisième argument optionnel casse sensivitive est également disponible, mais ne l'utilisez qu'en connaissance de cause et sur des serveurs casse sensitive (ne PAS utiliser sur les serveurs WINDOWS).*/
if($fichier_complet != false)
{
// la fonction de renommage est un peu gourmande en ressources (notamment si on utilise l'option d'incrémentation). Inutile de l'utiliser pour chaque fragment traité par ce script, d'où la condition "if($fichier_complet != false)" qui permet de ne l'utiliser qu'une fois le fichier complet)
$destination_fichier = $up->RenommeDoublon($destination_fichier);
// INDISPENSABLE : on utilise la fonction "Transfert()" après la fonction "Upload()", avec comme argument optionnel la destination du fichier. Retourne true en cas de succès, sinon false. la fonction "Transfert()" déplace le fichier temporaire de sauvegarde vers son emplacement définitif et supprime le cookie de sauvegarde identifiant ce fichier.
$transfert = $up->Transfert($destination_fichier);
if($transfert)
{
//Si l'on doit indiquer les droits d'accès du fichier, par exemple 604, on pourrait faire
/*
if(!@chmod($destination_fichier,0604))
{
$up->exitErreurFichier("Echec de la configuration des droits d'accès du fichier");
}
*/
// On souhaite afficher un message textuel si le fichier a été renommé
$nom_final = pathinfo($destination_fichier, PATHINFO_FILENAME);
$extension_fichier = pathinfo($destination_fichier, PATHINFO_EXTENSION);
$nom_final = trim($extension_fichier) != '' ? $nom_final.'.'.$extension_fichier : $nom_final;
if ($nom_fichier_originel != $nom_final)
{
$up->addStatusOkAjax("renommé ".$nom_final);
}
if($up->getFichierOk())
{
$nom_fichier_original_1 = filter_input(INPUT_POST, 'UpAbci_fichier_nom');
$nom_fichier_original = rawurldecode($nom_fichier_original_1);
try
{
$bdd = new PDO('mysql:host=db574318964.db.1and1.com;dbname=db574318964', 'dbo574318964', 'perpignan66');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
// On ajoute une entrée dans la table jeux_video
$bdd->exec('INSERT INTO contenu_video(contenu_lien,ref_gite) VALUES(\''.$nom_fichier_original.'\', \''.$_POST['gite'].'\')');
$bdd_ok = true;
if ($bdd_ok == true) {
// Utilisez la fonction "addStatusOkAjax($value)" si vous souhaitez envoyer des messages qui seront concaténés au statut ".info.status.ok" (de la classe javascript) qui renseigne le bloc html ayant la classe "UpAbci_status" dans la ligne d'information du fichier. Par exemple :
$up->addStatusOkAjax(", enregistrement en bdd ok.");
// affichera "Téléchargement ok, enregistrement en bdd ok." (si vous n'avez pas modifié la valeur de info.status.ok)
}
// Dans le cas du formulaire n°5 le message javascript "info.status.ok" a été configuré vide. On souhaite uniquement afficher un message textuel si le fichier a été renommé
if (isset($destination_fichier,$nom_input,$nom_fichier_originel) && $nom_input == 'upload5')
{
// On ne doit pas utiliser la variable "$nom_fichier_nettoye" précédemment définie car le nom du fichier peut être modifié en cas de doublon sur le serveur puisque j'utilise $up->RenommeDoublon() plus haut.
$nom_final = pathinfo($destination_fichier, PATHINFO_FILENAME);
$extension_fichier = pathinfo($destination_fichier, PATHINFO_EXTENSION);
$nom_final = trim($extension_fichier) != '' ? $nom_final.'.'.$extension_fichier : $nom_final;
if ($nom_fichier_originel != $nom_final)
{
$up->addStatusOkAjax("renommé ".$nom_final);
}
}
}
}
}
}
// On peut aussi retourner des informations dans le bloc html ayant la classe "UpAbci_infos_form". Ici je choisi de faire afficher un message si aucun fichier n'est joint lors de l'envoi du formulaire en utilisant la fonction "addInfoFormAjax ($value)"
if (!$fichier_en_cours)
{
$up->addInfoFormAjax('Aucun fichier traité');
}
// *INDISPENSABLE dans tous les cas : Envoi des informations nécessaires pour terminer le script javascript avec "exitReponseAjax()"
$up->exitReponseAjax();
?> |
Partager