Riepilogo post nella categoria Server Apache

Effettuare upgrade a PHP 7.2

Con l'avvento di PHP 7.0 il web è diventato più veloce. Molto più veloce. Oltre a tutte le facilitazioni per lo sviluppatore relative al linguaggio in senso stretto, l'incremento di prestazioni nella major release 7 di PHP è davvero notevole, ed è visibile ad occhio nudo, sia utilizzando CMS molto abusati come Wordpress sia utilizzando codice senza framework o script ad-hoc. Si capisce al primo colpo che la propria applicazione sta performando meglio.

Qui sotto riporto una immagine rappresentativa di test basati solo ed esclusivamente sul profilo computazionale delle versioni di PHP dalla 5.0.5 alla 7.1 effettuate da

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update

Istruzioni per PHP 7.2 per Debian 8 (Jessie) e 9 (Stretch)

sudo apt-get install apt-transport-https lsb-release ca-certificates
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt-get update

Questi comandi aggiungeranno il repository PPA di Ondřej Surý's, che si occupa di mantenere i pacchetti di PHP 7.2 (oltre a moltre altre versioni) e renderlo disponibile per molte versioni di Linux.

Prima di passare alla installazione vera e propria, però, con i relativi comandi, è necessario fare un pò di attenzione preliminare.

Prima di tutto, create una lista di tutti i pacchetti aggiuntivi di PHP che avete installato sul vostro sistema, come ad esempio php-mbstring o php-curl o php-intl . Questo è necessario perchè poi dovrete reinstallare i corrispettivi in versione 7.2.

In genere, per una normale installazione LAMP, quindi PHP con Apache e Mysql, che supporti la quasi totalità dei requisiti minimi richiesti dai comuni CMS, è necessario installare questi pacchetti: libapache2-mod-php7.2 php7.2 php7.2-common php7.2-gd php7.2-mysql php7.2-imap php7.2-cli php7.2-cgi php7.2-curl php7.2-intl php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl php7.2-zip php7.2-mbstring php7.2-soap

Ad ogni modo, io consiglio di operare in questa maniera: dapprima disinstallare tutti i pacchetti di PHP attualmente presenti sul sistema, lasciare che apt ci dica quali pacchetti sta per disinstallare, e poi digitare manualmente la lista di pacchetti da installare andando a leggere quelli che sono stati disinstallati, usando le nuove versioni "-7.2".

Per disinstallare tutto ciò che riguarda PHP dal sistema è sufficiente digitare questo comando:

sudo apt-get remove --purge php*

Poi, analizzare i pacchetti disinstallati, ed installare tutte le rispettive versioni "7.2". Sopra ho riportato la lista di pacchetti di base che vanno bene per la maggior parte dei casi, però, è comunque necessario porre attenzione a quello che si sta facendo, in quanto questo update non è un semplice "aggiorna e dimentica" ma si tratta di un aggiornamento a pacchetti non ufficiali e che potrebbe rendere instabile o non funzionante il vostro ambiente.

sudo apt-get install libapache2-mod-php7.2 php7.2 php7.2-common php7.2-gd php7.2-mysql php7.2-imap php7.2-cli php7.2-cgi php7.2-curl php7.2-intl php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl php7.2-zip php7.2-mbstring php7.2-soap

Testare il vostro sistema dopo l'installazione, non solo andando ad aprire sul browser la vostra applicazione, ma andando a leggere i log di errore di PHP e Apache è un obbligo. Lì potrete capire se c'è qualche pezzo del software non compatibile con la nuova versione, o se avete dimenticato un pacchetto aggiuntivo di PHP che ne estende le funzionalità.

Header Expires per file htaccess

Postato in Server Apache

Da un pò di tempo ormai la velocità del caricamento di un sito web è diventato un fattore SEO determinante.

Più un sito è veloce, più è veloce da fruire per qualsiasi cliente. Da questa logica, ne consegue che i motori di ricerca stanno "potenziando" tutti i siti che aderiscono a determinate regole per la velocità di caricamento.

Oltre ai meri fattori tecnici del server su cui è ospitato il sito ( ovvero, più il server ospitante è potente, più il sito stesso è veloce ), ci sono altri fattori determinanti per la velocità del sito.

Una di queste è il caching delle risorse fatto via browser. Una volta caricata una qualsiasi pagina del vostro sito, il browser del cliente "ha bisogno di sapere" cosa può salvare e riutilizzare per evitare di dover ri-scaricare risorse immagine, css o javascript che non hanno subìto modifiche dall'ultima volta che sono state scaricate.

Un sistema veloce e indolore per configurare il vostro server Apache per aumentare la velocità del sito è quella di usare il modulo "Expires" di Apache. Così facendo, Apache potrà rispondere, oltre ai dati della risorsa in output, anche altri header addizionali che faranno sì che il browser capisca "per quanto tempo" può cachare una risorsa.

<IfModule mod_expires.c>
	ExpiresActive on

	# Fallback per tutte le risorse non classificate
	ExpiresDefault                          "access plus 1 month"

	# cache.appcache per FF 3.6
	ExpiresByType text/cache-manifest       "access plus 0 seconds"
	
	# Documenti HTML
	ExpiresByType text/html                 "access plus 0 seconds"
	
	# Dati
	ExpiresByType text/xml                  "access plus 0 seconds"
	ExpiresByType application/xml           "access plus 0 seconds"
	ExpiresByType application/json          "access plus 0 seconds"

	# Feed RSS
	ExpiresByType application/rss+xml       "access plus 1 hour"

	# Favicon
	ExpiresByType image/x-icon              "access plus 1 week"

	# Media: immagini, video, audio
	ExpiresByType image/gif                 "access plus 1 month"
	ExpiresByType image/png                 "access plus 1 month"
	ExpiresByType image/jpg                 "access plus 1 month"
	ExpiresByType image/jpeg                "access plus 1 month"
	ExpiresByType video/ogg                 "access plus 1 month"
	ExpiresByType audio/ogg                 "access plus 1 month"
	ExpiresByType video/mp4                 "access plus 1 month"
	ExpiresByType video/webm                "access plus 1 month"

	# HTC files  (css3pie)
	ExpiresByType text/x-component          "access plus 1 month"

	# Webfonts
	ExpiresByType font/truetype             "access plus 1 month"
	ExpiresByType font/opentype             "access plus 1 month"
	ExpiresByType application/x-font-woff   "access plus 1 month"
	ExpiresByType image/svg+xml             "access plus 1 month"
	ExpiresByType application/vnd.ms-fontobject "access plus 1 month"

	# CSS e JavaScript
	ExpiresByType text/css                  "access plus 1 month"
	ExpiresByType application/javascript    "access plus 1 month"
	ExpiresByType text/javascript           "access plus 1 month"

	<IfModule mod_headers.c>
		Header append Cache-Control "public"
	</IfModule>
</IfModule>

Il pezzo di codice qui sopra è da copia-incollare all'interno del file .htaccess principale del vostro sito.

Nel caso in cui questa tecnica non stia funzionando ( per verificarlo, controllare gli header di risposta di tutte le risorse del vostro sito tramite gli Strumenti Sviluppatore del vostro browser ) può voler dire che Apache non ha il modulo "mod_expires" compilato ed attivato, oppure che c'è qualche altro plugin ( per esempio su Wordpress ) o pezzo di codice che sta di fatto sovrascrivendo il behaviour del mod_expires di Apache.

Si avverte che le modifiche fatte al file .htaccess possono essere potenzialmente distruttive per la funzionalità del vostro sito, rendendolo non disponibile in caso di errori di battitura o di formattazione. Nel caso in cui ciò dovesse accadere, noterete che il server vi risponde con un "Errore 500".

Prima di effettuare modifiche, quindi, fate sempre un backup preventivo.

Cloud aziendale (quasi) gratis con OwnCloud

Attenzione! Questo contenuto è vecchioQuesto articolo risale al 2016, quindi i contenuti e le operazioni qui consigliate potrebbero essere diventate obsolete nel corso del tempo.

I servizi di Cloud Storage, come ad esempio Dropbox o Google Drive si sono affermati nel corso degli anni come degli strumenti praticamente indispensabili per la informatizzazione dei processi aziendali, e per la condivisione di informazioni tra colleghi e professionisti.

L'unico grosso problema di questi servizi, è che con il crescere dell'operatività aziendale, con il crescere delle persone che utilizzano contemporaneamente il servizio, e con il crescere dell'esigenza di informatizzare tutti i processi aziendali, lo spazio di archiviazione diventa un fattore di criticità, perchè il prezzo di questi servizi aumenta considerevolmente aumentando lo spazio ( e il numero di utenti simultanei ) richiesto.

Giusto per fare un esempio, Google Drive costa circa 2 euro al mese per 100GB di spazio, e il piano tariffario subito successivo obbliga ad acquistare 1TB di storage al costo di circa 10 euro al mese.

Quindi, come si può implementare una soluzione più economica e più scalabile per cloudicizzare l'operatività?

Esiste un software opensource di nome OwnCloud, che mette a disposizione sia il software necessario per l'installazione del "core" su un server Linux, sia i client windows, mac e linux per collegare appunto il server alle proprie sincronizzazioni.

In più, una volta installato il Core sul proprio server, OwnCloud mette a disposizione una interfaccia grafica wia web davvero professionale e accattivante, che servirà all'amministratore per configurare l'ambiente di condivisione, per creare utenti e grupppi, e configurare le impostazioni di base come quelle del relay di posta per le notifiche.

Quindi, quali sono i passaggi per installare e configurare OwnCloud? Ecco una breve guida per l'installazione di OwnCloud

  • 1. Acquistare un server Linux economico con abbastanza spazio. Per questo consiglio caldamente l'acquisto di un server su Backupsy. Con circa 5.5 euro al mese si può acquistare un server da 250GB con una versione di Linux a piacimento. E' caldamente consigliato l'utilizzo di Debian o Ubuntu.
  • 2. Configurare il server LAMP ( Apache, Mysql, PHP ) oppure LEMP ( Nginx, Mysql, PHP ) per poter ospitare correttamente l'installazione di OwnCloud. Attenzione: in caso di utilizzo di Debian 7, l'installazione del server LAMP sarà un pò più complessa perchè il repository ufficiale di Debian 7 mette a disposizione PHP versione 5.4, mentre per l'installazione di OwnCloud è caldamente consigliabile utilizzare una versione di PHP maggiore o uguale alla 5.6, sebbene OwnCloud supporti i sistemi PHP dalla 5.4 in poi. Il fatto di avere una installazione LAMP con una versione di PHP più aggiornata è derivato dal fatto che gli aggiornamenti di PHP non solo correggono delle grosse falle di sicurezza, ma sono molto più performanti.
  • 3. Configurare PHP installando queste estensioni: Ctype, Dom, GD, Iconv, JSON, LibXml, mbstring, Posix, SimpleXML, XMLWriter, Zip, Zlib. Inoltre, è caldamente consigliato installare anche i moduli APC o APCu ( sono delle estensioni di Memory Caching per PHP ). Se avrete bisogno anche di funzionalità di anteprima dei file multimediali all'interno di OwnCloud, come ad esempio le immagini e i file video / audio, dovrete anche occuparvi dell'installazione dei moduli Imagick di PHP, FFMPEG e OpenOffice sul sistema.
  • 4. Configurare un VirtualHost con un dominio esistente e raggiungibile da server DNS ( ci servirà per la configurazione dell'HTTPS ). Ad esempio, se la vostra azienda ha un sito internet con nome di dominio www.aziendapincopallo.it, vi consiglio di creare un sottodominio, ad esempio cloud.aziendapincopallo.it, e configurare il VirtualHost sul nuovo server in modo che risponda a questo sottodominio. Attenzione alle configurazioni che permettono l'accesso diretto via indirizzo IP del server. I VirtualHost sono da configurare come si deve.
  • 5. Installare un certificato SSL gratis tramite l'utilizzo di Let's Encrypt. Nella fattispecie, dovrete utilizzare il tool certbot che si occuperà di configurarvi automaticamente il server Apache ( con il virtualhost configurato correttamente ). L'utilizzo di SSL è seriamente e caldamente consigliato perchè, in caso di assenza, le password di autenticazione tra i Client di sincronizzazione e il Server con il "core" di OwnCloud viaggerebbero in chiaro sulla rete Internet. Quindi, un qualsiasi man in the middle, anche con pochissima esperienza in hacking, potrebbe prendere il controllo del vostro ambiente Cloud, con tutte le conseguenze del caso.
  • 6. Completate l'installazione di OwnCloud andando con il browser sulla posizione di installazione, e configurare i parametri di connessione mysql. Ovviamente, non c'è neanche da ricordarlo, durante tutte le fasi di configurazione, usare sempre password CASUALI maggiori di 18 caratteri.
  • 7. Installare i Client di sincronizzazione sul vostro PC, Windows Mac o Linux che sia. Per la visualizzazione in mobilità, invece, consiglio l'utilizzo di una applicazione per Android che si chiama Solid Explorer. E' un file viewer per Android, che però permette di inserire delle "cartelle virtuali" come se esistessero all'interno del vostro smartphone. Tra le tante opzioni per la creazione di cartelle virtuali, tra cui Dropbox, Google Drive, Amazon S3, c'è anche la possibilità di inserire un server OwnCloud. Vi basterà quindi semplicemente digitare l'indirizzo di installazione ( in https ) del vostro OwnCloud, username e password, e avrete a disposizione tutti i vostri file.

E' chiaro che l'installazione e la configurazione sono fattibili solo da persone che hanno buone competenze in Linux e in amministrazione di sistemi LAMP, ma con un pò di tempo e pazienza, e leggendo qualche guida, è fattibile da chiunque.

Nel caso in cui tu stia valutando l'opportunità di usare OwnCloud per la tua azienda, e avessi bisogno di consulenza PHP a Torino o mysql database administrator a Torino, contattami usando il modulo presente in questo sito.

Attenzione! Questo contenuto è vecchioQuesto articolo risale al 2012, quindi i contenuti e le operazioni qui consigliate potrebbero essere diventate obsolete nel corso del tempo.

Oggi vedremo come correggere un problema che ho notato essere molto (troppo) presente sulle installazioni di Wordpress hostate su Aruba: la visualizzazione di pagine di errore 500 internal server error che capitano più spesso dopo l'upgrade di plugin/temi o del core di wordpress.

Personalmente ho lavorato su un paio di siti Wordpress installati su Aruba, e in entrambi mi è capitato almeno una volta questo stranissimo problema, subito dopo l'upgrade del core. L'ultima volta mi è capitato proprio l'altro ieri, con l'aggiornamento alla versione 3.4.

Bando alle ciance, vediamo come risolvere la questione. Andiamo per step.

1. Accedi al tuo pannello di controllo personale di Aruba loggatevi su admin.aruba.it con le vostre credenziali. Spostatevi su "Pannello gestione Hosting Linux"

2. Clicca sulla scheda "Strumenti ed Impostazioni", quindi clicca su "Riparazione Permissions"

3. Conferma l'operazione ed attendi qualche minuto.

L'attesa è necessaria in quanto Aruba modificherà ricorsivamente tutti i permessi di tutti i file e le cartelle presenti sul tuo archivio: ovviamente, va da sè che a maggior quantitativo di file, maggiore è il tempo da attendere per far sì che la modifica si propaghi a tutto il tuo webserver.

NOTA IMPORTANTE: questo è uno dei tanti problemi che possono scatenare un errore 500 Internal Server Error su Wordpress, e più in particolare su Wordpress+Aruba: questa guida potrebbe anche non funzionare nel tuo caso. Infatti, altre volte possono essere problemi nel file .htaccess o nella incompatibilità tra due plugin o tra plugin e temi a scatenare un errore simile, ma essendo questa procedura molto veloce val la pena di tentare :) se vi va bene, vi siete evitati un mal ti testa assicurato!

Attenzione! Questo contenuto è vecchioQuesto articolo risale al 2011, quindi i contenuti e le operazioni qui consigliate potrebbero essere diventate obsolete nel corso del tempo.

Un buon sito si costruisce prima di tutto creandolo con funzionalità multilingua. Ovvero, sulla base dell'IP dell'utente, cercare di mandare in output il sito nel suo linguaggio senza troppi fronzoli tecnici.

Questo si traduce, nella pratica, nella creazione di un sito con una buona classe di traduzione delle stringhe on-the-fly, un pò come fa wordpress. Per esempio, wordpress fa uso dei file di traduzione *.po e *.mo.. Si definisce una stringa, con la sua "chiave primaria" nel linguaggio che si vuole, ad esempio:

<div id="test"><?php echo __ ( 'This is the main key for the string "this is the main key for the string"' ); ?></div>

A questo punto, aiutandovi con le funzioni di output buffering, e sulla base della geolocation dell'IP dell'utente che sta visualizzando il sito, potete mandare in output la traduzione corretta della stringa This is the main key for the string "this is the main key for the string"

In internet esistono svariate classi che permettono la geolocation. A me personalmente non piace fare le cose semplici, e mi piace avere la situazione sotto controllo. Quindi, mi sono documentato, e ho trovato un sito che permette il download di un file di mapping tra indirizzi IP e stati.

Avendo in mano un file del genere, è possibile creare un DB che abbia le referenziazioni tra IP e location, e così possiamo dare sfogo alla nostra creatività in termini di output da mandare all'utente ^^

Prima di tutto, prepariamo i DB che contengono i dati del DB IP-to-country

CREATE TABLE IF NOT EXISTS `ip_to_country` (
  `id` int(11) NOT NULL auto_increment,
  `ip_start_integer` int(11) NOT NULL,
  `ip_end_integer` int(11) NOT NULL,
  `country_id` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `ip_start_integer_index` (`ip_start_integer`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `country_list` (
  `id` int(11) NOT NULL auto_increment,
  `country_code` varchar(10) character set utf8 collate utf8_bin NOT NULL,
  `country_name_en` varchar(255) character set utf8 collate utf8_bin NOT NULL,
  `country_name_it` varchar(255) character set utf8 collate utf8_bin NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `country-name` (`country_name_en`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

Adesso, passiamo alla parte divertente, cioè al parsing del file di mapping IP-country e al relativo salvataggio dei dati nelle nostre 2 tabelle mysql

<?php
	/*
		http://www.ipinfodb.com/
		
		API KEY: bisogna registrarsi per averla
		http://lite.ip2location.com/?file=IP2LOCATION-LITE-DB1.CSV.ZIP&key=	
	*/

	// CONNESSIONE AL DB - DA INSERIRE QUI
	
	$stream_ZIPFILE = __CURL_getURL( 'http://lite.ip2location.com/?file=IP2LOCATION-LITE-DB1.CSV.ZIP&key=la-chiave-api-del-sito-ipinfodb.com', 'http://www.ipinfodb.com/download.php?file=IP2LOCATION-LITE-DB1.CSV.ZIP' );
	file_put_contents ( 'tempzipfile', $stream_ZIPFILE );
	$stream_ZIPFILE = ''; // releasing memory for this variable
	
	$zip = zip_open ( 'tempzipfile' );
	unlink ( 'tempzipfile' );
	do {
		$entry = zip_read($zip);
	} while ($entry && zip_entry_name($entry) != "IP2LOCATION-LITE-DB1.CSV");
	
	zip_entry_open($zip, $entry, "r");
	$entry_content = zip_entry_read($entry, zip_entry_filesize($entry));
	$entry_content = str_replace ( chr(13).chr(10), chr(10), $entry_content );
	
	$linee = explode ( chr(10), $entry_content );
	$entry_content = ''; // releasing memory for entry_content ( it's a long string )
	
	// flushing ip_to_country DB
	$sql = "TRUNCATE TABLE ip_to_country";
	mysql_query($sql);
	
	// parsing Text DB Lines
	foreach ( $linee as $linea ) {
		list ( $start_ip_integer, $end_ip_integer, $country_code, $country_name ) = explode ( ',', str_replace ( '"', '' , $linea ) );
		
		// inserting country into country DB  (if needed)
		$sql = "SELECT id FROM country_list WHERE country_name_en='" . $country_name . "'";
		$rs = mysql_query ( $sql );
		if ( $rs && mysql_num_rows ( $rs ) == 1 ) $idCountry = mysql_result ( $rs, 0 );
		else {
			// translating country in Italian
			$stream_TRANSLATE = __CURL_getURL( 'https://www.googleapis.com/language/translate/v2?key=la-tua-api-key-google.translate&q=' . urlencode ( $country_name ) . '&source=en&target=it', 'http://www.google.it/' );
			$stream_TRANSLATE_array = json_decode ( $stream_TRANSLATE );
			$countryname_IT = strtoupper ( $stream_TRANSLATE_array -> data -> translations[0] -> translatedText );
			
			$sql = "INSERT INTO country_list ( country_code, country_name_en, country_name_it ) VALUES ( '$country_code', '$country_name', '$countryname_IT' )";
			mysql_query ( $sql );
			
			$idCountry = mysql_insert_id();
		}
		
		$sql = "INSERT INTO ip_to_country ( ip_start_integer, ip_end_integer, country_id ) VALUES ( '$start_ip_integer', '$end_ip_integer', '$idCountry' )";
		mysql_query ( $sql );
	}


	function __CURL_getURL($url, $referer) {
		$header[0] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
		$header[] = "Cache-Control: max-age=0";
		$header[] = "Connection: keep-alive";
		$header[] = "Keep-Alive: 300";
		$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
		$header[] = "Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3";
		$header[] = "Pragma: ";
		$header[] = "Referer: " . $referer;

		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
		curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
		curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3");
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($ch, CURLOPT_VERBOSE, true);
		curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/cookies.txt');
		curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/cookies.txt');
		$result = curl_exec($ch);
		curl_close($ch);

		return $result;
	}

?>

Per avviare questo codice, avrete bisogno di 2 api key:

  • Una api key del servizio http://www.ipinfodb.com/ - rimpiazza la stringa "la-chiave-api-del-sito-ipinfodb.com" all'interno del sorgente qui sopra con la tua api key
  • Una api key del servizio Google Translate API - rimpiazza la stringa "la-tua-api-key-google.translate" all'interno del sorgente qui sopra con la tua api key

Una volta fatto tutto, potete schedulare questo script per l'esecuzione automatica con un cronjob. Anche una volta alla settimana va bene, non è necessario farlo partire ogni ora ^^

Ora, ti starai chiedendo: e come faccio a stabilire la geolocation dell'utente con questi due database? Bene, ecco le poche linee di codice per sfruttare le tabelle.

// ottenere la "country_id" dal database delle country per un particolare IP
$ip = $_SERVER['REMOTE_ADDR']; // o qualsiasi ip nel formato 123.123.123.123 ottenuto con qualsiasi metodo
$sql = "SELECT country_id FROM ip_to_country WHERE ip_start_integer <= " . ip2long ( $ip ) . " ORDER BY ip_start_integer DESC LIMIT 1";
$rs = mysql_query ( $sql );
if ( $rs ) $country_id = mysql_result ( $rs, 0 );

Con la country_id per un particolare IP, sarà vostro compito stabilire quale lingua mandare in output all'utente.
Ovviamente, questo database può avere tantissimi risvolti pratici. Un altro che mi viene in mente è la geolocalizzazione di server proxy, o la geolocalizzazione degli IP di una applicazione di tracciamento degli utenti.

Insomma, con le tabelle IP-to-country avrete a disposizione tantissime possibilità di sviluppo e soprattutto, avendo in mano i dati nel vostro DB, potrete generare i volumi di traffico che desiderate per quanto riguarda le geolocation calcolate per ora. Infatti, alcuni servizi online di geolocalizzazione, vi impediscono di fare più di un tot di query all'ora.

Attenzione! Questo contenuto è vecchioQuesto articolo risale al 2009, quindi i contenuti e le operazioni qui consigliate potrebbero essere diventate obsolete nel corso del tempo.

Chi amministra un server web sa quanto è importante il discorso del salvataggio di quanto è stato creato, sia a livello di database sia a livello di file, di righe di codice scritte.

Per fortuna alcuni svegli programmatori di ngcoders.com hanno pensato a questo problema e hanno creato un piccolissimo script in grado di creare una copia di backup del filesystem e del database in una sola passata.
Sinceramente non ho trovato il nome di questo script, penso che lo chiamerò con un nome eloquente come 1-click filesystem and database backup tool

Il file .zip scaricato si compone di 3 file principali, scritti in php:

  • backup.php : lo script principale da richiamare per avviare il processo di backup
  • functions.php : le classi e le funzioni principali che creano fisicamente i backup
  • config.php : il file di configurazione semplice nel quale specificare le opzioni del backup che vogliamo ottenere

Il file di configurazione è assai semplice, come ho sottolineato prima, ecco una anteprima e qualche istruzione per completarlo:
<?php
// Quali directory/file da backuppare ( i nomi delle directory con lo slash iniziale )
// e' un array, quindi ricordatevi la virgola dopo ogni elemento tra le virgolette
$configBackup = array('../');
// Quali directory da saltare durante il processo di backup
$configSkip   = array('backup/');  
// Dove piazzare i file di backup a completamento dei processi? (ricordarsi lo slash finale)
$configBackupDir = 'backup/';
// I database dei quali effettuare il backup. Possono essere multipli. (Se l'array delle tabelle contiene delle entry, verranno salvate SOLO quelle tabelle!)
$configBackupDB[] = array(
'server' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'databasename',
'tables' => array('tabella1', 'tabella2', 'tabella3')
);
// Se vogliamo che il backup ci venga spedito via posta elettronica, specifichiamo un indirizzo valido
$configEmail = 'test@test.example.com';
?>

Niente di più semplice e niente di più funzionale: uno di quei tool che un Web Developer dovrebbe sempre tenere sotto mano, una sorta di chiave inglese da 10 del programmatore php/mysql

Ecco il link per scaricare il programma: script per la creazione di backup di file e database
Buon lavoro!