Foros del Web » Programando para Internet » PHP »

Borrado de archivos

Estas en el tema de Borrado de archivos en el foro de PHP en Foros del Web. Quiero borrar un archivo que cargue, pero tenia la idea que se guardaban en una carpeta temporal y terminando de usarlo se borraba en automático, ...
  #1 (permalink)  
Antiguo 01/12/2004, 09:25
 
Fecha de Ingreso: noviembre-2004
Ubicación: Oaxaca, Mexico
Mensajes: 97
Antigüedad: 13 años, 1 mes
Puntos: 0
Borrado de archivos

Quiero borrar un archivo que cargue, pero tenia la idea que se guardaban en una carpeta temporal y terminando de usarlo se borraba en automático, pero en vez de eso se guarda en la carpeta del proyecto y no se borra, no sabia como borrarlo y buscando encontre la función unlink(), y la use pero me genera este error:

Warning: unlink(C:\WINDOWS\TEMP\phpA284.TMP): Permission denied in c:\archivos de programa\apache group\apache\htdocs\atec\re_tomalecturas.php on line 129


La sintaxis que utilozo es

unlink($archivo);

en que estoy mal?
  #2 (permalink)  
Antiguo 01/12/2004, 10:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero $archivo que contiene o que es? ..

Será el:
<input type="file" name="archivo">

?¡?

PHP cuando sube un archivo vía HTTP lo deja en la ruta que indique (php.ini) upload_tmp_dir .. si tu Sistema operativo no ejecuta rutinas de "limpieza" de ese directorio .. si quieres hacerlo tu desde PHP .. tendrás que indicar ahi la ruta:

unlink($archivo_tmp_name);

o mejor usando los arrays superglobgales!!!!

unlink($_FILES['archivo']['tmp_name']);

Ahora .. para que PHP pueda "salir" a ese directorio a borrar el archivo dependerá de la configuración de tu servidor .. En principio una "buena" configuración de PHP NOOO debería dejar hacer eso, ejemplo php configurado con open_base_dir .. o en modo seguro "safe mode" (php.ini). A su vez se suman los permisos de escritura/lectura que debe tener ese directorio concreto donde PHP sube sus archivos de forma temporal.

De hecho no tendrías que diseñar una aplicación que haga ese tipo de "unlink()" pues como ya te he comentado .. pese que la configuación concreta que ahora uses te funcinoe a ti .. si luego pretendes llevarte ese código a ejecutarlo en otro servidor es muyyyyy probable que no te funcione y te dé problemas de permisos).

Lo que tendrías que tener son algunas rutinas própias de tu S.O para borrar esos archivos temporales bajo la ejecución de un Cron Job o "programador de taréas" (según S.O. ..lo primero para UNIX/Linux .. y lo segundo para windows).

Un saludo,
  #3 (permalink)  
Antiguo 01/12/2004, 14:49
 
Fecha de Ingreso: noviembre-2004
Ubicación: Oaxaca, Mexico
Mensajes: 97
Antigüedad: 13 años, 1 mes
Puntos: 0
$archivo es el archivo que cargue

if($HTTP_POST_FILES['archivo']['type']=="application/octet-stream") {
if (is_uploaded_file($HTTP_POST_FILES['archivo']['tmp_name'])) {
copy($HTTP_POST_FILES['archivo']['tmp_name'], $HTTP_POST_FILES['archivo']['name']);

despues a otra variable $file le asigne el archivo abierto, no se si este bien asi, lo hice para checar si lo habia abierto

$file = fopen ("$archivo", "r")

ahora use el array superglobal como me digiste

unlink($_FILES['archivo']['tmp_name']);

pero no se si este bien asi, ya me enrede y no se si usar $file o $archivo

en el php.ini upload_tmp_dir esta desabilitado
;upload_tmp_dir =
nada mas le quito el punto y coma o le tengo que poner una dirección?, que dirección le debo poner?
  #4 (permalink)  
Antiguo 01/12/2004, 15:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Tienes que activar:
;upload_tmp_dir =

para que apunte a un directorio de tu servidor .. aunque dice PHP que si no indicas nada ahí usarla el "tmp" de tu S.O. y de hecho así lo está haciendo ya (por el mensaje de error que obtienes) .. sería recomendable crear un directorio, darle permisos de escritura a el (si corresponde) y apuntar esa ruta en esa directiva quitando el ; delante de la misma y reiniciando tu servidor.

Por otro lado si quieres usar:
$HTTP_POST_FILES['archivo']['tmp_name']
usalo .. pero es recomendable usar los arrays superglobales $_FILES.

El nombre del archivo que PHP le otorga y ruta lo tienes en ese array concreto .. no en "archivo" .. Si quieres abrir tu archivo desde donde PHP ya lo subió y debió quedar .. puedes usar fopen() .. pero por temas de permisos que puede que no tengas en muchos casos .. no uses fopen() sino que mueve el archivo hacia su destino definitivo con move_uploaded_file() en lugar de copy() .. Será en esa ruta que quedó tu archivo (donde indicas en ese copy() o move_uploaded_file() como segundo parámetro) donde podrás aplicar tu fopen() o resto de funciones que tengan que hacer referencia a ese archivo ..

En tu caso si indicastes:
$HTTP_POST_FILES['archivo']['name']

Como ruta y nombre de destino del archivo . .eso será lo que tendrás que usar para tu fopen()

Un saludo,
  #5 (permalink)  
Antiguo 02/12/2004, 09:09
 
Fecha de Ingreso: noviembre-2004
Ubicación: Oaxaca, Mexico
Mensajes: 97
Antigüedad: 13 años, 1 mes
Puntos: 0
Entonces si pongo la ruta de donde quiero guardar los archivos por ejemplo:
upload_tmp_dir =C:\Archivos de programa\Apache Group\Apache\htdocs\atec\archivos
ya no me los guardara en la carpeta del proyecto?
y toda esta ruta es la que debo indicar en move_uploaded_file() y en fopen() y ya de aca es donde ya puedo usar unlink() para borrarlo?
  #6 (permalink)  
Antiguo 02/12/2004, 09:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mmm..

Una cosa es la ruta donde PHP sube los archivos temporalmente .. esa ruta es y será común para todo archivo que suba PHP por HTTP para toda aplicación (script.php) que corras en tu servidor. Ese directorio debe ser algo que quede fuera del "DocumentRoot" de tu servidor HTTP (arriba de tu htdocs/ en tu caso).

Como ya te he comentado . .PHP sube los archivos a un directorio temporal y "común" para todo script que corras en ese servidor .. por eso tienes esas funciones como move_uploaded_file() (o incluso copy()) para "llevarte" ese archivo a su destino definitivo (tu blabla...atec\archivos). Sólo la función move_uploaded_file() es la función autorizada para mover un archivo que subió por HTTP a su destino definitivo si usas configuraciones de PHP "seguras" tipo open_base_dir (con un directorio de tu servidor concreto ..) o "safe mode" (a ON).

De todas formas dependiendo de la configuración que uses al respecto .. puedes hacer un fopen() directo desde $_FILES['archivo']['tmp_name'] que es la ruta y nombre que deja PHP temporalmente (único) hasta que tu decides moverlo a algún sitio.

Si ya subías tu archivo correctamente y lo que te preocupa es que PHP no borra el archivo que subió temporalmente en la ruta indicada que PHP lo hace por "defecto" o ajustas bajo la directiva que te indiqué .. NO solventes el problema con PHP .. ya te he comentado que tu S.O. Debe tener políticas de borrado de esa carpeta "temporal" ya sea por tamaño (quotas) .. por fechas .. por rutinas que borren esos archivos ejecutados bajo un "cron job" o "programador de tareas" .. pero no hacerlo con PHP. En la mayoría de configuraciones de pHP no vas a poder hacer un unlink($_FILES['archivo']['tmp_name']) .. así que mejor olvidate de ese tema si quieres tener una aplicación "compatible" con diferentes configuraciones de PHP. Será el "administrador" de turno de ese servidor el que tenga que preocuparse de habitualmente borrar esos archivos . ... ya sea manualemente o bajo configuración del mismo, pero esto no es tema de PHP.

Un saludo,

Última edición por Cluster; 02/12/2004 a las 09:39
  #7 (permalink)  
Antiguo 02/12/2004, 11:16
 
Fecha de Ingreso: noviembre-2004
Ubicación: Oaxaca, Mexico
Mensajes: 97
Antigüedad: 13 años, 1 mes
Puntos: 0
osea que no es necesario que use move_uploaded_file() o incluso copy(), que puedo abrir los archivos sin necesidad de usar estas funciones? y de esta manera evitare que se guarden en la carpeta principal de mi proyecto?
  #8 (permalink)  
Antiguo 02/12/2004, 11:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues si .. puedes abrir tus archivos con fopen() y funciones afines (sin necesidad de moverlos hacia su detino definitivo) temporalmente si tienes los permisos adecuados .

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:01.