web-dev-qa-db-fra.com

Attention: filesize (): stat a échoué pour img.jpg

J'essaie d'obtenir la taille du fichier d'une image et je continue à obtenir Warning: filesize(): stat failed for img.jpg

C'est ce que j'ai fait: 

$path = $_FILES['profile']['name'];
$path = iconv('UTF-8', 'ISO-8859-1',$path);
if (!in_array(pathinfo($path,PATHINFO_EXTENSION),$allowed)) {
    return "file";
} elseif (filesize($path)>(1024*600))

Je peux obtenir l’extension de fichier sans problème, mais la fonction filesize() ne semble tout simplement pas fonctionner. J'ai lu un peu et j'ai trouvé ceci mais cela n'a pas résolu le problème. Toute aide est très appréciée! 

5
yuval

['name'] dans le tableau $ _FILES est le nom du fichier sur la machine CLIENT. Il s’agit uniquement d’informations et n’a absolument aucun rapport avec ce qui est réellement stocké sur votre serveur. Vous devez consulter ['tmp_name'], qui est l'emplacement où PHP a temporairement stocké le fichier sur le serveur, une fois le téléchargement terminé:

$path = $_FILES['profile']['tmp_name'];
                          ^^^^^^^^^^^^
6
Marc B

$_FILES['profile']['name'] a just nom du fichier .. vous devez accéder 

$_FILES['profile']['tmp_name'] 

vous donnera le chemin temporaire du fichier sur votre système . Voici http://php.net/manual/en/reserved.variables.files.php

aussi vous pouvez accéder à la taille du fichier avec 

$_FILE['profile']['size']
3
geekman
echo "---- NULL ---------------\n";
$path = null;
echo "File size is: " . filesize($path) . "\n";

echo "---- FILE EXISTS --------\n";
$path = '/home/luca/Scrivania/file_that_exists.jpg';
echo "File size is: " . filesize($path) . "\n";

echo "---- FILE NOT EXISTS ----\n";
$path = 'file/does/not/exists.jpg';
echo "File size is: " . filesize($path) . "\n";

Aboutirait à:

---- NULL ---------------
File size is: 
---- FILE EXISTS --------
File size is: 78953
---- FILE NOT EXISTS ----

Warning: filesize(): stat failed for file/does/not/exists.jpg in /home/luca/Scrivania/test.php on line 13

Call Stack:
    0.0001     642120   1. {main}() /home/luca/Scrivania/test.php:0
    0.0002     642448   2. filesize() /home/luca/Scrivania/test.php:13

Cela signifie que votre variable

$_FILES['profile']['name'];

ne pointe pas vers un emplacement de fichier valide sur le serveur et est plutôt un parmi:

  1. Le chemin du fichier sur le PC client (pas sur le serveur) et dans ce cas, vous ne pouvez pas y accéder directement.
  2. Quelque chose qui n'est pas une chaîne
  3. MAIS il n’est pas nul (sinon, vous auriez retourné null (voir le premier exemple)

S'il vous plaît la prochaine fois post valide code PHP.

Luca

METTRE À JOUR

Comme Marc B l’a suggéré, vous devez utiliser $_FILES['profile']['tmp_name'];

1
Luca Abbati