# PHP-Nuke

PHP-Nuke è stato un software di Content Management System (CMS) per siti web dinamici. Scritto interamente in PHP e coadiuvato da MySQL per la gestione del database, è stato uno dei primi software di questa categoria. È distribuito con licenza GNU General Public License. L'idea nasce nel 2000 da una cerchia ristretta di appassionati, trasformatasi in pochi anni in una vasta comunità che lavora assiduamente al progetto. La versione 8.2, è tornata ad essere interamente gratuita. La versione 8.1 era stata commercializzata a pagamento, ma la licenza GNU consentiva di ridistribuirla gratuitamente una volta acquistata. Ora tutte le versioni sono gratuite.

## Requisiti
### Installazione remota

Requisiti minimi del ServerWeb:
* PHP 4.3.0;
* MySQL 3.22;
* Server Linux con 10MB di spazio sul disco: spazio richiesto per l'installazione base. L'aggiunta di addons o template comporterà un aumento dello spazio utilizzato sia sull'hardisk che sul database.
Requisiti consigliati del ServerWeb:
* PHP 5.3.2;
* MySQL 4.1 (versione raccomandata) o successive;
* Server Linux con 100MB di spazio sul disco: spazio richiesto per installazione base ed eventuali addons o template aggiuntivi.

### Installazione locale

Requisiti consigliati:
* Sistema operativo: Windows, Linux, Unix;
* Pacchetto AMP (Apache MySQL PHP): consigliato EasyPHP in ambiente Windows, LAMP in ambiente Linux;
* Spazio sul disco 80MB: spazio richiesto per l'installazione base ed eventuali addons o template aggiuntivi.

## Caratteristiche

PHP-Nuke nella versione standard offre all'utente le seguenti funzioni:
* Gestione degli Utenti: PHP-Nuke permette di gestire gli utenti registrati e da loro la possibilità di interagire all'interno del sito tramite uno strumento di messaggistica istantanea;
* Ricerca all'interno del sito semplice e veloce grazie all'aggiunta di un motore di ricerca interno;
* Area Download gestibile con 3 diversi tipi di livelli di sicurezza (Tutti, Solo Iscritti e Amministratori);
* Possibilità di un forum all'interno del sito con motore di ricerca interamente dedicato;
* Gestione di Banner associati ad uno o più clienti tramite AdServer interno;
* Area FAQ;
* Area Statistiche;
* Area TOP: in quest'area è possibile visualizzare i contenuti più popolari nel sito;
* Estensibilità attraverso Moduli personalizzabili;
* Gestione degli HTTP Referrer;
* Look&Feel disaccoppiato dalla logica, ogni utente può scegliere quale tema utilizzare tra quelli disponibili;
* Gestione di RSS/RDF per l'export delle news;
* Gestione Newsletter.

## Struttura del CMS

La struttura del CMS è basata sull'utilizzo di blocchi e moduli:
I blocchi riportano delle funzioni che si ripetono in tutte le pagine del sito e ne esistono di due tipi:
* di sistema sono dei blocchi presenti in numero fisso ed hanno un comportamento predefinito.
* utente sono dei blocchi personalizzabili liberamente dall'utente
I moduli sono il cuore della pagina stessa. Ogni pagina ha il suo modulo con la rispettiva funzione (es. modulo news o modulo search) e l'amministratore può scegliere un qualsiasi modulo come pagina principale.
La struttura di una pagina di PHPNuke è composta da 3 colonne. Nella colonna centrale sono presenti i moduli, nelle 2 colonne laterali sono presenti i blocchi. Dalla versione 6.x i blocchi possono essere aggiunti anche alla colonna centrale del sito, scegliendo la posizione top o bottom. Oltre alle 3 colonne principali vi è la presenza di un Header (testata) e un Footer (Fondo pagina).

## Struttura cartelle

PhpNuke è essenzialmente composto da due cartelle. La prima, denominata "sql", contiene il database del sito. La seconda cartella, "html", contiene tutti i file del sito. Di seguito una descrizione dei file e delle sottocartelle contenute in essa:

### File

* index.php: è la pagina iniziale del sito.
* mainfile.php: effettua dei controlli sulla versione del PHP e sul database. Controlla inoltre se l'utente è registrato al sito.
* admin.php: rimanda all'amministrazione del sito
* backend.php: gestisce l'output delle notizie eventualmente prelevate da altri siti
* config.php :questo è il file di configurazione di PHPNuke, contiene le impostazioni necessarie per dialogare con il database
* footer.php: gestisce la parte inferiore della pagina caricata(footer o pie' di pagina)
* header.php:gestisce la parte superiore della pagina caricata(header o intestazione)
* robots.txt: contiene una serie di istruzioni per i motori di ricerca

### Cartelle

* Blocks: contiene tutti i blocchi inclusi in PHP Nuke
* Images:contiene tutte le immagini del sito
* include: contiene frammenti di codice che vengono integrati quando occorre nelle pagine del sito
* Language: tutti i file di traduzione di PHPNuke sono contenuti in questa cartella
* Modules: contiene tutti i moduli
* Themes: contiene tutti temi grafici del sito

## Backoffice: interfaccia di amministrazione

Effettuando il login alla pagina admin.php è possibile accedere al pannello di amministrazione di PHPNuke. Le aree su cui l'utente può agire dipendono fortemente dal grado di registrazione dello stesso. Un superadmin ha l'accesso illimitato a tutte le aree del sito, un admin visualizzerà solamente le aree su cui è abilitato a lavorare.
Il pannello di amministrazione offre all'utente svariate funzioni, tra le più importanti ricordiamo:
* Aggiungi Articolo: permette all'utente di aggiungere articoli alla sezione news;
* Backup DB: permette la creazione di una copia di backup del sito contenente struttura e contenuto del database;
* Blocchi: permette la gestione e il posizionamento all'interno del sito dei blocchi precedentemente creati;
* Download: permette la gestione dei download creando categorie e sottocategorie in cui è possibile aggiungere file. L'upload, per motivi di sicurezza è possibile farlo soltanto tramite link esterno alla risorsa da caricare.
* HTTP referrers: consente di visualizzare gli ultimi accessi al sito;
* Optimize DB: incrementa le prestazioni del database ottimizzando la struttura dei dati;

## Sicurezza

PHPNuke è stato spesso criticato per i suoi problemi di sicurezza. Una delle falle più gravi riguarda l'uso della tecnica SQL injection. Per risolvere queste vulnerabilità, la comunità di PHPNuke offre supporto fornendo dei suggerimenti per correggere le falle oppure attraverso dei moduli creati per proteggere il cms da vulnerabilità ben precise.

## Varianti

Esistono alcune varianti di PHPNuke, chiamate forks, che migliorano PHPNuke aggiungendo nuove funzionalità e correggendo eventuali bug. I forks più popolari sono:
* Dragonfly CMS: basato su PHP-Nuke 6.5, include un'applicazione chiamata Coppermine Photo gallery
* Nuke-Evolution: include molte correzioni sulla sicurezza e svariati moduli, blocchi e mods pre-installati.
* PostNuke: basato su PHP-Nuke 5.0
* MegaNuke: basato sulla versione 7.4 di PHP-Nuke, corregge diverse falle di sicurezza e include più funzioni rispetto a PHP-Nuke.
* Clean Nuke Archiviato il 4 settembre 2012 in Internet Archive.: basato su Php-Nuke 7.6 ne conserva lo scheletro di base rivoluzionando tuttavia la funzione per cui Nuke è stato concepito: non più un cms per sviluppare community, ma un cms per gestire semplici pagine contenuto.