Foros del Web » Programando para Internet » PHP »

destruir imagen

Estas en el tema de destruir imagen en el foro de PHP en Foros del Web. buenas, me gustaria saber si con php se puede destruir una imagen creada previamente por mi y que este en la misma carpeta que donde ...
  #1 (permalink)  
Antiguo 26/01/2006, 11:38
 
Fecha de Ingreso: noviembre-2005
Mensajes: 139
Antigüedad: 18 años, 5 meses
Puntos: 0
destruir imagen

buenas,
me gustaria saber si con php se puede destruir una imagen creada previamente por mi y que este en la misma carpeta que donde estan los scripts (www en appserv)
el caso es que en mi pagina creo una imagen cada vez que se entra , pero no me la actualiza no se porque, siempre me parece la misma imagen aunque modifique la base de datos de la que sale el grafico....solo me lo hace bien si la borro de la carpeta y vuelvo a ejecutar el script
dejo el codigo correspondiente al grafico
Código PHP:
$total=0;
$numnormal=$solu[0];
$numocupado=$solu[1];
$numsinresp=$solu[2];
$numnumincor=$solu[3];
$numnoespe=$solu[4];
$numlinecan=$solu[5];
$numotros=$solu[6];
$numconec=$solu[7];

$total=$numnormal+$numocupado+$numsinresp+$numnumincor+$numnoespe+$numlinecan+$numotros+$numconec-1;
//porcentajes
$pornormal=($numnormal*100)/$total;
$porocupado=($numocupado*100)/$total;
$porsinresp=($numsinresp*100)/$total;
$pornumincor=($numnumincor*100)/$total;
$pornoespe=($numnoespe*100)/$total;
$porlineacan=($numlinecan*100)/$total;
$porotros=($numotros*100)/$total;
$porconec=($numconec*100)/$total;



header("Content-type: image/png");
$imgWidth=450;
$imgHeight=250;

// Crea image y define colores
$image=imagecreate($imgWidth$imgHeight);

$colorFondo=imagecolorallocate($image255255255);
$colorNormal=imagecolorallocate($image00255);//Color normal
$colorOcup=imagecolorallocate($image192192192);
$colorSinresp=imagecolorallocate($image25500);
$colorNuminc=imagecolorallocate($image02550);
$colorNoespe=imagecolorallocate($image2551250);
$colorLincan=imagecolorallocate($image200100134);
$colorOtros=imagecolorallocate($image235620);
$colorConec=imagecolorallocate($image30230230);
$colorNegro=imagecolorallocate($image000);

//titulo
imagestring($image35020"Finalización de llamadas"$colorNegro);
imagestring($image35045"Total llamadas: $total"$colorNegro);
//ejes
imageline($image,59,200,59,100,$colorNegro);
imageline($image,57,100,61,100,$colorNegro);
imagestring($image13595"100%"$colorNegro);


$anor=200-$pornormal;
$aocu=200-$porocupado;
$asin=200-$porsinresp;
$ainc=200-$pornumincor;
$aesp=200-$pornoespe;
$alin=200-$porlineacan;
$aotr=200-$porotros;
$acon=200-$porconec;


imagefilledrectangle($image,60,$anor,80,200,$colorNormal);//barra de normal
imagefilledrectangle($image,85,$aocu,105,200,$colorOcup);//barra de us.ocupado
imagefilledrectangle($image,110,$asin,130,200,$colorSinresp);//barra sin respuesta
imagefilledrectangle($image,135,$ainc,155,200,$colorNuminc);//barra num incorrecto
imagefilledrectangle($image,160,$aesp,180,200,$colorNoespe);//barra sin especif
imagefilledrectangle($image,185,$alin,205,200,$colorLincan);//barra linea/canal
imagefilledrectangle($image,210,$aotr,230,200,$colorOtros);//barra otros
imagefilledrectangle($image,235,$acon,255,200,$colorConec);//barra conectada



//Leyenda del grafico
imagefilledrectangle($image,300,60,310,70,$colorNormal);// normal
imagefilledrectangle($image,300,80,310,90,$colorOcup);//us.ocupado
imagefilledrectangle($image,300,100,310,110,$colorSinresp);//sin respuesta
imagefilledrectangle($image,300,120,310,130,$colorNuminc);// num incorrecto
imagefilledrectangle($image,300,140,310,150,$colorNoespe);// sin especif
imagefilledrectangle($image,300,160,310,170,$colorLincan);//linea/canal
imagefilledrectangle($image,300,180,310,190,$colorOtros);//otros
imagefilledrectangle($image,300,200,310,210,$colorConec);//conectada


imagestring($image231560"Normal"$colorNegro);
imagestring($image231580"Usuario Ocupado"$colorNegro);
imagestring($image2315100"Sin Respuesta"$colorNegro);
imagestring($image2315120"Numero Incorrecto"$colorNegro);
imagestring($image2315140"Sin Especificar" ,$colorNegro);
imagestring($image2315160"Linea/Canal No Disp"$colorNegro);
imagestring($image2315180"Otros"$colorNegro);
imagestring($image2315200"Conectada"$colorNegro);
//porcentajes encima de cada barra

$pornormal=number_format($pornormal,2,'.','');
$porocupado=number_format($porocupado,2,'.','');
$porsinresp=number_format($porsinresp,2,'.','');
$pornumincor=number_format($pornumincor,2,'.','');
$pornoespe=number_format($pornoespe,2,'.','');
$porlineacan=number_format($porlineacan,2,'.','');
$porotros=number_format($porotros,2,'.','');
$porconec=number_format($porconec,2,'.','');


imagestring($image160$anor-10$pornormal$colorNegro);
imagestring($image185$aocu-10$porocupado$colorNegro);
imagestring($image1110$asin-10$porsinresp$colorNegro);
imagestring($image1135$ainc-10$pornumincor$colorNegro);
imagestring($image1160$aesp-10$pornoespe ,$colorNegro);
imagestring($image1185$alin-10$porlineacan$colorNegro);
imagestring($image1210$aotr-10$porotros$colorNegro);
imagestring($image1235$acon-10$porconec$colorNegro);


imagepng($image,"imagen.png");
imagedestroy($image);
?> 
gracias

Última edición por apuenco; 26/01/2006 a las 11:47
  #2 (permalink)  
Antiguo 26/01/2006, 11:59
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Pregunta

No queda muy claro si quieres borrar ¿la imagen de la BD o de la carpeta?
  #3 (permalink)  
Antiguo 26/01/2006, 12:01
 
Fecha de Ingreso: noviembre-2005
Mensajes: 139
Antigüedad: 18 años, 5 meses
Puntos: 0
de la carpeta. lo que pasa es que es un grafico creado a partir de unos datos de una base de datos. y cada vez que un usuario accede a la pagina se actualizan los datos y lo que quiero es que la nueva imagen "pise" a la vieja.
  #4 (permalink)  
Antiguo 26/01/2006, 12:12
Avatar de gonzalezmfrank  
Fecha de Ingreso: julio-2005
Ubicación: Maracaibo - Venezuela
Mensajes: 266
Antigüedad: 18 años, 9 meses
Puntos: 0
De acuerdo

Debes verificar en principio, que la imagen que pretendes crear o subir, si fuese el caso, no exista en el servidor, a los efectos de que pueda ser generada nuevamente, lo ideal es que ejecutes un script que la borre y luego la generes nuevamente..... ojo con la permisologia

Saludos

Frank
  #5 (permalink)  
Antiguo 26/01/2006, 12:14
 
Fecha de Ingreso: noviembre-2005
Mensajes: 139
Antigüedad: 18 años, 5 meses
Puntos: 0
pero como la borro? eso es lo que no se
  #6 (permalink)  
Antiguo 26/01/2006, 12:16
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Existe la funcion unlink que te ayuda a eliminar archivos unlink()
  #7 (permalink)  
Antiguo 26/01/2006, 12:37
Avatar de gonzalezmfrank  
Fecha de Ingreso: julio-2005
Ubicación: Maracaibo - Venezuela
Mensajes: 266
Antigüedad: 18 años, 9 meses
Puntos: 0
De acuerdo

Te sugiero que verifiques "siempre" primero que la imagen exista, no queremos que se le den errores al usuario, aqui un ejemplo de una funcion para ello , a la que puedes pasar un parametro N y chequeas despues el valor desde donde llamas la funcion

Código PHP:
// Funcion para verificar que el archivo existe

function existe_arch($nombre_archivo,$verif,$udir){
    if (
$gestor opendir($udir)) {
       while (
false !== ($archivo readdir($gestor))) { if ( $archivo == $nombre_archivo ) { $verif "S"; } }
          
closedir($gestor);
    }
    return 
$verif;

Para borrarla, está esta funcion ( desde el link de mauled ) que debes optimarla porque no querrias borrar un directorio ?, esta es más compleja que el anterior

Código PHP:
//**
// * rm() -- Vigorously erase files and directories.
// *
// * @param $fileglob mixed If string, must be a file name (foo.txt), glob pattern (*.txt), or directory name.
// *                        If array, must be an array of file names, glob patterns, or directories.
// */
function rm($fileglob)
{
   if (
is_string($fileglob)) {
       if (
is_file($fileglob)) {
           return 
unlink($fileglob);
       } else if (
is_dir($fileglob)) {
           
$ok rm("$fileglob/*");
           if (! 
$ok) {
               return 
false;
           }
           return 
rmdir($fileglob);
       } else {
           
$matching glob($fileglob);
           if (
$matching === false) {
               
trigger_error(sprintf('No files match supplied glob %s'$fileglob), E_USER_WARNING);
               return 
false;
           }     
           
$rcs array_map('rm'$matching);
           if (
in_array(false$rcs)) {
               return 
false;
           }
       }     
   } else if (
is_array($fileglob)) {
       
$rcs array_map('rm'$fileglob);
       if (
in_array(false$rcs)) {
           return 
false;
       }
   } else {
       
trigger_error('Parametro #1 debe ser un nombre de archivo o directorio, o una arreglo de nombres y directorios'E_USER_ERROR);
       return 
false;
   }

   return 
true;


Saludos

Frank
  #8 (permalink)  
Antiguo 26/01/2006, 12:38
 
Fecha de Ingreso: noviembre-2005
Mensajes: 139
Antigüedad: 18 años, 5 meses
Puntos: 0
gracias, funciona perfectamente...
  #9 (permalink)  
Antiguo 26/01/2006, 12:48
 
Fecha de Ingreso: noviembre-2005
Mensajes: 139
Antigüedad: 18 años, 5 meses
Puntos: 0
funciona el unlink, pero es cierto que si no esta la imagen me da un error...
lo que pasa es que no entiendo bien tu funcion para ver si esta la imagen, gonzalezmfrank, soy medio novato...
yo tengo imagen.png en el servidor... peo todo eso de opendir y demas... ni idea
gracias de todas maneras
  #10 (permalink)  
Antiguo 26/01/2006, 13:22
Avatar de gonzalezmfrank  
Fecha de Ingreso: julio-2005
Ubicación: Maracaibo - Venezuela
Mensajes: 266
Antigüedad: 18 años, 9 meses
Puntos: 0
De acuerdo

Bueno...para ser breve

Código:
opendir - habilita el directorio que quieras leer del servidor

readdir - lee el nombre de los archivos que tienes en él

closedir - cierra o deshabilita eñ mismo
Para llamar la funcion ( te sugiero la coloques al inicio de tu script ( solo donde la vayas usar ) o en el archivo de configuracion ( config.php ) o similar

La llamadas desde tu script ( por ejemplo )

Código PHP:
$verif='N';
$verifica=existe_arch($nombre_archivo,$verif,$udir); 
La validacion

Código PHP:
If ( $verifica == 'S' ) { hago el ulink() }

// y sigue tu código 
O puedes hacer en tu funcion en vez de

Código PHP:
return $verif
haces

Código PHP:
return unlink($archivo); // obviamente tendrás que indicarle el directorio si lo tienes aparte 
Espero te sirva

Saludos

Frank
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 07:36.