Page 1 sur 1

Portion de script d'upload qui foire :'(

Posté : 24 août 2006, 17:06
par Korg
Hello, j'chui noob en php et j'ai voulu me lancer avec un script d'upload.

J'ai fait ça mais ca marche pas :
$size_file = $_FILES['fichier']['size'];

if ($size_file > 10000000){
header("location:ajt_doc_err.php?id=1");
}
La valeur de l'id récupère la nature de l'erreur en $_GET

Quelqu'un pour m'aider svp ?

Korg

Posté : 24 août 2006, 19:35
par Elie
Qu'est ce qui ne marche pas en fait ?

Posté : 24 août 2006, 19:58
par @rthur
Bonsoir,

Essaye de mettre un exit();
après ta commande header

Posté : 24 août 2006, 20:34
par Ryle
- Le fichier que tu testes fait-il bien plus de 10Mo ? sinon il ne rentrera pas dans ton if :)

- Le champ dans lequel tu spécifies le chemin du fichier s'appelle-t-il bien "fichier" ($_FILES['fichier'])

- As-tu ajouté dans ton formulaire l'attribut enctype="..." nécessaire pour l'upload de fichier ?

(bref, plein de questions :))

Posté : 25 août 2006, 09:33
par Korg
Salut tlm,

- Oui, le fichier testé fait plus de 10Mo :)
- Oui, le bloc s'appelle bien "fichier"
- Oui j'ai l'attribut enctype="..."

Il faut savoir que le script ci-dessous marche bien. Tout se passe bien mais le contrôle sur le poids du fichier ne fonctionne pas. Si vous avez des commentaires et critiques à faire sur le code, n'hésitez pas, je suis même preneur ;)
<? session_start(); 
if (isset($_POST["Ajouter"])) {
$dos_desti = "docs/";
$temp_file = $_FILES['fichier']['tmp_name'];
$size_file = $_FILES['fichier']['size'];
if ($size_file > 10000000){
header("location:ajt_docs_err.php?k=poi");
}
if(!is_uploaded_file($temp_file)){
header("location:ajt_docs_err.php?k=int");
}else{
$nomfichier = str_replace("'","", $_FILES['fichier']['name']);
$nom_fichier = str_replace(" ","", $nomfichier);
$nom_fichier = strtr($nom_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$nom_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $nom_fichier);
if (file_exists($dos_desti . $nom_fichier)) { 
header("location:ajt_docs_err.php?k=exi");
}else{
$copymove = move_uploaded_file($temp_file, $dos_desti . $nom_fichier);
if ($copymove==false) {
header("location:ajt_docs_err.php?k=erf");
}
if($copymove==true){
include "connex.php";
if ($connex){
$q="INSERT INTO docs...";
mysql_query($q);
mysql_close();
header("location:docs2.php?id=".$_POST["ldoc"]."");
}else{
header("location:ajt_docs_err.php?k=erf");
}
}
}
}
}
?>
Korg

Posté : 25 août 2006, 10:04
par Invité
Avec un exit() derrière le header, ça marche ! Merci à tous et en particulier à toi Arthur, mais comme je suis du genre curieux, je voudrais savoir pourquoi ca fonctionne pas sans le exit() ???

Korg

Posté : 25 août 2006, 11:31
par @rthur
Avec un exit() derrière le header, ça marche ! Merci à tous et en particulier à toi Arthur, mais comme je suis du genre curieux, je voudrais savoir pourquoi ca fonctionne pas sans le exit() ???

Korg
Sur certaines configurations et de manière aléatoire, si ta page envoie quelque chose au navigateur juste après la commande header(), le navigateur ne va pas tenir compte du header et va continuer de charger la page...

C'est indiqué dans la doc de façon pas très explicite
http://fr.php.net/header#AEN119280
http://fr.php.net/header#64189

Posté : 25 août 2006, 11:58
par Invité
Ok, merci, t'es un chef ! 8)

Rien à redire sur mon code sinon ?

++

Korg :lol:

Posté : 25 août 2006, 13:03
par nejme.eddinne
any way check "upload_max_filesize"