Les Allergies
Alimentaires
Posez votre question Signaler

PHP / Upload de fichier pdf

Jérôme - Dernière réponse le 24 févr. 2008 à 12:47
Bonjour à tous,
j'ai besoin de réaliser l'upload d'un fichier pdf via un formulaire html.
J'utilise pour cela un formulaire de type :
<form method=\"POST\" name=\"formulaire\" enctype=\"multipart/form-data\" action=\"traitement_telechargement_bat.php\">";

Je récupère les infos grâce à $HTTP_POST_FILES où je teste le type de fichier et le copie dans le répertoire de destination.
Tout fonctionne très bien avec un fichier image mais impossible d'uploader un fichier pdf.
J'arrive à récupérer le nom du fichier en faisant $HTTP_POST_FILES['fichier']['name'] mais par contre lorsque j'essaye de le copier ou de même de savoir son type mime, j'ai rien !!!
Ya t'il quelqu'un qui a déjà rentrer ce problème ... Ya t'il une modif à faire au niveau de la config serveur pour uploader des pdf ????
Là, je ne sais vraiment plus ...
Merci d'avance
Lire la suite 

PHP / Upload de fichier pdf »

4 réponses
Réponse
+5
moins plus
Cadeau, voilà le script que j'ai bricolé cet aprem pour uploader des fichiers, il fonctionne avec les .pdf


<?
//Initialisation d'un variable qui autorisera ou non l'enregistrement dans la base
$uploaded=0;

//Si le fichier a une taille
if($fichier_size>0) 
{
	//on génère un nombre aléatoire en 0 et 100000 qui sera ajouté à la fin du nom du dossier pour éviter les conflits (deux fichiers avec le même nom)
	$rename=rand(0,100000);

	//Répertoire où sera stocké ce fichier (le répertoire doit avoir les droits 0777)
	$rep= $DOCUMENT_ROOT."societes/dossiers/fichiers/";

	//On remplace les éventuels espaces dans le nom du fichier par des underscore
	$fichier_name = str_replace (" ", "_", $fichier_name);
	
	//On remplace les A avec accent par un A normal
	$a = array("ä", "â", "à");
	$fichier_name = str_replace ($a, "a", $fichier_name);
		
	//On remplace les E avec accent par un E normal
	$e = array("é", "è", "ê", "ë");
	$fichier_name = str_replace ($e, "e", $fichier_name);
	
	//On remplace les I avec accent par un I normal
	$i = array("ï", "î");
	$fichier_name = str_replace ($i, "i", $fichier_name);
	
	//On remplace les O avec accent par un O normal
	$o = array("ö", "ô");
	$fichier_name = str_replace ($o, "o", $fichier_name);
	
	//On remplace les U avec accent par un U normal
	$u = array("ù", "û", "ü");
	$fichier_name = str_replace ($u, "u", $fichier_name);
	
	//On met le nom du fichier dans la variable $newfichier
	$newfichier=$fichier_name;

	//on sépare en deux le nom et l'extension
	list($nom, $ext) = explode(".", $newfichier);

	//Au nom, on rajoute un underscore et le nombre généré
	$nom = $nom."_".$rename;

	//On lui rajoute l'extension pour la copie dans le dossier
	$savefile= $rep.$nom.".".$ext;

	//Le fichier est déplacé dans le dossier prévu
	move_uploaded_file($fichier, $savefile) or die('Impossible de copier le fichier : '.$savefile.mysql_error());

	//On passe la variable à 1
	$uploaded=1;
} 
//Sinon, si le fichier n'a pas de taille
else
{
	//Si pas de taille, la variable reste à zéro pour empêcher l'écriture dans la base
	$uploaded=0;
}
?> 


Avec ça ton fichier est copié où il faut, et tu peux récupérer son nom et son extension (je stocke les deux séparement pour un tri plus loin)

Et mon input dans le formulaire se présente ainsi :

  <INPUT TYPE=HIDDEN NAME=MAX_FILE_SIZE VALUE=40240000>
  <input name="fichier" type="file" id="fichier"  class="formulaire" value="" size="30">
Ajouter un commentaire
Réponse
+2
moins plus
Bon je confirme, çà ruuules impec !
Les pdf s'ouvrent comme prévu.

Au lieu de simplement :
list($nom, $ext) = explode(".", $newfichier);

Je préfère :

// Definir la variable du nom du fichier
$fichier = $_FILES['titre']['name'];

// On recule de 3 caractère le nom du fichier
if (substr($fichier, -3) == 'jpg' 
|| substr($fichier, -3) == 'gif' 
|| substr($fichier, -3) == 'png' 
|| substr($fichier, -3) == 'bmp' 
|| substr($fichier, -3) == 'pdf'
|| substr($fichier, -3) == 'JPG' 
|| substr($fichier, -3) == 'GIF' 
|| substr($fichier, -3) == 'PNG' 
|| substr($fichier, -3) == 'BMP' 
|| substr($fichier, -3) == 'PDF')
{
$extension = substr($fichier, -3);
$nomFichier = substr_replace($fichier, '', -4);
}
// Idem mais de 4, dans le cas d'un jpeg
elseif ((substr($fichier, -4)) == 'jpeg' || (substr($fichier, -4)) == 'JPEG') 
{
$extension = substr($fichier, -4);
$nomFichier = substr_replace($fichier, '', -5); 
} 
else { echo "Mauvaise extension !"; }

// On met en minuscule l'extension (peut causer des soucis d'exploitation des médias)
$extension = strtolower($extension);

$fichier_name = $nomFichier."_".date().$extension;


Pour la conversion des caractères accentués, je préconiserai aussi :

        //On remplace les "espace" par un "tiret"
	$espace = " ";
	$fichier_name = str_replace ($espace, "-", $fichier_name);

Dans le cas d'une image, vous permettra d'utiliser des fonction getimagesize avec une url.
Ajouter un commentaire
Réponse
+1
moins plus
> $rename=rand(0,100000);

Au lieu d'un nombre aléatoire, autant mettre un " time(); " ça pourra etre util pour avoir en meme temps la date de d'envoi du fichier !
En tout cas merci, je suis venu pour les accents, j'ai ce probleme et vais y remedier avec ta methode !

@++ et encore merci.
neojick- 24 févr. 2008 à 12:47
C'est ce que je fais maintenant, j'utilise un time() comme ça pas de risque de confit.

Ajouter un commentaire
Ce document intitulé « PHP / Upload de fichier pdf » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?