Je n'ai pas prêté beaucoup d'attention au téléchargement de fichiers auparavant. Hier, j'en ai fait un simple, mais j'ai constaté qu'il y avait pas mal de problèmes.
Le code du programme au début est le suivant :
téléchargerimg.php
<?php
//Déterminez s'il s'agit d'une interface de téléchargement ou d'une interface d'implémentation. S'il s'agit d'une interface de téléchargement, affichez la page HTML suivante.
if(!$_POST['UploadAction']):
?>
<html>
<tête>
<titre></titre>
</tête>
<corps><table><centre>
<form enctype="multipart/form-data" name="SubmitForm" action="" method="post">
<input type="hidden" name="UploadAction" value="1">
<tr><td><input name="UploadFile" type="file" size="30"></td></tr>
<tr><td><input type="submit" name="submit" value="Upload"></td>
<td><input type="reset" name="reset" value="Reset"></td></tr>
</form>
</center></table></body>
</html>
<?php
//S'il s'agit d'une page d'implémentation, afficher la page HTML suivante et activer le script PHP
sinon :
?>
<html>
<tête>
<titre></titre>
</tête>
<corps>
<?php
//www.knowsky.com initialise le statut de UploadAction
$UploadAction=0;
$UploadFile=$_POST['UploadFile'];
if(($UploadFile!="aucun") && ($UploadFile!=""))
{
$UploadPath=$_SERVER['DOCUMENT_ROOT']."\"
si (!is_writeable($UploadPath))
{
echo "Le répertoire $UploadPath n'est pas accessible en écriture !";
}
autre
{
echo "Le répertoire $UploadPath est accessible en écriture !";
}
$FileName=$UploadFile_name;
si($UploadFile_size<1024)
{
$FileSize=(string)$UploadFile_size."byte";
}
elseif($UploadFile_size<(1024*1024))
{
$FileSize=number_format((double)($UploadFile_size/1024),1)."KB";
}
autre
{
$FileSize=number_format((double)($UploadFile_size/(1024*1024)),1)."Ko";
}
si(!file_exists($UploadPath.$FileName))
{
si(move_uploaded_file($UploadFile,$UploadPath.$FileName))
{
echo "Fichier $UploadFile_name ($FileSize) téléchargé avec succès !";
}
autre
{
echo "Le téléchargement du fichier $UploadFile_name ($FileSize) a échoué !";
}
unlink($UploadPath.$FileName);
}
autre
{
echo "Le fichier $UploadFile_name existe déjà !";
}
}
autre
{
echo "Vous n'avez sélectionné aucun fichier à télécharger, ou le fichier téléchargé dépasse $MAX_FILE_SIZE !";
}
?>
<br><a href="uploadimg.php">Retour</a>
</corps>
</html>
<?php
endif
?>
Après l'avoir exécuté, j'ai constaté que le téléchargement n'avait aucun effet et je ne pouvais même pas accéder à la page d'implémentation. Après avoir recherché et demandé, j'ai appris que $_FILES était nécessaire pour obtenir le fichier téléchargé,
j'ai donc apporté quelques modifications :
$UploadFile=$_FILES['UploadFile']['tmp_name'];
$UploadFile_size=$_FILES['UploadFile']['size'];
$UploadFile_name=$_FILES['UploadFile']['name'];
$FileName=strtolower($UploadFile_name);
Je pensais que ce serait fait maintenant, mais un message d'erreur est apparu :
Avertissement : move_uploaded_file(F:Serverwww) : échec d'ouverture du flux : autorisation refusée dans F:Serverwwweooolfinishuploadimg.php à la ligne 76
Avertissement : move_uploaded_file() : Impossible de déplacer 'E:WINDOWSTEMPphp34.tmp' vers 'F:\Server\www' dans F:Serverwwweooolfinishuploadimg.php à la ligne 76
Le téléchargement du fichier *****(****octets) a échoué !
Et je déboguais sur le système WIN, donc il ne devrait pas y avoir de problème d'autorisation de fichier. J'ai regardé, regardé et réfléchi, mais je n'arrivais toujours pas à comprendre, j'ai posté des messages sur Lao Lao et Joy pour obtenir de l'aide, mais je n'ai pas obtenu la bonne réponse. Un simple téléchargement de fichier m'a pris plus d'une journée et je n'ai toujours pas réussi à le faire, ce qui m'a rendu très frustré de ne pas trouver d'erreurs similaires à la mienne sur Internet.
En fin de compte, je n'avais pas d'autre choix que de réfléchir à la raison pour laquelle je pouvais réussir à télécharger des pièces jointes lors du débogage avec sablog ? J'ai donc soigneusement examiné le code original pour télécharger la pièce jointe sur sablog et j'ai apporté les modifications suivantes en fonction du code :
fonction getextension ($ nom de fichier) {
return substr(strrchr($filename, "."), 1);
}
$extension=getextension($FileName);
if(move_uploaded_file($UploadFile,$UploadPath."temp.".$extension))
//unlink($UploadFile);
unlink($UploadPath."temp.".$extension);
Les résultats ont été reçus immédiatement et le téléchargement a réussi !
J'utilise ici unlink($UploadPath."temp.".$extension); pour supprimer immédiatement les fichiers téléchargés dans l'espace et économiser de l'espace.