J'essaie de télécharger un fichier dans un répertoire, et de le renommer dans le processus. Le fichier est téléchargé dans le répertoire, mais sans l'extension de fichier, c'est-à-dire 123456789.est téléchargé.

if ( 0 < $_FILES['file']['error'] ) {
echo 'Error: ' . $_FILES['file']['error'] . '<br>';
}


else{
$temp = explode(".",$_FILES["file_to_upload"]["name"]);
$newfilename = sha1(uniqid(mt_rand(), true)) . '.' .end($temp);
move_uploaded_file($_FILES["file_to_upload"]["tmp_name"], "uploads/" . 
$newfilename);  
}

if (move_uploaded_file($_FILES['file']['tmp_name'], 'files/' . 
$newfilename));{
echo "File uploaded successfully!!";
}

J'ai également essayé ce qui suit en vain:

if ( 0 < $_FILES['file']['error'] ) {
echo 'Error: ' . $_FILES['file']['error'] . '<br>';
}



else{
$temp = explode(".",$_FILES["file_to_upload"]["name"]);
$extension = pathinfo($temp, PATHINFO_EXTENSION);
$newfilename = sha1(uniqid(mt_rand(), true)) . '.' .$extension;
move_uploaded_file($_FILES["file_to_upload"]["tmp_name"], "uploads/" . 
$newfilename);  
}



if (move_uploaded_file($_FILES['file']['tmp_name'], 'files/' . 
$newfilename));{
echo "File uploaded successfully!!";
}

Quelqu'un peut-il voir où je vais mal? Tout le reste fonctionne.

php
-1
spbrad 19 avril 2017 à 23:08

3 réponses

Meilleure réponse

J'avais déclaré le répertoire comme "uploads" dans une partie du code et "files" dans une autre. Idem avec "fichier" et "fichier à télécharger". Erreur stupide.

J'ai également supprimé exploser et ajouté une ligne de code suggérée par GentlemanMax.

Solution:

if ( 0 < $_FILES['file']['error'] ) {
echo 'Error: ' . $_FILES['file']['error'] . '<br>';
}


else{  
$ext = pathinfo(($_FILES["file"]["name"]), PATHINFO_EXTENSION);
$newfilename = sha1(uniqid(mt_rand(), true)).'.'.$ext;
move_uploaded_file($_FILES["file"]["tmp_name"], "files/" . 
$newfilename);  
}


if (move_uploaded_file($_FILES['file']['tmp_name'], 'files/' . 
$newfilename));{
echo "File uploaded successfully!!";
}
0
spbrad 19 avril 2017 à 21:08

Votre problème est ici:

$temp = explode(".",$_FILES["file_to_upload"]["name"]);
$extension = pathinfo($temp, PATHINFO_EXTENSION);

$ temp devient un tableau et pathinfo () attend une chaîne. Vous devriez voir cela dans votre journal des erreurs. À la place, faites ceci:

$extension = pathinfo($_FILES["file_to_upload"]["name"], PATHINFO_EXTENSION);
0
Walker Boh 19 avril 2017 à 20:14

pathinfo() prend une chaîne comme premier paramètre, vous lui passez un tableau. Essayez de changer:

$extension = pathinfo($temp, PATHINFO_EXTENSION);

À

$extension = pathinfo($_FILES["file_to_upload"]["name"], PATHINFO_EXTENSION);
3
TheGentleman 19 avril 2017 à 20:13