8768 sujets

Développement web côté serveur, CMS

Bonjour à toutes et tous !

Voilà je développe actuellement une plate-forme de téléchargement à destination d'un client (l'entreprise dans laquelle je travaille). Or, 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 :

<!--*************************************
*				admin.php
*				Site CAB
*			  Vincent Dubuc
*				01/06/2016
*
**************************************-->
<?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>


Ainsi qu'une page Ajaxfichier.php :

<!--*************************************
*				ajaxfichier.php
*				Site CAB
*			  Vincent Dubuc
*				02/05/2016
*
**************************************-->

<?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=104857600000;
			
			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;

?>


Et enfin un fichier admin.js dans lequel on retrouve une fonction Ajax permettant d'uploader ledit fichier :

// Fonction Ajax pour uploader les fichiers
$(function() {
	$("#formFichier").on("submit", function(e) {
		e.preventDefault();
		
		//console.log("#fichier");
			
			var url = $("#fichier").val(); // On récup le chemin complet du fichier
			console.log(url);
			
			// Si le champs du fichier n'est pas vide 
			if(url != "") {
				// On split dès que l'élément rencontre un point -> stockage dans la variable
				 var extension = url.split(".");
				
				// On récupère l'extension en reprenant la dernière césure
				var extension = extension[(extension.length - 1)];
				
				//console.log(extension);
				
				// Stockage des extensions supportées dans un tableau
				var extensionssupport = new Array ("jpg","pdf");
					console.log(jQuery.inArray(extension, extensionssupport));
					if (jQuery.inArray(extension, extensionssupport) > -1) {
						//$(".messageFichier").html("Extension : OK !");

			
						// Si le champs fichier est renseigné
						if($("#fichier").val() != "") {
							
							
							// Fonction Ajax
							$.ajax({
							url:"include/Ajaxfichier.php",
							type:"POST",
							datatype:"php",
							data: new FormData(this),
							processData: false,
							contentType: false,
							success: function(reponse,status) {
								//console.log(reponse);
								$(".messageFichier").html(reponse);
							},
							
							error:function(data, status, error){
								console.log("data:" + data);
								console.log("status:" + status);
								console.log("error:" + error);
							},
								complete: function() {
							},
							
							}); 
							$(".messageFichier").html("Le fichier a bien été envoyé");
							document.location.href="http://cabplui.fr/admin";
										
							
						// Sinon message d'erreur
						} else {
							$(".messageFichier").html("ERREUR : Veuillez renseigner un fichier à joindre !");
						}
						
					} else {
						$(".messageFichier").html("L'extension n'est pas supportée");	
					}
			}
	});
});

	


Je ne vois pas où peux se situer mon erreur, pourriez-vous m'aider s'il vous plait ?

Merci beaucoup à toutes et tous ! Smiley biggrin
Modifié par Eikosoul (25 Jul 2016 - 10:53)
Ce forum est mort depuis un bon moment, je critique pas, mais faut préciser que la communauté est aux abonnée absente et que le staff ne gère plus rien.

C'est dommage, ce site était un excellente aide pour tous.

Espérons que ça revienne un jour!
Hello,

vérifie si le paramètre upload_max_filesize du php.ini est bien a 64M ainsi que post_max_size

upload_max_filesize =64M


Idem passe le max_file_uploads à 5 (vue que dans ton code tu le limites à 5).

Si tu n'as pas accès au fichier tu peu dans le php utiliser :

ini_set('upload_max_filesize','64M');
ini_set('max_file_uploads ','5');


Pour connaître l'extension d'un fichier je te conseil plutôt :

$Type_File = strtolower(pathinfo($Full_File_Path, PATHINFO_EXTENSION));


str_replace ne traite pas les remplacements de manières récursifs utilises plutôt :
$Clear_File_Name= preg_replace('/\_/', ' ', $Unsafe_File_Name);


Hors sujet : var c'est des variables d'accessibilités globale dans ton JS, utilise let pour limiter la variable à sa fonction ça t'éviteras des mauvaises surprises.

@+
Fre3z69 a écrit :
Ce forum est mort depuis un bon moment, je critique pas, mais faut préciser que la communauté est aux abonnée absente et que le staff ne gère plus rien.

C'est dommage, ce site était un excellente aide pour tous.

Espérons que ça revienne un jour!


Tu m'expliqueras d'où tu tire ces propos mensonger Smiley smile
Si bien sûr. mais je répond à celui qui à poster un truc cette année Smiley smile

et qui a 14 messages postés au total et qui a un acte de présence de 3 heures en 6 ans et qui juge sur l'état d'un forum Smiley smile alors que l'inactif c'est bien lui Smiley smile
Modifié par JENCAL (30 Oct 2019 - 11:26)