Esto muy raro, lo que te recomiendo es poner echo's en el código para ver en donde se esta atorando, es decir:
Código PHP:
if (is_dir($destino))
echo "El directorio destino ya existe.<br>";
else
{
mkdir("$destino");
echo "creo carpeta";//
}
if ($vcarga = opendir($origen))
{
echo "Directorio: $origen<br><br>";
echo "Fichero(s):<br><br>";
//....
if (is_dir($origen."/".$file))
{
echo "Entra a funcion recursiva";//
copy_dir($origen."/".$file,$destino."/".$file);
}
else
{
if(copy($origen."/".$file, $destino."/".$file))
echo "<b>$file</b> se copió con éxito al directorio $destino .<br>";
else
echo "Error"; //
}