function req_sqlite_dist($addr, $port, $login, $pass, $db = '', $prefixe = '', $sqlite_version = '') { static $last_connect = array(); // si provient de selectdb // un code pour etre sur que l'on vient de select_db() if (strpos($db, $code = '@selectdb@') !== false) { foreach (array('addr', 'port', 'login', 'pass', 'prefixe') as $a) { ${$a} = $last_connect[$a]; } $db = str_replace($code, '', $db); } /* * En sqlite, seule l'adresse du fichier est importante. * Ce sera $db le nom, * le path est $addr * (_DIR_DB si $addr est vide) */ _sqlite_init(); // determiner le dossier de la base : $addr ou _DIR_DB $f = _DIR_DB; if ($addr and strpos($addr, '/') !== false) { $f = rtrim($addr, '/') . '/'; } // un nom de base demande et impossible d'obtenir la base, on s'en va : // il faut que la base existe ou que le repertoire parent soit writable if ($db and !is_file($f .= $db . '.sqlite') and !is_writable(dirname($f))) { spip_log("base {$f} non trouvee ou droits en ecriture manquants", 'sqlite.' . _LOG_HS); return false; } // charger les modules sqlite au besoin if (!_sqlite_charger_version($sqlite_version)) { spip_log("Impossible de trouver/charger le module SQLite ({$sqlite_version})!", 'sqlite.' . _LOG_HS); return false; } // chargement des constantes // il ne faut pas definir les constantes avant d'avoir charge les modules sqlite $define = "spip_sqlite" . $sqlite_version . "_constantes"; $define(); $ok = false; if (!$db) { // si pas de db -> // base temporaire tant qu'on ne connait pas son vrai nom // pour tester la connexion $db = "_sqlite" . $sqlite_version . "_install"; $tmp = _DIR_DB . $db . ".sqlite"; if ($sqlite_version == 3) { $ok = $link = new PDO("sqlite:{$tmp}"); } else { $ok = $link = sqlite_open($tmp, _SQLITE_CHMOD, $err); } } else { // Ouvrir (eventuellement creer la base) // si pas de version fourni, on essaie la 3, sinon la 2 if ($sqlite_version == 3) { $ok = $link = new PDO("sqlite:{$f}"); } else { $ok = $link = sqlite_open($f, _SQLITE_CHMOD, $err); } } if (!$ok) { $e = sqlite_last_error($db); spip_log("Impossible d'ouvrir la base SQLite({$sqlite_version}) {$f} : {$e}", 'sqlite.' . _LOG_HS); return false; } if ($link) { $last_connect = array('addr' => $addr, 'port' => $port, 'login' => $login, 'pass' => $pass, 'db' => $db, 'prefixe' => $prefixe); // etre sur qu'on definit bien les fonctions a chaque nouvelle connexion include_spip('req/sqlite_fonctions'); _sqlite_init_functions($link); } return array('db' => $db, 'prefixe' => $prefixe ? $prefixe : $db, 'link' => $link, 'total_requetes' => 0); }
function _sqlite_link($serveur = '', $recharger = false){ static $charge = array(); if ($recharger) $charge[$serveur] = false; $link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link']; if ($link && !$charge[$serveur]){ include_spip('req/sqlite_fonctions'); _sqlite_init_functions($link); $charge[$serveur] = true; } return $link; }