estrazione ed eliminazione files vecchi da una directory
Ciao,
vorrei un aiuto perché sto lavorando con la libreria getttext(), e perciò i files .po/.mo, e sono riuscito - dopo molti tentativi - a liberare la cache del server Apache, ma vorrei fare di più, ovvero eliminare con PHP I VECCHI FILES .MO CHE ALTRIMENTI RIMANGONO NELLA CARTELLA CHE HO PREDISPOSTO, EVITANDO DI FARLO A MANO, COME DEVO FARE ORA.
Infatti gettext() o il suo alias _(), tiene nella cache di Apache gli originali file .mo, di conseguenza se faccio delle modifiche, tramite Poedit, ai file .po, queste non si vedrebbero: cioè se cambio/aggiungo qc. alle traduzioni non verrebbero mostrate.
Se si ha accesso al server, tipo in locale, (non online su hosting condivisi, come altervista.org) si può riavviare il server, altrimenti l'unico altro workaround sta nel cambiare il dominio, cioè il nome del file .po/.mo, che va poi passato alle funzioni bindtextdomain(), e poi textdomain().
Non riesco ad eliminare dalla directory con i files .mo quelli vecchi!!!!
Ho provato anche ad entrarci con un loop while, ma nulla!
Allora ho optato per la funzione dirname(), poi la scansiono con scandir(), ed infine mi estraggo con il loop foreach() il valore della stessa, per eliminarci i vecchi .mo.
Ma non so dove sbaglio!!!!
Ecco lo script che uso:
Grazie e ciao.
Codice PHP:
if ( isset ($_GET['lang']) )
{
switch ( $_GET['lang'] )
{
case 'it':
$locale = 'it_IT.utf8';
break;
case 'en':
$locale = 'en_US.utf8';
break;
case 'de':
$locale = 'de_DE.utf8';
break;
}
}
else
{
// default italiano
$locale = 'it_IT.utf8';
}
// la directory locales, con dentro le directory de_DE, en_US, it_IT
$locales_path = 'locales';
// questo rappresenta il nome dei file .po/.mo
$domain = 'messages';
putenv('LC_ALL=' . $locale);
setlocale(LC_ALL, $locale);
// estraggo con substr() i primi 5 caratteri dai $locale per entrare
// nella directory giusta, cioè it_IT, en_US, de_DE, che contiene i files .mo
$locale_extr = substr($locale, 0, 5);
$filename = "$locales_path/$locale_extr/LC_MESSAGES/$domain.mo";
// prendo nota di ogni modifica fatta al file .mo con la funzione filemtime()
$mtime = filemtime($filename);
// il nuovo unico file .mo
$filename_update = "$locales_path/$locale_extr/LC_MESSAGES/{$domain}_{$mtime}.mo";
// se il file .mo non è stato creato, allora copio quello originale e
// lo rinomino con un nuovo nome usando la funzione filemtime() come suffisso.
// va per ora
/*
if ( !file_exists($filename_update) )
{
copy($filename, $filename_update);
}
*/
// DA METTERE A POSTO, NON VA!!!!
if ( !file_exists($filename_update) )
{
// cancello il vecchio .mo prima di copiare il nuovo
$current_dir = dirname($filename_update);
$dir = scandir(current_dir);
foreach ( $dir as $file )
{
if ( in_array($file, array('.', '..', "{$domain}.po", "{$domain}.mo", "{$domain}_{$mtime}.mo")) )
continue;
unlink($current_dir . '/' . $file);
}
copy($filename, $filename_update);
}
// ottengo ora il nuovo nome di $textdomain (messages) così che il
// caching non può avvenire
$domain_update = "{$domain}_{$mtime}";
// bindtextdomain($domain, './locales');
// oppure usare dirname() con la costante FILE come indicato qui sotto,
// per trovare il path corretto, cioè assoluto, alla cartella che ho chiamato: locale
bindtextdomain($domain_update, dirname(__FILE__) . '/locales');
textdomain($domain_update);
echo gettext('traduzione') . '<br />';
echo _('casa'). '<br />';
Ciao.