Le type <INPUT TYPE="file" NAME="xx"> n'est utilisable en pratique que dans les formulaires de méthode POST. Ce type de formulaire utilise un encodage du contenu de type "multipart/x-form", où chaque variable du formulaire est transmise dans une pièce du fichier POST.
Chaque pièce du fichier POST possède son propre Content-Type. Pour une formulaire classique, les éléments INPUT sont transmis avec un type de contenu "text/plain" (comme si chaque valeur était une pièce jointe d'un Email, le nom de la pièce jointe étant le nom de la variable précisépar l'attribut name="" dans chaque élément du formulaire)
Au contraire, pour le type <INPUT type="file" name="xx">, la variable "xx" indiquée est transmise avec le type MIME associé au fichier à transmettre (c'est le navigateur qui transmet automatiquement ce type MIME en fonction de l'extension du fichier envoyé). Le formulaire n'envoie donc pas le nom du fichier (sauf dans un entête MIME de la pièce jointe), mais plutôt le contenu du fichier.
Le serveur reçoit le fichier dans une variable comme une autre, sauf que le type MIME de la valeur n'est pas forcément "text/plain" (sauf si le fichier envoyé est un fichier texte "*.txt".) Le contenu entier du fichier figure donc simplement dans la variable en PHP. S'il y a des limites à la longueur des données autorisées dans une variable PHP, alors cette limite fixe la taille maximale autorisée pour le fichier renvoyé (PHP peut ainsi tronquer le fichier reçu ou signaler une erreur).