Ho un problema con il comando VACUUM di SQLite su Altervista.
VACUUM serve a ripulire il DB rilasciando lo spazio inutilizzato; lo fa copiando il DB in un temporaneo e poi scambiando i file.
Eseguendolo ottengo un errore 23: 'authorization denied'.
Ho già verificato i permessi sia del db che della cartella che lo contiene, ma senza effetto. Ho anche verificato di poter scrivere/leggere/modificare i file nella TEMP di PHP (/membri/.dummy/temp) con successo.
Ho preparato uno scriptino di test:
Codice PHP:
<?php
try {
echo "<pre>";
echo "Temp dir: ".sys_get_temp_dir()."\n";
echo "Vacuum...";
$pdo = new PDO('sqlite:demo.s3db');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// dati casuali
$pdo->exec("DROP TABLE IF EXISTS 'test'");
$pdo->exec("CREATE TABLE 'test' (key TEXT PRIMARY KEY)");
$pdo->exec("INSERT INTO 'test' VALUES('00QN252SSR3S97S5SO91NQ5N2SQ5R716')");
$pdo->exec("INSERT INTO 'test' VALUES('04736SP90PQQ0Q6O63Q77O0N2PP91363')");
$pdo->exec("INSERT INTO 'test' VALUES('04O72P4S21161Q363N7R8N320Q85263Q')");
$pdo->exec("INSERT INTO 'test' VALUES('04P5O0S17351132684Q99PN8N87N2QPP')");
$pdo->exec("INSERT INTO 'test' VALUES('055S8826601465Q2QS4R9RQ8726O08SN')");
$pdo->exec("DELETE FROM 'test';");
// pulizia
$pdo->exec('VACUUM');
// fine
echo "OK\n";
} catch (Exception $e) {
echo "\n".var_export($e, true);
}
echo "</pre>";
?>
In locale funziona ma su altervista il risultato è:
Codice:
Temp dir: /membri/.dummy/temp
Vacuum...
PDOException::__set_state(array(
'message' => 'SQLSTATE[HY000]: General error: 23 authorization denied',
'string' => '',
'code' => 'HY000',
'file' => '/membri/coolsoft/vacuum.php',
'line' => 30,
'trace' =>
array (
0 =>
array (
'file' => '/membri/coolsoft/vacuum.php',
'line' => 30,
'function' => 'exec',
'class' => 'PDO',
'type' => '->',
'args' =>
array (
0 => 'VACUUM',
),
),
),
'errorInfo' =>
array (
0 => 'HY000',
1 => 23,
2 => 'authorization denied',
),
))
Credo che SQLite usi la temp di sistema e non quella di PHP e quindi, quando deve eliminare il DB temporaneo, va in errore.
Qualche admin può confermare la mia tesi?
Grazie per l'aiuto