Bueno, al final ya lo e solucionado!!
el indice debia ir al final como yo lo tenia antes porque si no no me reconocia los archivos, y el problema era al escribir la ruta, que no me cogia el nombre del archivo al final y el fallo que me daba al principio (failed to open stream: Is a directory in..) era porque al no cojerme bien el nombre del archivo lo que intentaba mover era un directorio y por eso me daba el error.
Al final mi codigo a quedado asi, por si a alguien le sirve de ayuda:
Código PHP:
<?php
//Preguntamos si nuetro arreglo 'archivos' fue definido
$album=$_POST["album"];
chmod("albums/".$_POST["album"]."/images/",0777);
if (isset ($_FILES["archivos"])) {
//de se asi, para procesar los archivos subidos al servidor solo debemos recorrerlo
//obtenemos la cantidad de elementos que tiene el arreglo archivos
$tot = count($_FILES["archivos"]["name"]);
echo $tot;
print_r($_FILES);
//este for recorre el arreglo
for ($i = 0; $i < $tot; $i++){
//con el indice $i, poemos obtener la propiedad que desemos de cada archivo
//para trabajar con este
if(is_uploaded_file($_FILES["archivos"]["tmp_name"][$i])){
$ruta= 'albums/'.$_POST["album"].'/images/'.$_FILES["archivos"]["name"][$i];
if(move_uploaded_file($_FILES["archivos"]["tmp_name"][$i],$ruta)){
echo "todo ok /n <a href=\"$ruta\"> imgen </a>";
}else{
echo "vaya truño";
}
//$foto = 'albums/'.$album.'/images'.$_FILES["archivos"]["name"][$i];
echo " <br /> bieeeenn <br />";
}else{
echo "<br /> maaal <br />";}
$tmp_name = $_FILES["archivos"]["tmp_name"][$i];
$name = $_FILES["archivos"]["name"][$i];
echo("<b>Archivo </b> $key ".$ruta);
echo("<br />");
echo("<b>el nombre original:</b> ");
echo($name);
echo("<br />");
echo("<b>el nombre temporal:</b> \n");
echo($tmp_name);
echo("<br />");
}
}
?>
Gracias por todo