je faisais un script de téléchargement lorsque j'ai testé un fichier image avec cette extension .JPG, je ne sais pas quelle est la différence entre jpg ou jpeg, mais il semble que $ _FILES ne reconnaisse pas ce type de fichier.
J'ai lu plusieurs threads que $ _FILES n'est pas aussi fiable en ce qui concerne le type mime, j'ai donc décidé d'utiliser la fonction de type mime du php mime_content_type()
, php's getimagesize()
, pathinfo()
, bien que pathinfo renvoie un nom de fichier et un type, mais j'ai besoin du chemin du fichier qui n'est PAS présent, toutes les fonctions sont passées avec $ _FILES ['file'] ['tmp_name'] as paramètres.
Donc, ce problème est survenu lorsque j'ai décidé de télécharger un fichier image, par exemple sample.JPG, je pense que la plupart de ces fichiers sont bruts de la caméra <- c'est ce que je pense, mais ce qui est plus important, c'est que je peux les télécharger. JPG, .jpg, jpeg, .png. tous fonctionnent bien, sauf pour .JPG.
Le problème principal est que le champ ['tmp_name'] dans $ _FILES n'a aucune valeur lorsque .JPG doit être téléchargé.
N'importe lequel d'entre vous qui a rencontré ce problème, veuillez partager votre solution de contournement ou le genre de chose "comment avez-vous fait".
Si $_FILES[$field]['tmp_name']
est vide alors le fichier n'a pas été téléchargé. Vous devriez regarder $_FILES[$field]['error']
pour voir pourquoi.
FWIW, et pour autant que je le comprends, le type mime dans $_FILES[]
est fourni par le navigateur.
pdate: voici un peu de code en pot pour gérer toutes les erreurs de téléchargement de fichiers:
$message = 'Error uploading file';
switch( $_FILES['newfile']['error'] ) {
case UPLOAD_ERR_OK:
$message = false;;
break;
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
$message .= ' - file too large (limit of '.get_max_upload().' bytes).';
break;
case UPLOAD_ERR_PARTIAL:
$message .= ' - file upload was not completed.';
break;
case UPLOAD_ERR_NO_FILE:
$message .= ' - zero-length file uploaded.';
break;
default:
$message .= ' - internal error #'.$_FILES['newfile']['error'];
break;
}
if( !$message ) {
if( !is_uploaded_file($_FILES['newfile']['tmp_name']) ) {
$message = 'Error uploading file - unknown error.';
} else {
// Let's see if we can move the file...
$dest .= '/'.$this_file;
if( !move_uploaded_file($_FILES['newfile']['tmp_name'], $dest) ) { // No error supporession so we can see the underlying error.
$message = 'Error uploading file - could not save upload (this will probably be a permissions problem in '.$dest.')';
} else {
$message = 'File uploaded okay.';
}
}
}
Vérifier votre php.ini
et en particulier ce paramètre
; Maximum allowed size for uploaded files.
; http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize
upload_max_filesize = 6M
Ou faites-le dans votre configuration Apache:
<Directory "/var/www/vhosts/path/to/your/directory/import/">
php_value post_max_size 6M
php_value upload_max_filesize 6M
</Directory>
Je dirais également qu'il est médiocre que PHP ne signale pas d'erreur dans les journaux d'erreurs si vous téléchargez un fichier plus grand que votre php.ini upload_max_filesize
réglage. Par exemple, si vous téléchargez un fichier de 6 Mo lorsque vous l'avez défini sur 2M
(qui je pense est la valeur par défaut).
Publier une réponse car ma note est trop basse.
N'oubliez pas de redémarrer votre serveur après avoir défini la taille maximale du fichier dans votre php.ini. J'ai passé des heures sur ce problème en pensant que ce n'était pas un problème de taille de fichier en attendant j'ai oublié de redémarrer. Après le redémarrage, tout a fonctionné.
J'espère que cela peut aider quelqu'un.
J'avais le même problème et être familier avec la plate-forme principalement .NET vous fait oublier les choses qui se produisent dans le HTML côté client.
Mon problème était que mon formulaire avait une entrée cachée MAX_FILE_SIZE qui a une valeur inférieure aux octets équavalents du fichier.
Votre formulaire devrait avoir ceci;
Autre que cela, votre balise de formulaire doit inclure enctype = "multipart/form-data"
Je pensais que la taille maximale du fichier était en Ko, mais elle est en octets, grâce à une autre page de stackoverflow.
L'autre raison qui pourrait causer ce problème à vos paramètres php.ini que les gens ont mentionnés dans les commentaires précédents. Vous devriez pouvoir post_max_size = 200M
au fichier php.ini également.
Si vous développez sur Windows comme moi, vous pouvez voir un fichier de vidage montrant des erreurs dans C:\Windows\Temp appelé "php ** VERSION ** _ errors.log". Ça aide.
J'ai rencontré le problème avec le champ $ _FILES 'tmp_name' n'ayant aucune valeur pour l'extension de fichier .JPG et je l'ai corrigé avec succès en quelques étapes. Ces mesures peuvent aider quelqu'un à l'avenir.
On dirait que c'est un problème aléatoire car pendant que je faisais un script pour télécharger des fichiers CSV, certains fichiers CSV n'auraient aucun problème à télécharger mais dans d'autres cas, $_FILES['file'][tmp_name]
serait vide.
Essayez ceci et voyez ce qui se passe,
if (($_FILES['file']['type']) == "image/jpg" || ($_FILES['file']['type']) == "image/jpeg") {
//do uploading stuff here
}else{
echo 'File is not a valid JPG,JPEG';
}