Esa no es la razón, si de verdad buscas entender lo que te sucede consulta el manual.
http://php.net/manual/es/features.file-upload.php
Ahí se explica como se manejan los formularios de upload y posibles errores, debes depurar lo que hace tu código, observar si en lugar de "Error al subir archivo" puedes obtener un mensaje de error menos inútil.
Sobre todo esta parte, que en ningún lugar de tu código compruebas el error real:
http://www.php.net/manual/es/feature...oad.errors.php
Además de que debes usar move_uploaded_file() y no copy(), pues la primer función está diseñada exactamente para esto, y copy() puede acarrear otro tipo de problemas.
En definitiva, no sabes lo que estás haciendo, por favor lee el manual.