Cos'è NexusGrab
NexusGrab è un'applicazione web in PHP pensata per centralizzare la gestione di documenti, guide, applicazioni e altri contenuti digitali. Può essere utilizzata come archivio interno aziendale, area download per clienti, repository di manuali oppure file manager privato su un server locale, hosting condiviso o NAS.
La piattaforma usa il file system come archivio reale dei documenti e un file JSON per conservare metadati, categorie e contatori dei download. Questa scelta rende l'installazione semplice: non è necessario predisporre MySQL o configurare un database relazionale.
Scarica NexusGrab dal repository Net Plus
Per iniziare, scarica l'archivio del progetto NexusGrab dal repository Net Plus disponibile per il tuo ambiente. Dopo il download, estrai il contenuto dell'archivio sul computer oppure direttamente nella cartella web del server.
Prima di pubblicarlo, verifica che l'estrazione abbia mantenuto le cartelle principali, in particolare admin, assets, config, data, includes e uploads. La presenza di questi elementi è essenziale per il funzionamento del frontend, del pannello di amministrazione e dell'archivio documentale.
Caratteristiche principali
NexusGrab riunisce in un'unica interfaccia le funzioni essenziali per la consultazione e la distribuzione controllata di file.
- Gestione file e cartelle: consente di organizzare i documenti in directory e sottodirectory.
- Navigazione gerarchica: usa breadcrumb e pagine di esplorazione per muoversi tra le cartelle.
- Download tracciati: incrementa il contatore di ogni download e salva le statistiche nel file JSON.
- Pannello amministrativo: permette di caricare, rinominare, eliminare e organizzare file e cartelle.
- Ricerca istantanea: filtra i documenti direttamente dalla pagina tramite JavaScript.
- Interfaccia responsive: il layout basato su Bootstrap 5 è utilizzabile da PC, tablet e smartphone.
- Pagine informative e legali: comprende pagine dedicate a informazioni, privacy policy, termini di servizio e cookie policy.
- Gestione sessioni: protegge l'area amministrativa con login e sessione PHP.
Requisiti di sistema
Per installare e utilizzare NexusGrab sono sufficienti i classici requisiti di un'applicazione web PHP:
- Server web Apache, Nginx oppure Web Station di Synology.
- PHP 7.4 o versione successiva.
- Estensioni PHP normalmente disponibili, incluse JSON, sessioni e funzioni file system.
- Permessi di lettura e scrittura per il processo PHP nelle directory
uploads/edata/. - Spazio disco proporzionato ai documenti che saranno archiviati.
- Browser web moderno per utilizzare il pannello pubblico e amministrativo.
data/files.json.
Installazione di NexusGrab
L'installazione di NexusGrab è pensata per essere rapida anche su hosting condivisi. Di seguito trovi una procedura adatta sia a un normale hosting PHP sia a un NAS Synology con Web Station.
1. Carica i file sul server
Estrai l'archivio di NexusGrab e carica l'intera cartella del progetto nella directory pubblica del sito. Su molti hosting questa cartella può chiamarsi public_html, htdocs oppure www; su Synology Web Station è spesso la cartella condivisa web.
Esempio di percorso su un NAS Synology:
/volume1/web/nexusgrab/Dopo il caricamento, l'homepage dell'applicazione dovrebbe essere raggiungibile con un indirizzo simile al seguente:
https://tuo-dominio.it/nexusgrab/Oppure, in rete locale:
http://IP-DEL-SERVER/nexusgrab/2. Controlla i permessi delle cartelle
NexusGrab deve poter scrivere nel file JSON contenente i dati e nella directory usata per i documenti caricati. Imposta quindi permessi adeguati per:
data/
data/files.json
uploads/Su un server Linux puoi impostare proprietario e permessi con comandi simili a questi, sostituendo www-data se il tuo web server usa un utente differente:
cd /percorso/del/sito/nexusgrab
sudo chown -R www-data:www-data data uploads
sudo find data uploads -type d -exec chmod 775 {} \;
sudo find data uploads -type f -exec chmod 664 {} \;Su hosting condiviso, in genere è sufficiente usare il file manager del provider e assegnare permessi di scrittura alla cartella data e alla cartella uploads. Evita permessi 777 quando non sono strettamente necessari.
3. Verifica il file dati JSON
Il file data/files.json conserva l'elenco dei documenti, le categorie e i download. Se il file non esiste, crealo con il seguente contenuto iniziale:
{
"files": [],
"categories": []
}In un'installazione già predisposta, il file può contenere record simili al seguente:
{
"files": [
{
"filename": "Guide/manuale-operativo.pdf",
"category": "Guide",
"filesize": 7634,
"upload_date": "2025-08-07 11:54:48",
"downloads": 1
}
],
"categories": []
}Non modificare manualmente il JSON mentre un amministratore sta caricando file o mentre il sito è molto utilizzato: potresti sovrascrivere aggiornamenti recenti. Prima di intervenire, crea sempre una copia di backup del file.
4. Configura NexusGrab
Apri il file config/config.php con un editor di testo. Questo file definisce i percorsi principali dell'applicazione e le credenziali dell'amministratore.
La struttura di base è simile a questa:
<?php
// Configurazione del sistema
define('UPLOAD_DIR', __DIR__ . '/../uploads/');
define('DATA_FILE', __DIR__ . '/../data/files.json');
define('ADMIN_USERNAME', 'admin');
define('ADMIN_PASSWORD', '$2y$10$...');
function getFilesData() {
/ Legge i dati JSON /
}
function saveFilesData($data) {
/ Salva i dati JSON /
}
function formatFileSize($bytes) {
/ Formatta le dimensioni /
}
?>
Controlla in particolare che UPLOAD_DIR indichi la cartella uploads/ corretta e che DATA_FILE punti al file data/files.json. Se hai spostato la cartella uploads fuori dalla root pubblica per maggiore sicurezza, aggiorna questo percorso e verifica che gli script di download servano i file tramite download.php.
5. Apri il sito e prova la navigazione
Apri la homepage index.php dal browser. Dovresti vedere le cartelle principali come card, una lista dei documenti presenti e la funzione di ricerca.
Crea, se necessario, alcune cartelle nella directory uploads/, ad esempio:
uploads/
├── Applicazioni/
├── Guide/
├── Modulistica/
└── Documenti-Riservati/Le cartelle possono essere usate come categorie automatiche: un file inserito in uploads/Guide/ verrà presentato come elemento della categoria Guide.
Accesso al pannello amministrativo
Il pannello amministrativo è disponibile nella cartella admin/. Apri il browser e raggiungi:
https://tuo-dominio.it/nexusgrab/admin/login.phpUsa queste credenziali iniziali:
Nome utente: admin
Password: admin123Dopo il primo accesso, modifica subito le credenziali predefinite. Non lasciare mai username e password iniziali su un'installazione esposta a Internet o utilizzata per documenti aziendali.
Modifica sicura della password admin
La password amministrativa non deve essere salvata in chiaro. Genera un hash bcrypt con PHP:
<?php
echo password_hash('Scegli-Una-Password-Lunga-e-Unica', PASSWORD_DEFAULT);Esegui temporaneamente il file sul server, copia l'hash prodotto e inseriscilo in config/config.php al posto del valore di ADMIN_PASSWORD.
Esempio:
<?php
define('ADMIN_USERNAME', 'admin');
define('ADMIN_PASSWORD', '$2y$10$inserisci-qui-l-hash-generato');
?>Dopo aver copiato l'hash, elimina immediatamente il file usato per generarlo. Non pubblicare mai password reali, hash amministrativi o file di test in cartelle accessibili dal web.
Struttura del progetto
NexusGrab è organizzato in modo chiaro per facilitare manutenzione e personalizzazioni:
nexusgrab/
├── admin/ # Pannello amministrativo
│ ├── index.php # Dashboard admin principale
│ └── login.php # Login amministratore
├── assets/ # Risorse statiche
│ └── css/
│ ├── style.css # Stile personalizzato
│ └── style.css.bak # Backup del CSS
├── config/ # Configurazione applicazione
│ ├── config.php # Costanti e funzioni comuni
│ └── database.php # Configurazione dati
├── data/ # Dati persistenti
│ └── files.json # File, categorie e download
├── includes/ # Componenti riutilizzabili
│ ├── header.php # Intestazione comune
│ ├── footer.php # Piè di pagina comune
│ ├── categories.php # Gestione categorie
│ └── recent_downloads.php # Download recenti
├── uploads/ # Documenti caricati
├── index.php # Homepage
├── browse.php # Esplorazione cartelle e file
├── download.php # Download controllato
├── info.php # Informazioni progetto
├── privacy-policy.php # Privacy policy
├── termini-servizio.php # Termini di servizio
├── cookie-policy.php # Cookie policy
└── README.md # DocumentazioneLe pagine di debug come debug_css.php, test_css.php, test_download.php, test_styles.php e test_dynamic_config.php non dovrebbero restare pubblicamente accessibili in produzione. Rimuovile oppure proteggile tramite autenticazione e limitazioni IP.
Come funziona il sito pubblico
La homepage, gestita da index.php, esegue la scansione della directory configurata in UPLOAD_DIR. Le cartelle principali vengono mostrate come categorie, mentre i file disponibili possono essere elencati in tabella con nome, posizione, dimensione e azioni di download.
La pagina browse.php usa il parametro path nell'URL per esplorare le sottocartelle. Il breadcrumb rende chiara la posizione corrente e consente di tornare facilmente ai livelli precedenti dell'archivio.
Esempio di URL per esplorare la categoria Guide:
https://tuo-dominio.it/nexusgrab/browse.php?path=GuideCome funziona il download
La pagina download.php deve verificare il file richiesto prima di inviarlo al browser. Dopo la validazione, aggiorna il numero di download nel file JSON e invia il contenuto con gli header HTTP appropriati.
Una struttura essenziale per verificare che un file richiesto appartenga effettivamente alla cartella consentita può essere questa:
<?php
$relativePath = $_GET['file'] ?? '';
$baseDir = realpath(UPLOAD_DIR);
$filePath = realpath(UPLOAD_DIR . $relativePath);
if ($baseDir === false || $filePath === false || strpos($filePath, $baseDir . DIRECTORY_SEPARATOR) !== 0) {
http_response_code(403);
exit('File non valido o non autorizzato.');
}
if (!is_file($filePath) || !is_readable($filePath)) {
http_response_code(404);
exit('File non trovato.');
}
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($filePath) . '"');
header('Content-Length: ' . filesize($filePath));
readfile($filePath);
exit;
Il controllo con realpath() e il confronto con la directory base aiutano a prevenire tentativi di path traversal, cioè richieste costruite per uscire dalla cartella uploads/ tramite sequenze come ../.
Ricerca file in tempo reale
NexusGrab può includere una ricerca lato client che filtra le righe della tabella senza ricaricare la pagina. Un esempio in JavaScript è il seguente:
const searchInput = document.getElementById('searchInput');
const rows = document.querySelectorAll('#filesTable tbody tr');
searchInput.addEventListener('input', function () {
const value = this.value.toLowerCase().trim();
rows.forEach(function (row) {
const text = row.textContent.toLowerCase();
row.style.display = text.includes(value) ? '' : 'none';
});
});
Assicurati che la pagina abbia un campo con ID searchInput e una tabella con ID filesTable. Per archivi molto grandi, considera in futuro una ricerca lato server con paginazione, così da non caricare tutti i file in una sola pagina.
Gestione documenti dal pannello admin
Dopo il login, il pannello admin/index.php può essere usato per svolgere le operazioni quotidiane sull'archivio:
- Caricare un nuovo documento nella cartella o categoria corretta.
- Creare cartelle per reparti, clienti, progetti o tipologie di documenti.
- Rinominare file e directory con nomi chiari e coerenti.
- Eliminare documenti obsoleti o caricati per errore.
- Consultare statistiche sui file e sui download.
Guide/2026-manuale-operativo-vendite.pdf
Modulistica/modulo-rimborso-spese.pdf
Applicazioni/client-vpn-azienda.exe
Documenti-Riservati/contratto-fornitore-2026.pdfEvita caratteri speciali, spazi multipli e nomi generici come documento-nuovo.pdf o file-finalissimo.pdf. Nomi coerenti facilitano ricerca, manutenzione e backup.
Sicurezza consigliata
NexusGrab può gestire file aziendali, quindi deve essere installato con particolare attenzione alla sicurezza.
- Cambia immediatamente le credenziali predefinite
admin/admin123. - Usa HTTPS con un certificato valido, soprattutto se l'accesso avviene da Internet.
- Proteggi la cartella
admin/con il login applicativo e, se possibile, con un ulteriore controllo HTTP Basic o limitazione IP. - Verifica e normalizza ogni percorso ricevuto via
$_GETo$_POST. - Usa
htmlspecialchars()quando mostri nomi di file, cartelle o altri dati in HTML. - Limita le estensioni caricabili e blocca l'upload di file eseguibili come
.php,.phtml,.phar,.cgie.sh. - Conserva backup regolari di
uploads/edata/files.json. - Rimuovi o rendi inaccessibili i file di debug e test prima della pubblicazione.
Protezione della cartella uploads
Se i file vengono serviti soltanto da download.php, puoi impedire l'esecuzione di script caricati nella cartella uploads/. Su Apache, crea un file .htaccess dentro uploads/ con questa configurazione:
Options -ExecCGI
<FilesMatch "\.(php|phtml|php[0-9]?|phar|cgi|pl|py|sh)$">
Require all denied
</FilesMatch>
Su Nginx, la protezione va configurata nel virtual host, bloccando l'esecuzione PHP all'interno del percorso degli upload. La regola precisa dipende dalla configurazione del server e dal percorso con cui NexusGrab è pubblicato.
Backup e manutenzione
I due elementi più importanti da salvare sono la directory uploads/, che contiene i documenti reali, e il file data/files.json, che contiene statistiche e metadati. Programma backup periodici verso una seconda destinazione: altro disco, NAS, cloud cifrato o repository di backup.
Un esempio di backup locale su Linux può essere eseguito con:
mkdir -p /backup/nexusgrab
rsync -a --delete /percorso/nexusgrab/uploads/ /backup/nexusgrab/uploads/
cp /percorso/nexusgrab/data/files.json /backup/nexusgrab/files.jsonPrima di aggiornare NexusGrab, copia l'intera cartella del progetto. In questo modo potrai ripristinare rapidamente la versione precedente in caso di file mancanti, incompatibilità PHP o modifiche non previste.
Problemi comuni
Errore di scrittura nel file JSON
Se upload, contatori download o modifiche amministrative non vengono salvati, controlla che data/files.json sia scrivibile dall'utente del web server. Verifica anche i permessi della directory data/, perché PHP potrebbe dover creare file temporanei o riscrivere il JSON.
Upload non riuscito
Controlla che uploads/ esista e sia scrivibile. Se i file sono grandi, verifica nel php.ini i parametri upload_max_filesize, post_max_size, max_execution_time e memory_limit.
Esempio di valori iniziali per documenti di medie dimensioni:
upload_max_filesize = 100M
post_max_size = 110M
max_execution_time = 120
memory_limit = 256MDopo aver aggiornato php.ini, riavvia il servizio PHP o il web server secondo la configurazione del tuo hosting o NAS.
Login amministrativo non funzionante
Verifica che il file config/config.php contenga username e hash password coerenti con la logica presente in admin/login.php. Se l'app usa password_verify(), il valore di ADMIN_PASSWORD deve essere un hash bcrypt o un hash generato da password_hash() e non una password scritta in chiaro.
Controlla inoltre che le sessioni PHP siano abilitate e che il server possa scrivere nella directory temporanea configurata per le sessioni.
File non trovato durante il download
Verifica che il percorso salvato nel JSON corrisponda al nome e alla posizione reale del file dentro uploads/. Su server Linux, maiuscole e minuscole sono differenti: Guide/manuale.pdf e guide/manuale.pdf indicano percorsi diversi.
Evoluzioni possibili
La struttura modulare di NexusGrab permette di introdurre miglioramenti senza riscrivere l'intero progetto.
- Migrazione da JSON a MySQL o MariaDB per gestire archivi molto grandi e accessi simultanei.
- Ruoli multiutente, ad esempio amministratore, redattore, dipendente e cliente.
- Permessi per cartella e documenti riservati per reparto.
- Ricerca full-text e filtri per autore, data, estensione o tag.
- Versionamento dei documenti con storico delle revisioni.
- Registro attività per upload, download, rinomina ed eliminazione.
- API REST per integrare NexusGrab con intranet, CRM o altri applicativi.
- Backup automatici, notifiche e scansione antivirus degli allegati.
Conclusione
NexusGrab è una base pratica per realizzare un archivio documentale web semplice da ospitare e da gestire. Grazie a PHP, Bootstrap, cartelle fisiche e archivio JSON, consente di partire velocemente senza configurare un database complesso.
Per l'uso aziendale reale, la priorità deve restare la protezione dei documenti: credenziali uniche, HTTPS, backup, controllo degli upload e accesso tramite rete privata o VPN. Con queste misure, NexusGrab può diventare un utile punto centralizzato per documentazione, file operativi e risorse condivise.
Commenti e Feedback (0)
Devi aver effettuato l'accesso per poter scrivere un commento su questo progetto.
Accedi al tuo Account oppure Registrati