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");
}
}
Bien. todo lo hace correctamente. el problema aparece a la hora de los permisos. resulta que, aunque yo cree el directorio con permisos plenos (0777), me voy al servidor y le da únicamente 0755, y a los archivos subidos, le da sólamente permisos 0600. pero yo quiero que tanto los archivos subidos como los directorios, tengan permiso 0777. cómo hago esto? qué hago mal?