Upload de fichier avec formulaire PHP
Le
Donald Martel

Voici mon probleme,
J'ai un serveur Apache 2.0 avec PHP 4 et j'ai une section reservee dans mon
site (une page controlee par htaccess) ou je peux uploader par formulaire un
fichier
J'utilise le code que l'on retouve un peu partout sur le web qui ressemble
a ca :
<title>Upload de fichier</title>
<form method='post' enctype='multipart/form-data'>
<h2>Entrez les informations ci-dessous avant de charger le fichier.</h2>
<br>
<table border='0' cellpadding='1' cellspacing='1' class='box'>
<tr>
<td>Nom du fichier :</td>
<td><input name='fname' size='40'></td>
<tr>
<td valign='top'>Decription du fichier :</td>
<td><textarea name='fdescript' cols='45' rows='4'></textarea></td>
<tr><td>Catégorie :</td>
<td><select name='fcategorie'>
<option value='Utilitaires'>Utilitaires</option>
<option value='Documentation'>Documentation</option>
<option value='Sécurité'>Sécurité</option>
<option value='Pilotes'>Pilotes</option>
<option value='Divers'>Divers</option>
</select>
<tr>
<td>Accessible par :</td>
<td><select name='ftechonly'>
<option value='0'>Clients & Techniciens</option>
<option value='1'>Techniciens seulement</option>
</select>
</td>
<tr>
<td>Emplacement du fichier</td>
<td>
<input type='hidden' name='MAX_FILE_SIZE' value = '30000000'>
<input name='userfile' type='file' id='userfile' size='44'>
</td>
<tr><td> </td>
<tr>
<td colspan='2' align='center'><input name='upload' type='submit'
class='box' id='upload' value=' Lancer le upload '></td>
</tr>
</table>
</form>
include ("../includes/misc.inc.php"); // les para,eter de connexion de mon
serveur sont dans ce fichier //
$uploadDir='../download/';
if(isset($_POST['upload']))
{
$fileName=$_FILES['userfile']['name'];
$tmpName =$_FILES['userfile']['tmp_name'];
$fileSize=$_FILES['userfile']['size'];
$fileType=$_FILES['userfile']['type'];
$filePath=$uploadDir . $fileName;
$nomfichier=$_POST['fname'] ;
$descriptionfichier=$_POST['fdescript'];
$categoriefichier=$_POST['fcategorie'] ;
$vuefichier=$_POST['ftechonly'] ;
$result = move_uploaded_file($tmpName,$filePath);
if (!$result)
{
echo 'Error uploading file';
exit;
}
else
{
$requete="INSERT INTO upload
(fname,fpath,fsize,ftype,fdescript,fcategorie,ftechonly)" .
"VALUES
('$nomfichier','$filePath','$fileSize','$FileType','$descriptionfichier','$categoriefichier','$vuefichier')";
mysql_query($requete) or die('Probleme de base : '. $requete );
}
}
?>
la requete c<est pour ecrire dans une base MYSQL la description du fichier
et autre
MON PROBLEME > c,est qu'aussitot que la taille de mon fichier depasse 1
Mo , je recois comme reponse de mon navigateur le message IMPOSSIBLE
D'AFFICHER LA PAGE mais s'il est plus petit NO PROBLEMO !!!
dans mon PHP INI
les valeurs ressemblent a ceci :
memory_limit = 20M
max execution time 90
post_max_size = 32M
upload tmp dir /home/www/upload
Je ne sais plus ou chercher
J'ai un serveur Apache 2.0 avec PHP 4 et j'ai une section reservee dans mon
site (une page controlee par htaccess) ou je peux uploader par formulaire un
fichier
J'utilise le code que l'on retouve un peu partout sur le web qui ressemble
a ca :
<title>Upload de fichier</title>
<form method='post' enctype='multipart/form-data'>
<h2>Entrez les informations ci-dessous avant de charger le fichier.</h2>
<br>
<table border='0' cellpadding='1' cellspacing='1' class='box'>
<tr>
<td>Nom du fichier :</td>
<td><input name='fname' size='40'></td>
<tr>
<td valign='top'>Decription du fichier :</td>
<td><textarea name='fdescript' cols='45' rows='4'></textarea></td>
<tr><td>Catégorie :</td>
<td><select name='fcategorie'>
<option value='Utilitaires'>Utilitaires</option>
<option value='Documentation'>Documentation</option>
<option value='Sécurité'>Sécurité</option>
<option value='Pilotes'>Pilotes</option>
<option value='Divers'>Divers</option>
</select>
<tr>
<td>Accessible par :</td>
<td><select name='ftechonly'>
<option value='0'>Clients & Techniciens</option>
<option value='1'>Techniciens seulement</option>
</select>
</td>
<tr>
<td>Emplacement du fichier</td>
<td>
<input type='hidden' name='MAX_FILE_SIZE' value = '30000000'>
<input name='userfile' type='file' id='userfile' size='44'>
</td>
<tr><td> </td>
<tr>
<td colspan='2' align='center'><input name='upload' type='submit'
class='box' id='upload' value=' Lancer le upload '></td>
</tr>
</table>
</form>
include ("../includes/misc.inc.php"); // les para,eter de connexion de mon
serveur sont dans ce fichier //
$uploadDir='../download/';
if(isset($_POST['upload']))
{
$fileName=$_FILES['userfile']['name'];
$tmpName =$_FILES['userfile']['tmp_name'];
$fileSize=$_FILES['userfile']['size'];
$fileType=$_FILES['userfile']['type'];
$filePath=$uploadDir . $fileName;
$nomfichier=$_POST['fname'] ;
$descriptionfichier=$_POST['fdescript'];
$categoriefichier=$_POST['fcategorie'] ;
$vuefichier=$_POST['ftechonly'] ;
$result = move_uploaded_file($tmpName,$filePath);
if (!$result)
{
echo 'Error uploading file';
exit;
}
else
{
$requete="INSERT INTO upload
(fname,fpath,fsize,ftype,fdescript,fcategorie,ftechonly)" .
"VALUES
('$nomfichier','$filePath','$fileSize','$FileType','$descriptionfichier','$categoriefichier','$vuefichier')";
mysql_query($requete) or die('Probleme de base : '. $requete );
}
}
?>
la requete c<est pour ecrire dans une base MYSQL la description du fichier
et autre
MON PROBLEME > c,est qu'aussitot que la taille de mon fichier depasse 1
Mo , je recois comme reponse de mon navigateur le message IMPOSSIBLE
D'AFFICHER LA PAGE mais s'il est plus petit NO PROBLEMO !!!
dans mon PHP INI
les valeurs ressemblent a ceci :
memory_limit = 20M
max execution time 90
post_max_size = 32M
upload tmp dir /home/www/upload
Je ne sais plus ou chercher
apparemment, le répertoire includes est dans l'arborescence accessible
du web. ça fait un peu passoire !
faudrait tester ici que $_FILES['userfile'] n'est pas empty
- et s'il y a des guillemets simples dans ces variables ?
- et si l'enregistrement existe déjà (car tu as bien sûr défini une clé
primaire pour cette table comme tout bon développeur :-) ?
c'est gentil d'afficher la requête à ton utilisateur pour qu'il sache
que tu as une table upload avec 7 champs. cela facilitera la tâche d'un
néfaste éventuel !
cherche la valeur de upload_max_filesize
vérifie la place disponible sur le disque où est situé /home/www/upload
et ../download/
par ailleurs, avant de placer le fichier dans l'arborescence web,
vérifie que ce n'est pas un script (extension php? ou pl ou cgi ou ...,
liste à adapter en fonction de la configuration d'Apache)
eça
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/