Résumons plusieurs problèmes souvent rencontrés lors du téléchargement de fichiers en PHP. Vous n'avez pas besoin de les rechercher lorsque vous les utiliserez à l'avenir.
1. Créez d'abord le fichier de téléchargement le plus simple
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <form action="upload_file.php" method="post" enctype="multipart/form-data"> <label for="file">Filename:</label> <input type="file" name="file" id="file" /> <br /> <input type="submit" name="submit" value="Submit" /> </form> </body> </html>
<?php if (($_FILES["file"]["size"] < 20000) { if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; if ( file_exists ("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; } } } else { echo "Invalid file"; } ?>
2. Ensuite, comprenez la super variable globale $_FILES Values<. 🎜>
$_FILES['userfile']['name'] $_FILES['userfile']['type'] $_FILES['userfile']['size'] $_FILES['userfile']['tmp_name'] $_FILES['userfile']['error']
Fichier téléchargé avec succès.
UPLOAD_ERR_INI_SIZE Sa valeur est 1 et le fichier téléchargé dépasse la valeur limitée par l'option upload_max_filesize dans php.ini.
UPLOAD_ERR_FORM_SIZE Avec une valeur de 2, la taille du fichier téléchargé dépasse la valeur spécifiée par l'option MAX_FILE_SIZE dans le formulaire HTML. UPLOAD_ERR_PARTIAL Sa valeur est 3, le fichier n'est que partiellement téléchargé. UPLOAD_ERR_NO_FILE Sa valeur est 4, aucun fichier n'a été téléchargé. UPLOAD_ERR_NO_TMP_DIR a une valeur de 6 et le dossier temporaire est introuvable. Introduit dans PHP 4.3.10 et PHP 5.0.3. UPLOAD_ERR_CANT_WRITE Sa valeur est 7, l'écriture du fichier a échoué. Introduit dans PHP 5.1.0.3. De nombreuses situations : le type de fichier téléchargé doit être strictement jugé
Nous savons qu'utiliser $_FILES['userfile']['type'] pour juger le type de fichier téléchargé est une approche très imprudente, car le jugement est basé sur le suffixe du fichier. N'importe qui peut changer le suffixe d'un fichier mp3 en jpg et le télécharger déguisé en image. recommande d'utiliser l'extension PHP php_4. Scénario 1 :Renommer automatiquement après avoir téléchargé un fichier du même nom
if (file_exists("./upload/" . $_FILES["file"]["name"])) { do{ $suffix =""; $suffix_length = 4; $str = "0123456789abcdefghijklmnopqrstuvwxyz"; $len = strlen($str)-1; //文件名后追加4个随机字符 for($i=0 ; $i<$suffix_length; $i++){ $suffix .= $str[rand(0,$len)]; } $upload_filename = $_FILES['file']['name']; $filename = substr($upload_filename,0,strrpos($upload_filename,".")).$suffix.".".substr($upload_filename,strrpos($_FILES["file"]["name"],".")+1); }while(file_exists("./upload/".$filename)); move_uploaded_file($_FILES["file"]["tmp_name"],"./upload/" . $filename); }else{ move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); }
6. Scénario 3 :
$structure = './'.date("Y").'/'.date("m").'/'.date("d").'/'; if (!mkdir($structure, 0777, true)) { die('Failed to create folders...'); } move_uploaded_file($_FILES["file"]["tmp_name"],$structure . $_FILES["file"]["name"]);
<form action="" method="post" enctype="multipart/form-data"> <p>Pictures: <input type="file" name="pictures[]" /> <input type="file" name="pictures[]" /> <input type="file" name="pictures[]" /> <input type="submit" value="Send" /> </p> </form>
<?php foreach ($_FILES["pictures"]["error"] as $key => $error) { if ($error == UPLOAD_ERR_OK) { $tmp_name = $_FILES["pictures"]["tmp_name"][$key]; $name = $_FILES["pictures"]["name"][$key]; move_uploaded_file($tmp_name, "data/$name"); } } ?>
array(1) { ["upload"]=>array(2) { ["name"]=>array(2) { [0]=>string(9)"file0.txt" [1]=>string(9)"file1.txt" } ["type"]=>array(2) { [0]=>string(10)"text/plain" [1]=>string(10)"text/html" } } }
array(1) { ["upload"]=>array(2) { [0]=>array(2) { ["name"]=>string(9)"file0.txt" ["type"]=>string(10)"text/plain" }, [1]=>array(2) { ["name"]=>string(9)"file1.txt" ["type"]=>string(10)"text/html" } } }
7 . Parfois :
function perse_array($vector) { $result = array(); foreach($vector as $key1 => $value1) foreach($value1 as $key2 => $value2) $result[$key2][$key1] = $value2; return $result; } $upload = perse_array($_FILES["upload"]);
Configurer le serveurModifier la taille maximale du fichier de téléchargementD'abord, sur le formulaire
Ensuite, vous devez également ajuster la configuration sur le serveur
php.ini :
max_execution_time = 30 Le temps maximum d'exécution de chaque script, en secondes
max_input_time = 60. Le temps que chaque script peut consommer, l'unité est également en secondesmemory_limit = 128M, c'est la mémoire maximale consommée par le script en cours d'exécution
post_max_size = 8M, les données maximales pour la soumission du formulaire sont de 8M, cet élément ne limite pas le téléchargement d'un seul fichier. La taille est limitée aux données soumises pour l'ensemble du formulaire.
upload_max_filesize = 2M, la taille maximale autorisée des fichiers téléchargés
nginx :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!