Ver Mensaje Individual
  #2 (permalink)  
Antiguo 26/10/2007, 05:34
Avatar de yoseman
yoseman
 
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
Re: como borrar archivo con FileReference, DataGrid y php

Probablemente lo que sucede es que la función unlink tiene los permisos por defecto limitados.

Lo que puedes hacer es crear en tu servidor una cuenta de ftp con acceso restringido a una carpeta determinada, por cuestiones de seguridad, y utilizar las funciones ftp de php para borrar el archivo.

Código PHP:
<?php

$error
=0;
$servidor_ftp    "ftp.tuservidor.com";
$usuario_ftp     "usuarioFTP";
$contrasenya_ftp "passwordFTP";
$id_con = @ftp_connect($servidor_ftp) or die("error=1&fin=si");
if (!@
ftp_login($id_con$usuario_ftp$contrasenya_ftp)) 
{
    
$error=2;
}
$archivo = ($_POST['ficher']!="") ? ("public_html/".$_POST['ficher']) : "";
if (!@
ftp_delete($id_con$archivo)) 
{
    
$error=3;
}
ftp_close($id_con);
echo 
"error=".$error."&fin=si";

?>
Este script lo que hace es borrar el archivo que se pase como parametro ficher por post desde flash o desde dónde sea. si no se puede conectar al ftp devuelve error 1, si no se puede conectar usuario error 2, y si no se puede borrar fichero error 3; si todo va bien devuelve error=0

No me planteo ningún tipo de seguridad, eso ya quedaría como tema aparte en el código php y en flash.

Se podría por ejemplo utilizar sesiones de php para autenticar usuario desde flash en una primera instancia, y utilizar el identificador de sesion y las datos de usuario autenticado posteriormente a cada petición desde flash a un código php cuyas acciones sean potencialmente peligrosas como borrar un fichero.

He modificado tb el lista.php porque devolvía directorios y para que devuelve una primera etiqueta con el número de ficheros
Código PHP:
<?php 

header
("Content-type: text/xml\n\n");
echo 
'<?xml version="1.0" encoding="iso-8859-1"?>' "\n";

$No=array(".","..","lista.php","uploadFile.php");
$dir="foros/";
$fp=opendir($dir); 
$cabeza="<files>";
$numero=0;
while (
false!==($file=readdir($fp)))

    if ((!
in_array($file,$No))&&(is_readable($dir.$file)) && !is_dir($dir.$file))
    {
        
$numero++;
        
$salida.="<file name='".utf8_encode($file)."' tamanio='".filesize($dir.$file)."' />"
    }


print(
$cabeza."<entradas numero='".$numero."' />".$salida."</files>");
closedir($fp); 

?>
Y respecto al código flash, yo lo he probado por mi parte y partiendo de cero y me funciona,con un datagrid y un botón(myDataGrid y bBorrar) y el código(sólo para borrar y cargar la lista) es este:
Código PHP:
var myDataGrid:mx.controls.DataGrid;

myDataGrid.addColumn("Fichero");
myDataGrid.addColumn("Tamano");

myDataGrid.setSize(300300);
myDataGrid.getColumnAt(0).width 150;

var 
listener_obj:Object = new Object();

listener_obj.change = function(eventObject){
    
bBorrar.enabled=(myDataGrid.selectedItem.Fichero!=undefined);
    
}
myDataGrid.addEventListener("change"listener_obj)

enviar=new LoadVars();
datosLista = new XML();
datosBorrar= new LoadVars();

enviar.sendAndLoad("lista.php",datosLista,"POST");

bBorrar.enabled=false;
bBorrar.onRelease=function()
{
    
enviar.ficher="foros/"+myDataGrid.selectedItem.Fichero;
    
enviar.sendAndLoad("borrar.php",datosBorrar,"POST");
}

datosBorrar.onLoad=function()
{
    
trace(datosBorrar.error);

        
// actualizar lista si borrado exito
        
if(datosBorrar.error==0)
    
enviar.sendAndLoad("lista.php",datosLista,"POST");
}

datosLista.onLoad = function()
{
    
trace(datosLista.childNodes[1].childNodes[2]);
    
myDataGrid.removeAll();
    
numero=datosLista.childNodes[1].childNodes[0].attributes.numero;
    for(
l=1;l<=numero;l++)
    {

        
ficher=datosLista.childNodes[1].childNodes[l].attributes.name;
        
taman=datosLista.childNodes[1].childNodes[l].attributes.tamanio;
        
trace(ficher);
        var 
item_obj:Object = {Fichero:ficherTamano:taman};
        
myDataGrid.addItem(item_obj);
    }

A mi me ha funcionado.

Por otra parte creo que lo lógico sería usar las funciones de ftp de php para todo y así la ruta inicial dependiera de los permisos ftp, enviar, descargar, etc... todo dependería de los permisos de usuario ftp y por tanto no tendrías que definir un directorio principal ni nada.

Pero bueno, todo depende de como te hayas planteado la cosa...

http://es2.php.net/manual/es/ref.ftp.php

En esa dirección están todos los 'métodos' que implementa la 'clase' ftp de php.

Salu2 ;)
__________________
[+]
[+]

Última edición por yoseman; 26/10/2007 a las 06:58