PHP / Upload de fichier pdf

Fermé
Jérôme - 31 mai 2007 à 17:41
becky012 Messages postés 1 Date d'inscription mardi 28 mai 2013 Statut Membre Dernière intervention 28 mai 2013 - 28 mai 2013 à 17:14
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
A voir également:

4 réponses

neojick Messages postés 167 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 30 mars 2009 99
31 mai 2007 à 17:51
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">
7
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.
2
> $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.
1
neojick Messages postés 167 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 30 mars 2009 99
24 févr. 2008 à 12:47
C'est ce que je fais maintenant, j'utilise un time() comme ça pas de risque de confit.

0
becky012 Messages postés 1 Date d'inscription mardi 28 mai 2013 Statut Membre Dernière intervention 28 mai 2013
28 mai 2013 à 17:14
bonne idee avec la fonction time()! Pour verifier et remplacer les accents ca pourrait etre aussi:
$accents = array('a'=>array('ä', 'â', 'à'),'e'=>array('é', 'è', 'ê', 'ë'),'i'=>array('ï', 'î'),
'o'=>array('ö', 'ô'),'u'=>array('ù', 'û', 'ü'));
foreach($accents as $lettre=>$valeur){
foreach ($valeur as $v) {
$fichier_name=str_replace($v,$lettre,$fichier_name);
}
}
0