";
ecrire_fichier($nom, $texte);
}
/**
* Retourne le code source d'un fichier de connexion à une base de données
*
* Le code est un appel à la fonction spip_connect_db()
*
* @see spip_connect_db()
*
* @internal
* Attention etape_ldap4 suppose qu'il n'y aura qu'un seul appel de fonction
* dans le fichier produit.
*
* @param string $adr Adresse de la base de données {@example 'localhost'}
* @param string $port Numéro de port
* @param string $login Login de connexion
* @param string $pass Mot de passe de connexion
* @param string $base Nom de la base de données
* @param string $type Moteur SQL {@example 'sqlite3', 'mysql'}
* @param string $pref Préfixe des tables {@example 'spip'}
* @param string $ldap ?
* @return string
* Texte du fichier de connexion
*
**/
function install_connexion($adr, $port, $login, $pass, $base, $type, $pref, $ldap='')
{
$adr = addcslashes($adr,"'\\");
$port = addcslashes($port,"'\\");
$login = addcslashes($login,"'\\");
$pass = addcslashes($pass,"'\\");
$base = addcslashes($base,"'\\");
$type = addcslashes($type,"'\\");
$pref = addcslashes($pref,"'\\");
$ldap = addcslashes($ldap,"'\\");
return "\$GLOBALS['spip_connect_version'] = 0.7;\n"
. "spip_connect_db("
. "'$adr','$port','$login','$pass','$base'"
. ",'$type', '$pref','$ldap');\n";
}
/**
* Analyse un fichier de connexion à une base de données
*
* Le fichier contient normalement le resultat de la fonction install_connexion().
* L'analyse tient également compte des syntaxes des versions precedentes.
*
* @param $string $file
* Chemin du fichier de connexion à analyser
* @return array
* Tableau des informations sur la connexion
**/
function analyse_fichier_connection($file)
{
$s = @join('', file($file));
if (preg_match("#mysql_connect\([\"'](.*)[\"'],[\"'](.*)[\"'],[\"'](.*)[\"']\)#", $s, $regs)) {
array_shift($regs);
return $regs;
} else {
$ar = '\s*\'([^\']*)\'';
$r = '\s*,' . $ar;
$r = "#spip_connect_db[(]$ar$r$r$r$r(?:$r(?:$r(?:$r)?)?)?#";
if (preg_match($r, $s, $regs)) {
$regs[2] = $regs[1] . (!$regs[2] ? '' : ":$port_db;");
array_shift($regs);
array_shift($regs);
return $regs;
}
}
spip_log("$file n'est pas un fichier de connexion");
return array();
}
/**
* Liste les connecteurs aux bases SQL disponibles
*
* Dans le code SPIP ces connecteurs sont souvent appelés $connect ou $serveur
*
* @example
* $bases = bases_referencees(_FILE_CONNECT_TMP);
*
* @param $string $exclu
* Exclure un connecteur particulier (nom du fichier)
* @return array
* Liste des noms de connecteurs
**/
function bases_referencees($exclu='')
{
$tables = array();
foreach(preg_files(_DIR_CONNECT, '.php$') as $f) {
if ($f != $exclu AND analyse_fichier_connection($f))
$tables[]= basename($f, '.php');
}
return $tables;
}
function install_mode_appel($server_db, $tout=true)
{
return ($server_db != 'mysql') ? ''
: (($tout ? test_rappel_nom_base_mysql($server_db) : '')
. test_sql_mode_mysql($server_db) );
}
//
// Verifier que l'hebergement est compatible SPIP ... ou l'inverse :-)
// (sert a l'etape 1 de l'installation)
// http://doc.spip.org/@tester_compatibilite_hebergement
function tester_compatibilite_hebergement() {
$err = array();
$p = phpversion();
if (preg_match(',^([0-9]+)\.([0-9]+)\.([0-9]+),', $p, $regs)) {
$php = array($regs[1], $regs[2], $regs[3]);
$m = '5.1.0';
$min = explode('.', $m);
if ($php[0]<$min[0]
OR ($php[0]==$min[0] AND $php[1]<$min[1])
OR ($php[0]==$min[0] AND $php[1]==$min[1] AND $php[2]<$min[2]))
$err[] = _T('install_php_version', array('version' => $p, 'minimum' => $m));
}
// Si on n'a pas la bonne version de PHP, c'est la fin
if ($err)
die("
"
. "
"._T('avis_attention').'
'._T('install_echec_annonce')."
"
. "
{$err[0]}
\n
");
// Il faut une base de donnees tout de meme ...
$serveurs = install_select_serveur();
if (!$serveurs)
$err[] = _T('install_extension_php_obligatoire')
. " MYSQL"
. "| PostgreSQL"
. "| SQLite";
// et il faut preg
if (!function_exists('preg_match_all'))
$err[] = _T('install_extension_php_obligatoire')
. " PCRE";
// et surtout pas ce mbstring.overload
if ($a = @ini_get('mbstring.func_overload'))
$err[] = _T('install_extension_mbstring')
. "mbstring.func_overload=$a - mb_string. ";
if ($err) {
echo "
"
."
"._T('avis_attention').'
'._T('install_echec_annonce')."
";
foreach($err as $e)
echo "
$e
\n";
# a priori ici on pourrait die(), mais il faut laisser la possibilite
# de forcer malgre tout (pour tester, ou si bug de detection)
echo "
\n";
}
}
// Une fonction pour faciliter la recherche du login (superflu ?)
// http://doc.spip.org/@login_hebergeur
function login_hebergeur() {
global $HTTP_X_HOST, $REQUEST_URI, $SERVER_NAME, $HTTP_HOST;
$base_hebergeur = 'localhost'; # par defaut
// Lycos (ex-Multimachin)
if ($HTTP_X_HOST == 'membres.lycos.fr') {
preg_match(',^/([^/]*),', $REQUEST_URI, $regs);
$login_hebergeur = $regs[1];
}
// Altern
else if (preg_match(',altern\.com$,', $SERVER_NAME)) {
preg_match(',([^.]*\.[^.]*)$,', $HTTP_HOST, $regs);
$login_hebergeur = preg_replace('[^\w\d]', '_', $regs[1]);
}
// Free
else if (preg_match(',(.*)\.free\.fr$,', $SERVER_NAME, $regs)) {
$base_hebergeur = 'sql.free.fr';
$login_hebergeur = $regs[1];
} else $login_hebergeur = '';
return array($base_hebergeur, $login_hebergeur);
}
// http://doc.spip.org/@info_etape
function info_etape($titre, $complement = ''){
return "