En un proyecto reciente para uno de mis clientes debía crear automáticamente cuentas de FTP, borrarlas luego de una semana y en otra semana mas, borrar el directorio con todos sus archivos. Resulta que en un servidor con Cpanel es mucho mas fácil de lo que parece, utilizando las funciones de Cpanel XMLAPI y con el nombre de usuario y contraseña de la cuenta.
Configuración básica para usar xmlapi.php: recuerda poner esta configuración antes de incluir la librería.
$cpanelConnection = array (
'host' => 'ip o nombre de dominio del servidor',
'port' => '2083',
'user' => 'nombre de usuario cpanel',
'pass' => 'contraseña cpanel') ;
Crear una cuenta de FTP:
require_once("xmlapi.php");
$xmlapi = new xmlapi($cpanelConnection['host']);
$xmlapi->password_auth($cpanelConnection['user'],$cpanelConnection['pass']);
$xmlapi->set_port($cpanelConnection['port']);
$xmlapi->set_debug(1);
$args = array(
'user'=>strtolower('nombre de usuario de la nueva cuenta de ftp, sin espacios o simbolos'),
'pass'=>'password de la nueva cuenta de ftp',
'quota'=>0, //0 si es ilimitado
'homedir'=>'ruta al directorio de la nueva cuenta de ftp'
);
$xmlapi->api2_query($cpanelConnection['user'], 'Ftp', 'addftp', $args);
Borrar una cuenta de FTP (sin borrar sus archivos):
require_once("xmlapi.php");
$xmlapi = new xmlapi($cpanelConnection['host']);
$xmlapi->password_auth($cpanelConnection['user'],$cpanelConnection['pass']);
$xmlapi->set_port($cpanelConnection['port']);
$xmlapi->set_debug(1);
$args = array(
str_replace('.','','nombre de usuario ftp a eliminar')
);
$xmlapi->api1_query($cpanelConnection['user'], 'Ftp', 'delftp', $args);
Luego de crear y borrar las cuentas de ftp, debía borrar el directorio con todos sus archivos. Normalmente se puede hacer en PHP con un script recursivo; pero cuando se crea la cuenta de FTP desde Cpanel, se crea también un archivo .ftpquota, que no puede ser borrado ya que pertenece a otro usuario. Así que puse manos a la obra a buscar como borrar el directorio con el mismo usuario de Cpanel con que se creo el directorio:
require_once("xmlapi.php");
$xmlapi = new xmlapi($cpanelConnection['host']);
$xmlapi->password_auth($cpanelConnection['user'],$cpanelConnection['pass']);
$xmlapi->set_port($cpanelConnection['port']);
$xmlapi->set_debug(1);
$xmlapi->api2_query($cpanelConnection['user'], 'Fileman', 'fileop', array("op"=>"unlink", "sourcefiles"=>'Ruta de la carpeta a eliminar'));
Hay muchas otras funciones para explorar y automatizar un poco mas los procesos que escribimos en nuestros scripts.
En caso que no encuentren la librería en el sitio del desarrollador, la pueden descargar aqui: xmlapi.php