[Php-avanzado] Guardar archivo en directorio
Leonardo Tadei - Pegasus Tech Supply
leonardot en pegasusnet.com.ar
Sab Oct 18 13:50:10 ART 2008
Hola Cecilia,
El sáb, 18-10-2008 a las 11:58 -0300, María Cecilia escribió:
> Hola Leo, este es el error:
>
> Warning: copy(\wamp\www\Practico3\cursophp2) [function.copy]: failed to open
> stream: Permission denied in C:\wamp\www\Practico3\TP3_Ej2.php on line 25
Ok.
> Algunas aclaraciones:
> 1) la línea 25 que indica el error es la línea del copy($arch,
> '\wamp\www\Practico3\cursophp2');
> 2) tal como dice Rosario, había probado crearlo con medir('cursophp2', 0777)
> pero el error seguía.
Noooooo!!!!
El error "Permiso denegado" es genérico.
Esto NO es un problema de permisos.
El problema es el que te había contado en un mail anterior: la variable
$arch de copy no tiene en tu script el nombre de un archivo, sino el
valor del vector $_FILES[].
Estás usando mal el copy(), ya que en tu caso solo debés usar fopen(),
fwrite() y fclose() para agregar datos al archivo.
Si además querés elegir en qué archivo guardar, un <input> de tipo file
no sirve... pero esto es de contexto y mucho más largo de explicar por
mail.
(hacé un print de tu $arch y fijate lo que tiene: nada útil)
Si querés vení un rato antes a la clase y lo discutimos...
> 3) también en un momento, como vos decís, al ejecutarlo por segunda vez me
> dio el error que indica que el directorio ya existe, entonces ahora lo borro
> antes de ejecutarlo (debería agregar la línea que pregunta si existe o no el
> dir)
> 4) y por último, sí, elijo siempre un archivo existente.
>
> Espero con esto me puedan ayudar a descubrir por qué no me copia el archivo
> en el directorio.
> Gracias otra vez!!!
> Saludos,
> Cecilia
>
>
>
>
> -----Mensaje original-----
> De: php-avanzado-bounces en pato2.fi.mdp.edu.ar
> [mailto:php-avanzado-bounces en pato2.fi.mdp.edu.ar] En nombre de Leonardo
> Tadei - Pegasus Tech Supply
> Enviado el: viernes, 17 de octubre de 2008 23:04
> Para: Lista del curso de PHP Avanzado
> Asunto: Re: [Php-avanzado] Guardar archivo en directorio
>
> Hola Cecilia,
>
> los permisos de creación por default de un directorio dependen de la
> configuración de cada sistema.
> Desconozco detalles de como MS Windows los maneja, así que no sabría
> decirte qué hacer con exactitud. Sé tan poco de esto que creía que todo
> lo que creabas sería escribible por los scripts y por los usuarios...
>
> Sin embargo, una práctica habitual es crear el directorio
> manualmente
> con los permisos que hagan falta, y luego escribir el script asumiendo
> que el directorio existe.
> (más abajo te comento algo sobre esto)
>
> Por otra parte, la función para cambiar permisos es chmod(). El el
> manual están detallados los parámetros que necesita, pero la verdad es
> que no sé si funciona en MS Windows.
>
>
> El vie, 17-10-2008 a las 21:39 -0300, María Cecilia escribió:
> > Envié el anterior sin el código :(
> >
> >
> > Consulta para quien pueda ayudarme:
> >
> > No puedo copiar un archivo dentro del directorio, el directorio se crea
> con
> > permisos de sólo lectura, entonces me da un error diciendo que no tengo
> > permisos. No se cómo cambiar esos permisos (los del dir). Aquí va el
> código:
> >
> > <?php
> > if(!isset($_POST["guardar"])){
> > ?>
> > <body>
> > <form method="POST" action="" name="formu" id="formu">
> > <input type="file" id="a" name="a">
> > <textarea name="texto" id="texto" cols="30" rows="4>Escriba
> aqui el texto que desea agregar al
> > archivo</textarea><br>
> > <input type="submit" name="guardar" id="guardar"
> > value="Guardar">
> > </form>
> > <?php
> > }
> > else{
> > $tex=$_POST["texto"];
> > $arch=$_POST["a"];
> > mkdir('cursophp2');
>
> Nota: la creación del directorio fallará siempre, excepto la primera
> vez. Falla porque el directorio ya existe.
> Podés chequear con file_exists() si existe o no, y si no existe
> crearlo.
> Por otra parte: estás segura que no falla al querer crear el
> directorio
> en vez de al subir el archivo???
> Sería bueno que nos copies y pegues el mensaje de error.
>
> > $f=fopen($arch, "a+"); //crea el archivo si no existe, con a+ le doy
> > permisos de lect y esc. Y agrega la información al contenido que ya tiene
> el
> > archivo
> > fwrite($f, $tex, strlen($tex)); //escribe $tex al archivo $f, se
> > escriben tantos bytes como indica el tercer parámetro. strlen obtiene la
> > longitud de la cadena
>
> Acá estás mezclando: o escribís un archivo abierto con fopen() con
> fwrite(), o copiás un archivo existente al directorio que te haga falta.
>
> En este caso el copy() falla pero no por falta de permisos, sino
> porque
> estás copiando un archivo que no existe (salvo que tengas la suerte de
> que en el textarea se escriba justo la ruta completa de un archivo
> existente)
>
> > copy($arch, '\wamp\www\Practico3\cursophp2');
> > }
> > ?>
> >
> >
> > Gracias!!
>
> Por nada!
> --
> Leonardo Tadei
> leonardot en pegasusnet.com.ar
> http://blog.pegasusnet.com.ar
> Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
>
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>
> E-mail clasificado por el Idenfificador de Spam Inteligente.
> Para modificar la categoría clasificada acceda a su webmail
>
> Este mensaje ha sido verificado por el E-mail Protegido.
> Antivirus actualizado en 18/10/2008 / Versión: 0.93.1/8442
>
>
>
> __________ Información de ESET NOD32 Antivirus, versión de la base de firmas
> de virus 3534 (20081018) __________
>
> ESET NOD32 Antivirus ha comprobado este mensaje.
> http://www.eset.com
>
>
>
> __________ Información de ESET NOD32 Antivirus, versión de la base de firmas
> de virus 3534 (20081018) __________
>
> ESET NOD32 Antivirus ha comprobado este mensaje.
> http://www.eset.com
>
>
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>
--
Leonardo Tadei
leonardot en pegasusnet.com.ar
Pegasus Tech Supply
Tel: (+54)(+223) 471-2880
La Salle 1131 - Mar del Plata - Argentina
http://www.pegasusnet.com.ar / http://blog.pegasusnet.com.ar
http://www.prometeustech.com.ar / http://www.grupopegasus.com
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
Más información sobre la lista de distribución Php-avanzado