Portion de script d'upload qui foire :'(

Korg
Invité n'ayant pas de compte PHPfrance

24 août 2006, 17:06

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

Mammouth du PHP | 1339 Messages

24 août 2006, 19:35

Qu'est ce qui ne marche pas en fait ?
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

24 août 2006, 19:58

Bonsoir,

Essaye de mettre un exit();
après ta commande header
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 août 2006, 20:34

- 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 :))

Korg
Invité n'ayant pas de compte PHPfrance

25 août 2006, 09:33

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

Invité
Invité n'ayant pas de compte PHPfrance

25 août 2006, 10:04

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 août 2006, 11:31

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
Quand tout le reste a échoué, lisez le mode d'emploi...

Invité
Invité n'ayant pas de compte PHPfrance

25 août 2006, 11:58

Ok, merci, t'es un chef ! 8)

Rien à redire sur mon code sinon ?

++

Korg :lol:

Eléphant du PHP | 66 Messages

25 août 2006, 13:03

any way check "upload_max_filesize"
Mess With Best or die With the Rest