SoloCodigo

Programación Web y Scripting => PHP => Mensaje iniciado por: zaida20 en Viernes 8 de Junio de 2007, 13:56

Título: Dar Permisos A Una Carpeta
Publicado por: zaida20 en Viernes 8 de Junio de 2007, 13:56
¿Alguien puede decrime cómo puedo dar permisos de escritura a una carpeta para poder subir imágenes a la bd?

Muchas gracias: :adios:
Título: Re: Dar Permisos A Una Carpeta
Publicado por: Altareum en Viernes 8 de Junio de 2007, 16:05
Los permisos de escritura en una carpeta los necesitas para guardar (o escribir) archivos dentro de la misma. Para poner archivos en la base de datos, no necesitas escribir en una carpeta.

Si la carpeta no la creas desde php, o mejor dicho, si quieres hacerlo a mano, todos los clientes ftp tienen una opción para cambiar los permisos de las carpetas y archivos.

Igualmente para cambiar los permisos de una carpeta con php, en un servidor linux, usas la función chmod:

Por seguridad, intenta primero:
chmod('ruta/carpeta','0700');

O sino, usa:
chmod('ruta/carpeta','0777');


Altareum.
Título: Re: Dar Permisos A Una Carpeta
Publicado por: zaida20 en Lunes 11 de Junio de 2007, 09:47
Antes de nada decirte que muchas gracias, y uso Windows. El error de los permisos ya no me sale. En teoría hace todo bien porque no me aparece ningún error,y el echo lo hace correcto, pero si yo miro la carpeta dónde deben copiarse las imágenes, me aparece vacía ¿Sabes porqué es? Te dejo el código por si puedes ayudarme a ver el error:


Código: Text
  1. <?php
  2. if (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name']))
  3. {
  4.   echo $HTTP_POST_FILES['userfile']['name'];
  5.   chmod('C:/Archivos de programa/Apache Group/Apache/htdocs/fundacion_utopia/subir_imagenes/imagenes','0700');
  6.   move_uploaded_file($HTTP_POST_FILES['userfile']['name'],"C:/Archivos de programa/Apache Group/Apache/htdocs/fundacion_utopia/subir_imagenes/imagenes")&#59;
  7. }
  8. else
  9. {
  10.   echo "Psible file upload atrrack. Filename: " . $HTTP_POST_FILES['userfile']['name'];
  11. }
  12.  
  13. ?>
  14.  

Muchas gracias y espero tu ayuda.
Saludos: :hola:
Título: Re: Dar Permisos A Una Carpeta
Publicado por: zaida20 en Lunes 11 de Junio de 2007, 11:56
He conseguido resolverlo, éste es mi código:

Código: Text
  1. <?php
  2. $ruta=chmod('./imagenes/','0777');
  3. //$ruta="./imagenes/";
  4. $uploadfile_temporal=$_FILES['fichero']['tmp_name'];
  5. $uploadfile_nombre=$ruta.$_FILES['fichero']['name'];
  6.  
  7. if (is_uploaded_file($uploadfile_temporal))
  8. {
  9.   move_uploaded_file($uploadfile_temporal,$uploadfile_nombre);
  10.   echo "ok";
  11. }
  12. else
  13. {
  14. echo "error";
  15. }
  16. $directorio=opendir("imagenes/");
  17. while($ficheros=readdir($directorio))
  18. {
  19.   $url="imagenes/".$ficheros;
  20.   echo "<img src=".$url.">";
  21. }
  22. ?>
  23.  

El problema es que me funciona sólo localmente, al subirlo al servidor no funciona. Alguien puede decirme porqué?
Muchas gracias  :hola:
Título: Re: Dar Permisos A Una Carpeta
Publicado por: zaida20 en Martes 12 de Junio de 2007, 14:15
Nadie puede ayudarme??? :(
Título: Re: Dar Permisos A Una Carpeta
Publicado por: Altareum en Martes 12 de Junio de 2007, 16:49
Qué parte del código no funciona en el servidor ???? Te da algún tipo de error??

Altareum.
Título: Re: Dar Permisos A Una Carpeta
Publicado por: zaida20 en Miércoles 13 de Junio de 2007, 09:45
hola, muchas gracias por contestarme, no me da ningín error, hace todo bien, sólo que no me visualiza las imágenes y no se por qué.

Saludos  :hola: gracias y espero que puedas ayudarme
Título: Re: Dar Permisos A Una Carpeta
Publicado por: Avalon en Miércoles 13 de Junio de 2007, 13:10
Hola. Solo un pequeño comentario respecto a tu código. No veo qué necesidad puede haber de cambiar los permisos de la carpeta imagenes cada vez que subas imágenes al servidor. Mejor sería hacerlo una sola vez desde tu cliente de FTP como dice Altareum.

De esta forma te ahorrarías el tener que ejecutar la función chmod en tu código, la cuál por cierto estás empleando de forma incorrecta ya que esa función retorna VERDADERO (1) o FALSO (0) dependiendo de si ha tenido éxito al hacer el cambio de permisos, de manera que cuando haces esto

Código: Text
  1. $ruta=chmod('./imagenes/','0777');
  2.  

$ruta no va a contener la ruta donde quieres guardar las imágenes sino que va a contener un 0 o un 1.

Y luego ese 0 o 1 lo concatenas con el nombre original del archivo

Código: Text
  1. $uploadfile_nombre=$ruta.$_FILES['fichero']['name'];
  2.  

y más adelante

Código: Text
  1. move_uploaded_file($uploadfile_temporal,$uploadfile_nombre);
  2.  

con lo que las imágenes no se están subiendo a la carpeta imagenes sino a la carpeta donde tienes tu archivo php, y en caso de que no existan los permisos necesarios esas imágenes no se guardarán en el servidor.

Espero que te sirva el comentario.

Salu2,
Avalon
Título: Re: Dar Permisos A Una Carpeta
Publicado por: zaida20 en Miércoles 13 de Junio de 2007, 15:32
Hola Avalon, me di cuenta de lo del chmod y ahora tengo el código así pero sigue  sin funcionar:
 
Código: Text
  1.  
  2. chmod('imagenes/',0777);
  3. if($_FILES['fichero']['name']!=NULL)
  4. {
  5.   $uploadfile_temporal=$_FILES['fichero']['tmp_name'];
  6.   $uploadfile_nombre="imagenes/".$_FILES['fichero']['name'];
  7.   $ruta_foto='imagenes/'.$_FILES['fichero']['name'];//recoge la ruta de la imagen(carpeta y nombre)
  8.  
  9.   if (is_uploaded_file($uploadfile_temporal))
  10.   {
  11.     move_uploaded_file($uploadfile_temporal,$uploadfile_nombre);
  12.     //echo "ok";
  13.   }
  14.   else
  15.   {
  16.     echo "error";
  17.   }
  18. //insertamos las imágenes en la bd
  19.   $sql="INSERT INTO img (foto) VALUES ('$ruta_foto')";
  20.     $res = mysql_query($sql);
  21.     if (!$res)
  22.       echo "Error al ejecutar la consulta";
  23. }
  24. //hacemos la consulta
  25. $obtener_foto="select foto, id from img";
  26. $i=0;
  27. $consulta=mysql_query($obtener_foto,$conexion)or die(mysql_error());
  28. if($consulta!=NULL)
  29. {
  30.   if(mysql_num_rows($consulta)!=0)
  31.   {
  32.       while($row=mysql_fetch_array($consulta))
  33.       {
  34.       $imagen[$i]=$row['foto'];
  35.       $id=$row['id'];
  36.       $size= getimagesize ($imagen[$i]);
  37.       $ancho[$i]= (int) ($size [0] * 0.3);
  38.       $alto[$i]= (int) ($size [1] * 0.3);
  39.       $i++;
  40.       }
  41.   }
  42. }
  43.  
  44. ?>
  45.  
  46. <html>
  47. <head>
  48. <title>Documento sin título</title>
  49. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  50. </head>
  51.  
  52. <body>
  53. <?php
  54. $i=0;
  55. while($imagen[$i]!=NULL)
  56. {
  57. ?>
  58. <p><img src="<?php echo $imagen[$i];?>" width="<?php echo $ancho[$i]; ?>" height="<?php echo $alto[$i];?>">
  59.   <?php
  60. $i++;
  61. }
  62. ?>
  63.  

Espero que puedas ayudarme
Muchas gracias!!!!!!!!
Título: Re: Dar Permisos A Una Carpeta
Publicado por: Avalon en Miércoles 13 de Junio de 2007, 16:46
Faltaría hacer la conexión a la base de datos (mysql_connect) y seleccionar la base de datos (mysql_select_db) antes de hacer el INSERT. El resto parece correcto.

Salu2,
Avalon
Título: Re: Dar Permisos A Una Carpeta
Publicado por: zaida20 en Jueves 14 de Junio de 2007, 09:52
el código de conexion a la base de datos lo tengo puesto es que lo obvie en el código que te puse ;) , este está completo:

Código: Text
  1. <?php
  2. $dp_di="localhost";
  3. $db_usuario="espia";
  4. $clave_db='ESPIAAA';
  5. $conexion=mysql_connect($dp_di,$db_usuario,$clave_db);
  6. if($conexion==NULL)
  7. {
  8.   printf("Error");
  9. }
  10. //conectamos con la base de datos utopia
  11. $db='utopia2';
  12. mysql_select_db($db,$conexion)or die("No se puede seleccionar bd");
  13.  
  14. if (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name']))
  15. {
  16.   echo $HTTP_POST_FILES['userfile']['name'];
  17.   chmod('C:/Archivos de programa/Apache Group/Apache/htdocs/fundacion_utopia/subir_imagenes/imagenes','0700');
  18.   move_uploaded_file($HTTP_POST_FILES['userfile']['name'],"C:/Archivos de programa/Apache Group/Apache/htdocs/fundacion_utopia/subir_imagenes/imagenes");
  19. }
  20. else
  21. {
  22.   echo "Psible file upload atrrack. Filename: " . $HTTP_POST_FILES['userfile']['name'];
  23. }
  24.  
  25. ?>
  26.  

No consuigo encontrar el error y saber porqué no funciona  :blink: , de todas formas   :gracias:
Saludos:  :hola:
Título: Re: Dar Permisos A Una Carpeta
Publicado por: Avalon en Jueves 14 de Junio de 2007, 13:20
Para encontrar el error tienes que intentar acotar el problema. Ya nos has dicho que no funciona, pero que es lo que no funciona exactamente? No se guardan las imágenes? No se inserta el registro en la base de datos? Donde termina la ejecución del código (si es que se interrumpe)?

Decías más arriba que habías conseguido que el script funcionara localmente. Si en el script trabajas con rutas absolutas como

Citar
chmod('C:/Archivos de programa/Apache Group/Apache/htdocs/fundacion_utopia/subir_imagenes/imagenes','0700');

es lógico que solo funcione localmente porque con casi toda probabilidad la ruta va a ser distinta en el servidor.
Título: Re: Dar Permisos A Una Carpeta
Publicado por: zaida20 en Viernes 15 de Junio de 2007, 09:58
Lo siento quizás no me expliqué bien, el código correcto es éste:

Código: Text
  1. <?php
  2. //conectamos con base de datos
  3. $dp_di="localhost";
  4. $db_usuario="espia";
  5. $clave_db='ESPIAAA';
  6. $conexion=mysql_connect($dp_di,$db_usuario,$clave_db);
  7. if($conexion==NULL)
  8. {
  9.   printf("Error");
  10. }
  11. //conectamos con la base de datos utopia2
  12. $db='utopia2';
  13. mysql_select_db($db,$conexion)or die("No se puede seleccionar bd");
  14.  
  15. chmod('./imagenes/','0777');
  16. if($_FILES['fichero']['name']!=NULL)
  17. {
  18.   $uploadfile_temporal=$_FILES['fichero']['tmp_name'];
  19.   $uploadfile_nombre="imagenes/".$_FILES['fichero']['name'];
  20.   $ruta_foto='imagenes/'.$_FILES['fichero']['name'];//recoge la ruta de la imagen(carpeta y nombre)
  21.  
  22.   if (is_uploaded_file($uploadfile_temporal))
  23.   {
  24.     move_uploaded_file($uploadfile_temporal,$uploadfile_nombre);
  25.     //echo "ok";
  26.   }
  27.   else
  28.   {
  29.     echo "error";
  30.   }
  31. //insertamos las imágenes en la bd
  32.   $sql="INSERT INTO img (foto) VALUES ('$ruta_foto')";
  33.     $res = mysql_query($sql);
  34.     if (!$res)
  35.       echo "Error al ejecutar la consulta";
  36. }
  37. //hacemos la consulta
  38. $obtener_foto="select foto, id from img";
  39. $i=0;
  40. $consulta=mysql_query($obtener_foto,$conexion)or die(mysql_error());;
  41. if($consulta!=NULL)
  42. {
  43.   if(mysql_num_rows($consulta)!=0)
  44.   {
  45.       while($row=mysql_fetch_array($consulta))
  46.       {
  47.       $imagen[$i]=$row['foto'];
  48.       $id=$row['id'];
  49.       $size= getimagesize ($imagen[$i]);
  50.       $ancho[$i]= (int) ($size [0] * 0.3);
  51.       $alto[$i]= (int) ($size [1] * 0.3);
  52.       $i++;
  53.       }
  54.   }
  55. }
  56.  
  57. ?>
  58.  
  59. <html>
  60. <head>
  61. <title>Documento sin título</title>
  62. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  63. </head>
  64.  
  65. <body>
  66. <?php
  67. $i=0;
  68. while($imagen[$i]!=NULL)
  69. {
  70. ?>
  71. <img src="<?php echo $imagen[$i];?>" width="<?php echo $ancho[$i]; ?>" height="<?php echo $alto[$i];?>">
  72. <?php
  73. $i++;
  74. }
  75. ?>
  76. </body>
  77. </html>
  78.  

La imagen la guarda, el archivo también lo inserta en la bd, el problema es a la hora de mostrar las imagenes que contiene la carpeta y la bd. Siento las molestias y muchas gracias
Saludos:  :hola:
Título: Re: Dar Permisos A Una Carpeta
Publicado por: Avalon en Viernes 15 de Junio de 2007, 13:37
El código parece correcto. Entiendo que al ejecutarlo en local las imágenes si que las muestra pero cuando lo ejecutas en el servidor no, es así? En caso afirmativo, habría alguna posibilidad de que podamos probar el script que tienes alojado en tu servidor? Quizá haciendo una prueba directamente podamos descubrir donde está el problema...

Salu2,
Avalon
Título: Re: Dar Permisos A Una Carpeta
Publicado por: shadow_rev en Viernes 15 de Junio de 2007, 17:39
Sólo una pregunta....


¿Qué tipo de ruta para la imagen estas guardando en la bd? Si es una ruta absoluta, es lógico que la etiqueta img no muestre la imagen.

imprime la ruta de la(s) imagen(es) y nos cuentas:
Código: Text
  1. <p><?php echo $imagen[$i]; ?></p>
  2.  

edito...

O puedes hacer esto...
Código: Text
  1. <img src="http://servidor.dominio.xxx/<?php echo $imagen[$i];?>" width="<?php echo $ancho[$i]; ?>" height="<?php echo $alto[$i];?>">
  2.  
http://servidor.dominio.xxx/ (http://servidor.dominio.xxx/) es la url por la cual accedes a la página.

Prueba también si puedes acceder a las imágenes llamándolas por el navegador por medio de la URL (http://nombre_host/imagenes/xxx.jpg (http://nombre_host/imagenes/xxx.jpg) por ejemplo)
Título: Re: Dar Permisos A Una Carpeta
Publicado por: zaida20 en Miércoles 20 de Junio de 2007, 09:37
La ruta es:

con_ruta/1335.jpg

con_ruta es el nombre de la carpeta dónde guardo las imágenes y 1335.jpg es el nombre de una imagen que inserto.

Siento tardar tanto en contestar pero he tenido unos días libres....

SAludos y mil gracias!!!! :hola:
Título: Re: Dar Permisos A Una Carpeta
Publicado por: Altareum en Miércoles 20 de Junio de 2007, 23:47
Algunas correcciones a tu código (los pongo entre comentarios, porque no me toma el color rojo :s):

Código: Text
  1. <?php
  2. //conectamos con base de datos
  3. $dp_di="localhost";
  4. $db_usuario="espia";
  5. $clave_db='ESPIAAA';
  6. $conexion=mysql_connect($dp_di,$db_usuario,$clave_db);
  7. if($conexion==NULL)
  8. {
  9.   printf("Error");
  10. }
  11. //conectamos con la base de datos utopia2
  12. $db='utopia2';
  13. mysql_select_db($db,$conexion)or die("No se puede seleccionar bd");
  14.  
  15.  
  16. /************/
  17. $carpeta = './imagenes/';
  18. if(!is_dir($carpeta)) mkdir($carpeta,0777);
  19. chmod($carpeta,'0777');
  20. /************/
  21.  
  22.  
  23. if($_FILES['fichero']['name']!=NULL)
  24. {
  25.   $uploadfile_temporal=$_FILES['fichero']['tmp_name'];
  26.  
  27.   /************/
  28.   $ruta_foto=$uploadfile_nombre= $carpeta.$_FILES['fichero']['name'];
  29.   //recoge la ruta de la imagen(carpeta y nombre)
  30.   /************/
  31.   
  32.   if (is_uploaded_file($uploadfile_temporal))
  33.   {
  34.     move_uploaded_file($uploadfile_temporal,$uploadfile_nombre);
  35.     //echo "ok";
  36.   }
  37.   else
  38.   {
  39.     echo "error";
  40.   }
  41. //insertamos las imágenes en la bd
  42.   $sql="INSERT INTO img (foto) VALUES ('$ruta_foto')";
  43.     $res = mysql_query($sql);
  44.     if (!$res)
  45.       echo "Error al ejecutar la consulta";
  46. }
  47. //hacemos la consulta
  48. $obtener_foto="select foto, id from img";
  49. $i=0;
  50. $consulta=mysql_query($obtener_foto,$conexion)or die(mysql_error());;
  51. if($consulta!=NULL)
  52. {
  53.   if(mysql_num_rows($consulta)!=0)
  54.   {
  55.       /************/
  56.       while($row=mysql_fetch_assoc($consulta))
  57.       /************/
  58.       {
  59.       $imagen[$i]=$row['foto'];
  60.       $id=$row['id'];
  61.       $size= getimagesize ($imagen[$i]);
  62.       $ancho[$i]= (int) ($size [0] * 0.3);
  63.       $alto[$i]= (int) ($size [1] * 0.3);
  64.       $i++;
  65.       }
  66.   }
  67. }
  68.  
  69. ?>
  70.  
  71. <html>
  72. <head>
  73. <title>Documento sin título</title>
  74. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  75. </head>
  76.  
  77. <body>
  78. <?php
  79. $i=0;
  80. while($imagen[$i]!=NULL)
  81. {
  82. ?>
  83. <img src="<?php echo $imagen[$i];?>" width="<?php echo $ancho[$i]; ?>" height="<?php echo $alto[$i];?>">
  84. <?php
  85. $i++;
  86. }
  87. ?>
  88. </body>
  89. </html>
  90.  
  91.  

Intenta provar esto, pueden mejorarse más cosas, pero creo que por el momento es suficiente.

Altareum.
Título: Re: Dar Permisos A Una Carpeta
Publicado por: zaida20 en Jueves 21 de Junio de 2007, 09:30
Muchas gracias, voy a probarlo y te cuento

Saludos  :hola:
Título: Re: Dar Permisos A Una Carpeta
Publicado por: zaida20 en Lunes 25 de Junio de 2007, 10:20
Hola!!
Mi código estaba perfecto, el problema era del servidor

Muchas gracias por vuestro interés.
Saludos  :hola:
Título: Re: Dar Permisos A Una Carpeta
Publicado por: Altareum en Lunes 25 de Junio de 2007, 16:24
Me alegro que lo hayas solucionado!!!

Igualmente, un consejo, cuando trabajes con archivos, siempre chequea que la carpeta exista:

Código: Text
  1. is_dir(...);
  2.  

Y si el servidor es principalmente Linux, y te refieres a una carpeta desde la ubicación en la que se encuentra tu archivo php, utiliza siempre " ./ ":

Código: Text
  1. $carpeta = './imagenes/';
  2.  

Altareum.
Título: Re: Dar Permisos A Una Carpeta
Publicado por: zaida20 en Martes 10 de Julio de 2007, 10:29
Gracias por la recomendación Altareum  ;)

Saludos  :hola: