Pequeño gestor de ficheros en CodeIgniter 4
Veamos un pequeño ejemplo en el que desarrollaremos un gestor de ficheros en CodeIgniter 4.
Como siempre, debéis coger el código como una referencia. El que os vamos a facilitar es muy sencillo, pero os puede dar ideas para ir potenciándolo y hacerlo mucho más funcional.
Os voy a dejar un código, que posteriormente lo deberéis adaptar a vuestra estructura.
Controller
Veamos el controlador con las tres funciones básicas: listar ficheros, eliminar y subir fichero. Es la parte esencial y en la que os debéis fijar. Aquí está «to el pescao».
<?php
namespace App\Modules\Filemanager\Controllers;
use App\Controllers\BaseControllerSuper;
use App\Models\ToolsModel;
use Config\Miconfiguracion;
class Filemanager extends BaseControllerSuper
{
private $files_url;
public function __construct()
{
$this->files_url = "./public/download/";
}
public function index()
{
if ( $this->estaLoguinado() ) {
helper('filesystem');
$data = [
'files' => get_dir_file_info($this->files_url, 1)
];
return view('\App\Modules\Filemanager\Views\filemanager', $data);
} else {
return redirect()->to('/admin/login');
}
}
public function deleteFile()
{
if ( $this->estaLoguinado() ) {
helper('filesystem');
$file_to_delete= $this->request->getGet("file");
if (unlink($this->files_url . $file_to_delete)){
$task= "ok";
} else {
$task= "ko";
}
return redirect()->to('/admin/filemanager');
} else {
return redirect()->to('/admin/login');
}
}
public function uploadFile()
{
if ( $this->estaLoguinat() ) {
helper('filesystem');
$validationRule = [
'file_to_upload' => [
'label' => 'File to upload',
'rules' => 'uploaded[file_to_upload]'
. '|mime_in[file_to_upload,image/jpg,image/jpeg,image/gif,image/png,image/webp,application/pdf,application/zip]'
. '|max_size[file_to_upload,1500]',
],
];
if ( $this->validate($validationRule) ) {
$x_file = $this->request->getFile('file_to_upload');
$x_file->move(FCPATH . $this->files_url . '/');
}
return redirect()->to('/admin/filemanager');
} else {
return redirect()->to('/admin/login');
}
}
}
De este código, os tenéis que quedar con:
helper(‘filesystem’);
Cargamos la librería que nos permite trabajar con los ficheros.
‘files’ => get_dir_file_info($this->files_url, 1)
Esta función devuelve un array con la estructura de carpetas y ficheros del enlace que les pases.
unlink($this->files_url . $file_to_delete)
Función encargada de eliminar el fichero
$x_file = $this->request->getFile(‘file_to_upload’);
$x_file->move(FCPATH . $this->files_url . ‘/’);
Estas dos acciones son las encargadas de recibir el fichero y moverlo a la carpeta que queramos (que normalmente debe ser una carpeta con permisos de escritura).
View
Veamos las tres acciones de listar, crear y eliminar que debemos poner en la vista:
Creación
<form action="<?php echo base_url("/admin/filemanager/uploadFile"); ?>" method="post" class="" enctype='multipart/form-data'>
<input type="file" name="file_to_upload" id="file_to_upload" />
<input type="submit" value="Enviar fichero" />
</form>
Listado
<?php
foreach ($files as $fic) {
echo "<tr>";
echo "<td>". $fic["name"] ."</td>";
echo "<td>". $fic["size"]/1000 ." Kb</td>";
echo "<td>". date("d/m/Y", $fic["date"]) ."</td>";
echo "<td>". base_url("/public/download/". $fic["name"]) ."</td>";
echo "</tr>";
}
?>
Eliminado
echo "<td>";
echo "<a href='". base_url("/admin/filemanager/deleteFile?file=". $fic["name"] ) ."'>Borrar</a>";
echo </td>";
Ya os avanzo, que debéis coger el código como referencia para que os de una idea. A partir de aquí debéis adaptarlo. Si copiais y pegáis, no funcionará. Las carpetas destino de los ficheros a subir, listar o borrar pueden cambiar.
Espero que este artículo os de idéas para crear vuestro gestor de ficheros en CodeIgniter 4.
Más información