1- En $_GET se almacenan todas las variables incluidas en la URL, independientemente de si llegan por formulario (metodo GET) o por click en un enlace.
2- En $_POST se almacenan todos los campos de un formulario enviado por metodo POST
3- En $_FILES se almacena toda la informacion de archivos subidos,
solo se reciben por metodo POST y enctype="multipart/form-data", nunca por metodo GET
Si envias un archivo y ademas tienes otros campos como para asignarle titulo o nombre, habra contenido tanto en $_POST como en $_FILES
Imagina un formulario asi:
Código:
<form method="post" action="subir.php?paso=3" enctype="multipart/form-data">
Titulo: <input type="text" name="titulo" value="" /><br />
Archivo: <input type="file" name="archivo" /><br />
<input type="submit" value="Enviar" />
</form>
En ese ejemplo recibiras valores en $_GET, $_POST y en $_FILES, por lo que tendrias que validar cada variable esperada antes de procesar el formulario y el count($_xxxx) no resulta tan util.