Usa move_uploaded_file() en lugar de copy()
Podrías usar también en lugar de $HTTP_POST_FILES usar $_FILES (si usas PHP 4.1.0 en adelante) . .es más seguro.
El "safe mode" lo puedes controlar con la función safe_mode del php.ini (si es que tienes acceso a el) .. También puedes configurar otras directivas (en modo safe mode a ON) para permitir a PHP moverse por el /tmp (o directorio donde PHP sube sus archivos de forma temporal y que define: upload_tmp_dir de tu php.ini) por ejemplo en open_base_dir (añadiendo esa ruta ahí) .. o en otras afines al safe_mode_?¿?¿ que hay.
(No tienes acceso al PHP.ini si usas un servicio de hosting).
Por otro lado .. tanto con la función move_uploaded_file() .. como en copy() . .HAY que indicar una ruta absoluta y el nombre del archivo que quedará una vez que lo suba . .no puedes "asumir" que la función le va a dar el mismo nombre que el archivo que subió ..
Código PHP:
copy($HTTP_POST_FILES['userfile'] ['tmp_name'], "catalogo/prueba/".$HTTP_POST_FILES['userfile']['name']);
Y .. OJO con el /catalogo ... ese / entiende un S.O. Linux (*NIX) que te refieres al "RAIZ" (root) de ese sistema de archivos de ese servidor .. NO se refiere a lo que tu ves como "raiz" al entrar por FTP a tu sitio .. Por eso debes indicar una ruta absoluta (con $_SERVER['DOCUMENT_ROOT'] o en tu phpinfo() podrías ver cual es .. También lo ves en ese mensaje de error que te ha dado dicha función:
/home/users/uks22202/html/zenimages.co.uk/
Por ende .. lo mejor sería:
Código PHP:
move_uploaded_file($HTTP_POST_FILES['userfile'] ['tmp_name'], "/home/users/uks22202/html/zenimages.co.uk/
catalogo/prueba/".$HTTP_POST_FILES['userfile']['name']);
(y recuerda que si usas PHP 4.1.0 o mayor . usa $_FILES en lugar del $HTTP_POST_FILES ..)
Un saludo,