Que tal, tu problema es porque por defecto PHP tiene un limite de 2mb por archivo a subir, mas a parte, también existe un limite de 30 segundos para tener en ejecución un archivo PHP (el archivo se mantiene ejecutando mientras se sube el archivo), si se sobre pasa cualquiera de las limitaciones se cancela la subida de archivos, puedes ampliar esta limitación desde el mismo archivo usando la función
ini_set() y las variables "upload_max_filesize", "post_max_size" y "max_execution_time" o desde el archivo php.ini...
Por otro lado, te hago unas recomendaciones, es mejor usar
isset() o
empty() para verificar si una variable existe, ya que si haces una comprobación directamente con if este generará un error a nivel "notice" o como mucho "alert", pero sea cual sea el nivel de error al final... es un error >.<
Con referencia al anterior, es mejor comprobar si hay un archivo a subir usando is_uploaded_file() que con cualquier otra función, ya que los archivos pueden ser "inyectados" (no recuerdo en este momento el nombre correcto), por lo tanto la función verifica que el archivo sea subido realmente por un formulario con metodo POST y que no provenga desde otra fuente...
Si vas a subir imagenes te recomiendo encarecidamente que uses otro metodo para saber si es una imagen REAL, ya que la variable $_FILES['archivo']['type'] es proporcionada por el navegador, y este se basa sobre la extención del archivo y no sobre el mime-type real, por otro lado, esta variable es manipulable de manera muy facil, si son imagenes puedes usar la función
getimagesize() la cual retornará información del archivo, como su alto, su ancho, si tipo (real) y otros 4 elementos mas "específicos"
Y por ultimo, no veo que "guardes" el archivo en ningún lugar de tu código, recuerda que PHP sube el archivo a una carpeta temporal, de hay tu tienes que moverla a su destino final para que pueda ser manipulable y accesible, para eso es necesario usar
move_uploded_file()