-
Problème avec filesize()
Bonjour! j'ai un formulaire qui permet d'uploader des fichiers sur le server. Pour limiter leur taille je fais appel a la fonction filesize comme cela :
Code:
if (filesize($_FILES['Fichier']['tmp_name']) > $taille_max)
( $taille_max est initialisée à 100000)
En local avec EasyPhp tout marche bien, mais sur le server de l'entreprise ça me met une erreur :
Warning: filesize() [function.filesize]: Stat failed for C:\WINDOWS\TEMP\php1FD7.tmp (errno=2 - No such file or directory) in D:\...\Demande.php on line 124
Pourtant le fichier est bien uploadé là ou il faut... Je suppose que le controle de la taille n'est pas effectué. Coment résoudre le probleme?
-
En fait je pense que le probleme vien du fait que le fichier que l'on envoi ne se trouve pas sur le serveur, et filesize semble le chercher sur le server.
Si je fais un echo de $_FILES['Fichier']['tmp_name'] ça me renvoi le chemin du fichier mais sur le poste où il se trouve... Il manque donc une partie au chemin que je passe en parametre pour filesize(). Mais je ne vois pas coment determiner le poste d'ou j'envoi ce fichier afin de completer ce chemin.
Autre chose, je m'etais deja servi de cette fonction, mon site est chez un hebergeur (donc distant) et la fonction marche tres bien... Je suis perdue :?
-
Pas la peine d'utiliser filesize, le tableau $_FILES contient déjà ce dont tu as besoin :
Code:
$_FILES['Fichier']['size']
ça te donne la taille en octets, voir la doc de php
-
erf... bon j'avai trouvé une solution intermediaire : rapatrier le fichier et faire le controle apres, et si il est trop gros l'effacer, mais je vais tester ta solution ça va limiter les flux merci ^^
-
OK ça marche parfaitement merci beaucoup :)
-
Concernant le problème initial,
je crois qu'il faut indiquer le chemin complet qui pointe vers le fichier
Code:
filesize($tmpDir.'/'.$_FILES['Fichier']['tmp_name'])
mais bon, de toute façon la réponse de Hervé Saladin est préférable
-
En relisant tes question et ta derniere remarque, j'ai la vague impression que tu te trompes un peu :
que tu utilises $_FILES['Fichier']['size'], ou alors filesize() ne change rien aux flux, car quand tu testes la taille du fichier, celui-ci est déjà uploadé sur le serveur.
Il n'existe aucun moyen de connaitre la taille du fichier AVANT qu'il n'ait été uploadé, c.à.D. quand il est encore sur le poste client.
Si tu veux faire de la limitation sur la taille des fichiers, ce n'est pas avec du code qu'il faut le faire, mais au niveau de la configuration du serveur, ça se passe dans le php.ini paramètre upload_max_filesize
En jouant sur ce paramètre, tu empèches purement et simplement les clients d'envoyer des fichiers trop gros.
La bonne chose à faire, est d'utiliser ce paramètre de conf, mais aussi d'informer textuellement l'utilisateur de la limite, et enfin d'utiliser dans le formulaire un champ caché :
Code:
<input type='hidden' name = 'MAX_FILE_SIZE' value = '30000' />
Ce champ caché permet un blocage par le navigateur des trops gros fichiers avant qu'il ne soient envoyés, mais malheureusement ça n'a qu'un rôle ergonomique et ce n'est pas fiable pour la sécurité du serveur, d'ou l'importance du param de conf de php.ini