Skip to content
Extraits de code Groupes Projets
Valider 75912f2a rédigé par cerdic's avatar cerdic
Parcourir les fichiers

script de conversion de la base sql en utf8

parent b6efad84
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -394,6 +394,7 @@ ecrire/action/tourner.php -text
ecrire/action/virtualiser.php -text
ecrire/balise/index.php -text
ecrire/base/admin_repair.php -text
ecrire/base/convert_sql_utf8.php -text
ecrire/base/convert_utf8.php -text
ecrire/base/delete_all.php -text
ecrire/base/import_all.php -text
......@@ -464,6 +465,7 @@ ecrire/exec/configuration.php -text
ecrire/exec/configurer.php -text
ecrire/exec/controle_forum.php -text
ecrire/exec/controle_petition.php -text
ecrire/exec/convert_sql_utf8.php -text
ecrire/exec/convert_utf8.php -text
ecrire/exec/copier_local.php -text
ecrire/exec/dater.php -text
......
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2007 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
// http://doc.spip.org/@base_convert_utf8_dist
function base_convert_sql_utf8_dist($titre, $reprise=false)
{
// poser un verrou (et abandonner si l'action est en cours)
if (!spip_get_lock('conversion_charset_sql')) {
echo minipres(_T('utf8_convert_attendez'));
exit;
}
include_spip('inc/meta');
ecrire_meta('convert_sql_utf8','oui','non');
echo install_debut_html($titre);
echo "<p>", _T('utf8_convert_timeout'), "</p><hr />\n";
convert_sql_utf8();
echo "<p><b>"._T('utf8_convert_termine')."</b></p>";
effacer_meta('convert_sql_utf8');
// bouton "retour au site" + redirige_par_entete
echo "<p style='text-align: right'>",
"<a href='", generer_url_ecrire("config_lang"), "'> &gt;&gt; ",
_T('icone_retour'),"</a></p>",
install_fin_html();
}
function convert_sql_utf8(){
include_spip('base/db_mysql');
$charset_spip = $GLOBALS['meta']['charset'];
$charset_supporte = false;
$utf8_supporte = false;
// verifier que mysql gere le charset courant pour effectuer les conversions
if ($c = spip_mysql_character_set($charset_spip)){
$sql_charset = $c['charset'];
$sql_collation = $c['collation'];
$charset_supporte = true;
}
if (!$charset_supporte){
$res = spip_query("SHOW CHARACTER SET");
while ($row = spip_fetch_array($res)){
if ($row['Charset']=='utf8') $utf8_supporte = true;
}
echo _L("le Charset SPIP actuel $charset_spip n'est pas supporte par votre serveur mySql<br/>");
if ($utf8_supporte)
echo _L("Votre serveur supporte utf-8, vous devriez convertir votre site en utf-8 avant de recommencer cette operation");
echo install_fin_html();
exit;
}
echo _L("Charset Actuel du site SPIP : $charset_spip<br/>");
echo _L("Conversion des champs des tables spip de type latin1 vers <b>$sql_charset</b> (collation $sql_collation) <br/>");
// lister les collations et leur charset correspondant
$res = spip_query("SHOW COLLATION");
$charset2collations = array();
while ($row = spip_fetch_array($res)){
$charset2collations[$row['Collation']] = $row['Charset'];
}
$count = 0;
// lister les tables spip
$res = spip_query("SHOW TABLES");
while (($row = spip_fetch_array($res,SPIP_NUM)) /*&& ($count<1)*/){
$nom = $row[0];
if (preg_match(',^'.$GLOBALS['table_prefix'].'_(.*)$,',$nom,$regs)){
$count++;
$nom = $regs[1];
echo "<hr/>$nom<br/>";
// lister les champs de la table
$res2 = spip_query("SHOW FULL COLUMNS FROM spip_$nom");
while ($row2 = spip_fetch_array($res2)){
$collation = $row2['Collation'];
$champ = $row2['Field'];
if ($collation!="NULL"
&& isset($charset2collations[$collation])
&& $charset2collations[$collation]=='latin1'){
echo "Conversion de '$champ' depuis $collation (".$charset2collations[$collation]."):";
// conversion de latin1 vers le charset reel du contenu
$type_texte= $row2['Type'];
$type_blob = "blob";
if (strpos($type_texte,"text")!==FALSE) $type_blob = str_replace("text","blob",$type_texte);
echo spip_query("ALTER TABLE spip_$nom CHANGE $champ $champ $type_blob")." ";
echo spip_query("ALTER TABLE spip_$nom CHANGE $champ $champ $type_texte CHARACTER SET $sql_charset COLLATE $sql_collation")." ";
echo "<br/>";
}
}
// on ne change le charset par defaut de la table que quand tous ses champs sont convertis
spip_query("ALTER TABLE spip_$nom DEFAULT CHARACTER SET $sql_charset COLLATE $sql_collation");
}
}
ecrire_meta('charset_sql_base',$sql_charset,'non');
ecrire_meta('charset_sql_connexion',$sql_charset,'non');
ecrire_metas();
spip_release_lock('conversion_charset_sql');
}
?>
\ No newline at end of file
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2007 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
// En cas d'erreur, une page admin normale avec bouton de retour
// http://doc.spip.org/@convert_utf8_non
function convert_utf8_non($action, $message) {
echo minipres($action, ('<p>'.$message. "</p>\n<p style='text-align: right'><a href='" . generer_url_ecrire("config_lang"). "'> &gt;&gt; "._T('icone_retour')."</a>"));
exit;
}
function exec_convert_sql_utf8_dist() {
include_spip('inc/minipres');
include_spip('inc/meta');
include_spip('inc/charsets');
lire_metas();
$charset_spip = $GLOBALS['meta']['charset'];
// Definir le titre de la page (et le nom du fichier admin)
//$action = _T('utf8_convertir_votre_site');
$action = _L("Conversion de la base en $charset_spip");
// si meta deja la, c'est une reprise apres timeout.
if ($GLOBALS['meta']['convert_sql_utf8']) {
$base = charger_fonction('convert_sql_utf8', 'base');
$base($action, true);
} else {
$charset_supporte = false;
$utf8_supporte = false;
// verifier que mysql gere le charset courant pour effectuer les conversions
include_spip('base/db_mysql');
if ($c = spip_mysql_character_set($charset_spip)){
$sql_charset = $c['charset'];
$sql_collation = $c['collation'];
$charset_supporte = true;
}
if (!$charset_supporte){
$res = spip_query("SHOW CHARACTER SET");
while ($row = spip_fetch_array($res)){
if ($row['Charset']=='utf8') $utf8_supporte = true;
}
echo _L("le Charset SPIP actuel $charset_spip n'est pas supporte par votre serveur mySql<br/>");
if ($utf8_supporte)
echo _L("Votre serveur supporte utf-8, vous devriez convertir votre site en utf-8 avant de recommencer cette operation");
echo install_fin_html();
exit;
}
$commentaire = "";
//$commentaire = _T('utf8_convert_avertissement',
// array('orig' => $charset_orig,'charset' => 'utf-8'));
$commentaire .= "<p><small>"
. http_img_pack('warning.gif', _T('info_avertissement'), "style='width: 48px; height: 48px; float: right;margin: 10px;'");
$commentaire .= _T('utf8_convert_backup', array('charset' => 'utf-8'))
."</small>";
$commentaire .= '<p>'._T('utf8_convert_timeout');
$commentaire .= "<hr />\n";
$admin = charger_fonction('admin', 'inc');
$admin('convert_sql_utf8', $action, $commentaire);
}
}
?>
\ No newline at end of file
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter