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(300, 300);
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:ficher, Tamano: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 ;)