コード例 #1
0
ファイル: sqlite_generique.php プロジェクト: JLuc/SPIP
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);
}
コード例 #2
0
ファイル: sqlite_generique.php プロジェクト: rhertzog/lcs
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;
}