Bonjour à tous,
Je fais appel a vous parceque sa fait plusieurs jour je cherche une solution a mon problème, mais c'est sans résultat.
J'ai fait un formulaire html simple permettant d'upload un fichier

<form method="post" action="mapage.php" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000000" />
    <p>Scan à upload : <input type="file" name="scan_zip" size="60" /></p>
    <input class="submit" type="submit" value="Envoyer" />
</form>

Dans mapage.php j'ai mis

print_r($_FILES)

Pour voir ce que cela me donnée or cela me retourne:
Array()
Apres quelque recherche j'ai modifier quelque ligne dans mon php.ini

upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 0

Mais toujours le même problème...

Je m'en remet donc a vous.

Cordialement Reiku
PS: Mon hébergeur est 1&1
PS2: Je sais pas pourquoi mon message a un problème de saut de ligne =/

23 réponses


le nom de la variable, c'est $_FILE et pour le S je suis pas sur...

Reiku
Auteur

Oupss j'édit j'ai oublier de mettre le "_" mais si c'est bien avec un S

fait un

<?php phpinfo(); ?>

pour connaitre tes info serveur car le fichier de configuration php.ini permet la configuration du serveur PHP. Il contient entre autres des directives permettant d'autoriser ou non l'envoi de fichiers via un formulaire ainsi que de le paramétrer :

file_uploads= On/Off permet d'autoriser ou non l'envoi de fichiers.
upload_tmp_dir = répertoire permet de définir le répertoire temporaire permettant d'accueillir le fichier uploadé.
upload_max_filesize = 2M permet de définir la taille maximale autorisée pour le fichier. Si cette limite est dépassée, le serveur enverra un code d'erreur.
post_max_size indique la taille maximale des données envoyées par un formulaire. Cette directive prime sur upload_max_filesize, il faut donc s'assurer d'avoir post_max_size supérieure à upload_max_filesize

Reiku
Auteur

Oui j'avais déjà fait un phpinfo() et les variable cité sont a une valeur correct je pense.
file_uploads on
post_max_size 100M
upload_max_filesize 100M
J'avais aussi éssayer de mettre post_max_size > upload_max_filesize
Mais rien n'y fait, je précise que le fichier que je souhaite upload est un ZIP de seulement 16Mo

ben normalement ca devrait passé

Reiku
Auteur

Je viens de tester en vidant mon fichier zip de moitié, il fait donc environ 8Mo maintenant et la sa fonctionne le print_r() me retourne bien un tableau rempli
Je ne sais pas de quoi sa viens mais ce problème est très embêtant =/

Reiku
Auteur

Petit Up...

Il retourne quoi ton tableau maintenant ?

Je dis ça sans aucune conviction mais, as-tu pensé à regarder du côté du max_execution_time (dans le php.ini) ? Est-ce que ça ne pourrait pas influer ?

Reiku
Auteur

@MartinT Il retourne Array()
@Havok Oui j'ai déjà essayer plusieurs manip' sur cette commande, rien n'y fait =/

Reiku
Auteur

@MartinT Il retourne Array()
@Havok Oui j'ai déjà essayer plusieurs manip' sur cette commande, rien n'y fait =/

Et t'as essayé d'uploader des fichiers de petites tailles et d'aller crescendo ? Juste pour voir s'il fait ça pour tout le monde où si y'a une limite. Du genre, commencer à 5ko puis aller crescendo.

C'est normal que print_r($_FILES) te retourne Array() car c'est un tableau. :p

En fait la super globale $_FILES contient plusieurs valeurs. Il y a notamment 'name'], 'type'], 'tmp_name'], 'error'] et 'size'].
Donc pour récupérer c'est valeurs, il faut écrire par exemple

echo $_FILES'scanzip']'name'];

Donc à la réception du POST, tu peux faire des tests pour voir si ton image est au bon format ou ne pèse pas trop lourd, etc...
Je te conseille aussi d'aller faire un tour sur PHP.NET

Reiku
Auteur

J'avais complètement oublier le sujet, merci de me le rappeler.
Pour te répondre je vais essayer le code que tu ma donnée mais je sais très bien que print_r retourne un tableau mais est t'il normal que ce tableau soit vide ? j'en doute =/

Tu peux faire des tests pour voir si le POST reçoit bien ton image:

//test si le POST existe et est remplit
if ( isset($_POST'scanzip]) && !empty($_POST) )
{
    //on affiche le nom par exemple
    echo $_FILES'scanzip']'name'];
    //test si l'image est au bon format, exemple JPEG
    if ($_POST'scanzip']'type'] == 'image/jpeg')
    {
        echo "C'est une jpeg.";
    }else{ echo "mauvais format"; }
}
else{ echo "Le POST n'a rien reçut"; }
Reiku
Auteur

J'ai essayer ton code de tout a l'heure cela m'affiche rien, et le problème c'est que je ne veux pas upload une image mais un zip d'environ 16Mo

Ah oui si c'est un zip ça se complique... Je te conseille de regarder ce lien. Le type à voulu faire la meme chose.
http://www.siteduzero.com/forum-83-65711-p1-upload-de-fichier-rar-ou-zip.html

Oula pour des fichiers qui ont une taille supérieure à 2 ou 3 mo si tu n'a pas ton propre serveur tu va rencontrer des problèmes
car il faut que tu modifie le php.ini.
post_max_size, upload_max_filesize et max_input_time
et surement aussi memory_limit

et après quelques souvenir j'ai toujours u quelques problèmes avec les gros fichier sur un mutualisé 1and1.
Mais cela fait bien longtemps, donc peut-être que ça a changé

Reiku
Auteur

Voici les valeur actuel pour chaque variable

post_max_size = 100M
upload_max_filesize = 100M
max_input_time = -1
memory_limit = 128M

c'est peut être le max_input_time qui pose problème ?

Faudrait que tu test déja ton script en local avec un wamp ou autre, pour voir si il fonctionne.
Si oui le problème vient de 1and1
si non :(

Reiku
Auteur

Le problème doit venir de 1&1 dans ce cas, puisque en local cela marche...
Existe t'il une autres solution d'upload en php sans passer par $_FILES ?

test ce code :

<?php 
 extract($_POST);
////////////////////////////////////////////
if(is_uploaded_file($_FILES"file"]"tmp_name"])){

$sql = "insert into gallerie(photo) values('photo')";
  $result= mysql_query($sql) or die('Erreur Sql</br>'.$sql.'</br>'.mysql_error());
        if($result){
echo'<script language="javascript">window.location.href ="index.php?p=gallerie"</script>';

}
$id = mysql_insert_id();
if ((($_FILES"file"]"type"] == "image/gif")
|| ($_FILES"file"]"type"] == "image/jpeg")
|| ($_FILES"file"]"type"] == "image/pjpeg"))
&& ($_FILES"file"]"size"] < 2000000))

move_uploaded_file($_FILES"file"]"tmp_name"],"content/photo_gallerie/".$id.".jpg");
} ?>
Reiku
Auteur

A quoi bon tester ce code si je sais d'avance que $_FILES me retourne un tableau vide ?