Upload de fichiers via PHP
Bonjour à toutes et à tous !
Je développe actuellement une plate-forme de téléchargement à destination d'un client (l'entreprise dans laquelle je travaille). Dans l'interface d'administration, le but est de pouvoir envoyer des fichiers via un input de type "file" dans un dossier pour pouvoir les afficher côté utilisateur et ainsi les télécharger.
Or, jusqu'à présent, impossible d'envoyer des fichiers de plus de 3 Mo alors que le débit maximum donné avec mon hébergement est de 64 Mo. Aussi je requiers votre aide pour m'aider à voir là ou mon code cafouillerait (je tiens à prévenir que je reste un débutant dans le domaine)
L'action se déroule dans trois fichiers : une page admin.php dans laquelle se trouve le formulaire d'envoi des fichiers ainsi qu'une page Ajaxfichiers.php dans laquelle l'upload est effectuée :
Code admin.php :
Code:
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
|
<?php
include("Ajaxfichier.php");
?>
<img alt="Nature" title="Nature" src="css/img/NatureBer.jpg" class="adminimg"/>
<div class="formulaire">
<form method="POST" action="" enctype="multipart/form-data" id="formFichier">
<!-- Pour ajouter un fichier -->
<div class="fichier">
<label for="fichier">Ajouter un fichier (100Mo Max)</label></br>
<input type="hidden" name="MAX_FILE_SIZE" value="104857600"/>
<input type="text" class="chemin" id="chemin"/>
<input type="file" name="fichier[]" id="fichier" multiple="multiple"/>
</div>
</br>
<!-- Bouton d'envoi -->
<input class="valid" type="submit" name="val" value="Envoyer" />
</form>
<div class="messageFichier"> </div>
<div class="affiche"></div>
<div class="download"></div>
<?php
$dir= "./fichiers/";
/******** Fonction pour supprimer des fichiers *********/
function deletefile($file) {
if ($file != "") {
unlink($file); // On efface.
}
}
// Si on demande à supprimer, alors on efface le fichier
if (!empty($_GET['action']) and $_GET['action'] == "suppr") {
//var_dump($_GET);
deletefile($dir.$_GET['p']);
header('Location: admin');
}
/******** Fonction pour lire et afficher les fichiers uploadés *********/
$dossier = "./fichiers/";
$repertoire = opendir($dossier); // On définit le répertoire dans lequel on souhaite travailler.
/******** Fonction pour pagination des fichiers *********/
function pagination() {
$filesCount = glob("./fichiers/*.*");
$nbfiles = count($filesCount);
$pagination = "";
//echo $nbfiles;
if ($nbfiles > 5) {
$nbperpage = 5;
// On définit le nombre de page à créer
$nbpages=ceil($nbfiles/$nbperpage);
// On fait une boucle pour afficher la pagination
if($_GET["p"] > 1) {
$pagination.="<a class='Lienpagination' href='admin-". ($_GET["p"]-1) ."'><</a> ";
}
for ($i =1; $i <= $nbpages; $i++) {
$pagination .="<a class='Lienpagination' href='admin-". $i ."'>". $i ."</a> ";
}
if($_GET["p"]<$nbpages) {
$pagination.="<a class='Lienpagination' href='admin-". ($_GET["p"]+1) ."'>></a> ";
}
}
return $pagination;
}
// Vérification de l'existance du dossier
if (is_dir($dir)) {
// Vérification du contenu
if ($dossier = opendir($dir)) {
// Affichage de l'entête du tableau
$begintab = "
<div class='tabetform'>
<table>
<thead>
<tr>
<th class='hand'>Nom du fichier</th>
<th class='hand'>Taille</th>
<th class='hand'>Date d'ajout</th>
<th class='hand'>Action</th>
</tr>
</thead>
<tbody>";
// Boucle tant qu'on a pas fait le tour des fichiers
$numFichier = 1;
while (($file=readdir($dossier)) !=false) {
// Afficher le nom et le type si ce n'est pas un élément du système
if ($file != '.' && $file != ".." && preg_match('#\.(pdf)$#i', $file)) {
// |_ Changer en pdf pour la plate forme
// SI le fichier fait parti de l'interval de la pagination alors on l'affiche
// SI le paramètre de page P n'est renseigné alors on le passe à 1
if (empty($_GET["p"])) {
$_GET["p"] = 1;
}
if (($numFichier >= (($_GET["p"] -1) * 5)) && ($numFichier <= ($_GET["p"] * 5))) {
/******** Fonction pour afficher la taille des fichiers *********/
// On affiche dans la variable les informations relatives au fichier
$taille=stat($dir.$file);
// On convertit et arrondit le résultat en Ko ou Mo
$size=$taille["size"];
if ($size >= 1048576) {
$size=(($taille["size"] / 1048576 * 100) / 100);
$final_size=round($size,2)." Mo";
} else {
$size=(($taille["size"] / 1024 * 100) / 100);
$final_size=round($size,2)." Ko";
}
/******** Fonction pour afficher la date d'ajout des fichiers *********/
$ladate = stat($dir.$file);
$datefinal=date('d/m/Y', $ladate['atime']);
// Affiche des fichiers si fichier uploadé
$begintab .= "
<tr>
<td class='file'><img class='imgtable' alt='logo Adobe' title='document PDF' src='./css/img/adobe_fichier.png'/>". $file ."</td>
<td class='size'>". $final_size ."</td>
<td class='date'>".$datefinal."</td>
<td><a href=index.php?controler=admin&action=suppr&p=". $file ."><img src='css/img/croixrouge.png' alt='Croix rouge' title='supprimer' /></a></td>
</tr>
";
}
$numFichier++;
}
}
$begintab .= "
</tbody>
</table>
</div>";
echo $begintab;
echo "<div class='pagination'>".pagination()."</div>";
// On ferme la connexion
closedir($dossier);
}
}
?>
</div>
<!-- Bloc gris en background -->
<div class="bloc">
</div> |
Et une page Ajaxfichiers.php (que j'include avant le chargement de la page admin.php.
Code Ajaxfichiers.php :
Code:
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
|
<?php
//var_dump($_POST, $_FILES);
$message = "";
if(!empty($_POST)) {
for ($i = 0; $i < sizeof($_FILES["fichier"]["name"]); $i++) {
// Si le fichier est bien renseigné alors on vérifie le type
if(!empty($_FILES["fichier"]) and $_FILES["fichier"]["name"][$i] != "") {
// Tableau des extensions gérées
$typeFichier = array (
"pdf",
);
// On remplace les espaces par des underscores
$good=array("_");
$bad=array(" ");
// Le tout au sein du nom du fichier
$name=$_FILES["fichier"]["name"];
$filename=str_replace($bad,$good,$name);
// On récupère l'extension du fichier
$fichier=strtolower(substr(strrchr($filename[$i], "."),1));
//Pour gérer la taille du fichier
$size=$_FILES["fichier"]["size"];
$sizemax=104857600;
if ($size >= $sizemax) {
//Si l'extension est autorisée, on autorise le fichier
if (in_array($fichier, $typeFichier)) {
$destinationFichier = "../fichiers/". basename($filename[$i]);
// Si le fichier est bien envoyé, alors on affiche le message correspondant
if (move_uploaded_file($_FILES["fichier"]["tmp_name"][$i], $destinationFichier)) {
// Informations sur le fichier transféré
var_dump($fichier);
$message .="INFO : Transfert réussi <br/>";
$message .="Nom du fichier: ". $filename[$i] ."<br/>";
header('Location: admin');
} else {
// Message d'erreur en cas de transfert échoué
$message="Erreur ! Le transfert a échoué !";
}
} else {
$message="Erreur ! Le type d'extension n'est pas autorisé !";
}
} else {
$message="Erreur ! Le fichier est trop gros pour être uploadé !";
}
}
}
}
//On envoie la réponse
echo $message;
?> |
Sauriez-vous m'indiquer où est située mon erreur (si il y en a une car je n'arrive pas à la voir) et m'aider dans la résolution de ce problème ?
Merci beaucoup !:zoubi: