hola. a ver, tengo la siguiente aplicación mediante la cual, un usuario, al registrarse en la aplicación, automáticamente se crea una carpeta o directorio en el servidor con su nombre, y a esta carpeta le asigno permisos 0777.
el código que uso para procesar el formulario de registro, cuyos campos son nombre, apellidos, empresa, email y password, es este:
Código PHP:
$cnx = mysql_connect("servidor", "user", "pass");
mysql_select_db("basededatos", $cnx);
$nombre=$_POST['nombre'];
$apellidos=$_POST['apellidos'];
$empresa=$_POST['empresa'];
$email=$_POST['email'];
$password=$_POST['password'];
/////con este código compruebo si el usuario o el email ya existen
$cnx = mysql_query("select count(*) from tabladelabase where nombre='$nombre' or email='$email'");
if(mysql_result($cnx,0)) {
echo 'El usuario ya existe en la base de datos o ya está registrado el email. Haz click <a href="javascript:history.back()">aquí</a> para regresar.' ; die();
} else {
$password = md5(md5($_POST["password"]));
////creo el directorio
if(!file_exists($DESTINO)) //comprobamos que existe o no el directorio
{
///creo la carpeta con ese nombre y doy los permisos que quiero
$DESTINO="$nombre";
mkdir($DESTINO,0777);
}
////por último, introducimos en la tabla de la base de datos los campos
mysql_query("INSERT INTO tabladelabase (nombre,apellidos,empresa,email,password) VALUES('$nombre','$apellidos','$empresa','$email','$password')");
////hecho esto, envío un email al usuario con sus datos de acceso.
mail($email,"Ya estás registrado!","Hola, $nombre $apellidos!\n\nHa sido registrado!\n\nSu nombre de usuario es: $nombre\nSu contraseña es: ".$_POST["password"]."\n\nPuedes ingresar mediante el siguiente link: http://www.miweb.com/login\n\nGracias por registrarte!\nExitos","From: <[email protected]>\r\n");
echo 'Has sido registrad@. Haz click aquí <a href="index.php">aquí</a> para regresar a la página principal.'; die();
}
hecho esto, y creado ese directorio, el usuario puede acceder mediante un panel a su área (directorio creado) comprobando previamente su nombre de usuario y password. una vez validado esos dos conceptos, el usuario puede subir archivos mediante un formulario y los archivos subidos se almacenan en su carpeta o directorio. a su vez, se registran en una tabla de una base de datos, con los campos resumen, que recoge una breve descripción del documento subido y documento, que recoge la ruta que tiene el archivo en el servidor. para procesar esto lo hago así:
Código PHP:
session_start();
$_SESSION['nombre']=$nombre;
$_SESSION['apellidos']=$apellidos;
$cnx = mysql_connect("localhost", "user", "pass");
mysql_select_db("basededatos", $cnx);
if($_post['archivo']="")
{
$ruta="no imagen" ;
$error=false;
}
else
{
$error=false;
if($_FILES['archivo']['name'])
{
$local = $_FILES['archivo']['name'];
$remoto = $_FILES['archivo']['tmp_name'];
$extension = explode(".", $local);
$n = count($extension)-1;
$miext = array('doc', 'xls', 'ppt', 'pps', 'jpg', 'gif', 'bmp', 'tif', 'mdb', 'pdf', 'exe', 'txt', 'htm', 'html', 'avi', 'mp3', 'mpg', 'wav');
if(in_array($extension[$n], $miext))
{
// La variable para la BD
$ruta = "modulos/$nombre/" . $local;
if(is_uploaded_file($remoto))
{
if(!move_uploaded_file($remoto, $ruta))
{
$error=true;
}
}
else
{
$error=true;
}
}
else
{
$error=true;
}
}
}
if(!$error)
{
$resumen=$_POST['resumen'];
mysql_query("INSERT INTO tabla (documento,resumen) VALUES('$ruta','$resumen')");
header("Location: index.php");
}
}
luego, mediante un enlace, se puede acceder a la visualización de los archivos subidos. el problema aparece cuando el nombre del usuario (y por lo tanto, el nombre del directorio) lleva acento. por ejemplo, si un usuario se llama jesús. el directorio también se llamará jesús y lo creará y dejará subir correctamente a él los archivos y se guardan en esa carpeta. pero luego, al darle a ver, no los carga. da error. dice que no los encuentra. por qué es esto?