Archives de la liste h​e​b​e​r​g​e​m​e​n​t​@p​a​h​e​k​o​.c​l​o​u​d​

Problème de migration 1.3.0 vers 1.3.5

<webmestre

16/02/2024 10:36:52

Bonjour.

 

J’ai un problème de migration entre la version 1.3.0 vers la version 1.3.5 (sans passer
par les intermédiaires).

 

La base, avec de nombreux fichiers membres, fonctionne sans accroc en version 1.3.0.

 

Lors de la migration le script de mise à jour retourne les erreurs ci-dessous. Cela
ressemble à une corruption de table. Comment en être sûr et comment fixer le problème
?

 

Je prends la gestion informatique de l’asso, migration d’une 1.1.4  vers la 1.3.0 sans
soucis, puis standby pour laisser les administrateurs charger tous les fichiers qu’ils
souhaitaient dans la base. Là aussi, aucun problème. Le problème survient au moment de
la migration et est répétitif.

 

Quelqu’un a déjà rencontré cette difficulté ?

 

SI besoin, je referai une migration version par version. Si je peux éviter ????

 

Cordialement.

 

Jean-Michel Parot

 

+------------------------------------------------------------------------------------------------------------------------------------------------

 

LogicException

Foreign key check: 9 errors found
files (parent): row 73 has an invalid reference to files (path)
{"id":73,"path":"user\/47\/assurance_1\/Attestation_Bateau
2023.pdf","parent":"user\/47\/assurance_1","name":"Attestation_Bateau
2023.pdf","type":1,"mime":"application\/pdf","size":69666,"modified":"2023-11-05
18:28:32","image":0,"md5":"c4920d582fe090e555d7163d5c7f1d31","trash":null}
files (parent): row 75 has an invalid reference to files (path)
{"id":75,"path":"user\/47\/carte_1\/Certificat de navigation
BLACKPEARL.docx","parent":"user\/47\/carte_1","name":"Certificat
de navigation
BLACKPEARL.docx","type":1,"mime":"application\/vnd.openxmlformats-officedocument.wordprocessingml.document","size":3978916,"modified":"2023-11-05
18:29:50","image":0,"md5":"75e3204aa348d7dbc41b08efba00aaac","trash":null}
files (parent): row 82 has an invalid reference to files (path)
{"id":82,"path":"user\/1\/convention\/img025.pdf","parent":"user\/1\/convention","name":"img025.pdf","type":1,"mime":"application\/pdf","size":270221,"modified":"2024-01-11
09:20:04","image":0,"md5":"3e49d24e79150269554c3892e1acf1d4","trash":null}
files (parent): row 83 has an invalid reference to files (path)
{"id":83,"path":"user\/1\/convention\/img026.pdf","parent":"user\/1\/convention","name":"img026.pdf","type":1,"mime":"application\/pdf","size":309073,"modified":"2024-01-11
09:20:04","image":0,"md5":"62ce7ca561d09a1af0ef2a7246c685cb","trash":null}
files (parent): row 84 has an invalid reference to files (path)
{"id":84,"path":"user\/1\/convention\/img027.pdf","parent":"user\/1\/convention","name":"img027.pdf","type":1,"mime":"application\/pdf","size":271557,"modified":"2024-01-11
09:20:04","image":0,"md5":"135a9a696346431659f9828104c42b15","trash":null}
files (parent): row 85 has an invalid reference to files (path)
{"id":85,"path":"user\/1\/convention\/img028.pdf","parent":"user\/1\/convention","name":"img028.pdf","type":1,"mime":"application\/pdf","size":108602,"modified":"2024-01-11
09:20:04","image":0,"md5":"5dd486ac3c9bed02a03de4c1da219fed","trash":null}
files (parent): row 87 has an invalid reference to files (path)
{"id":87,"path":"user\/1\/carte_1\/Carte de Navigation
Pendragon.pdf","parent":"user\/1\/carte_1","name":"Carte
de Navigation
Pendragon.pdf","type":1,"mime":"application\/pdf","size":663795,"modified":"2024-01-11
09:20:51","image":0,"md5":"ff1d5623c76274a477b5ce7bc7848715","trash":null}
files (parent): row 89 has an invalid reference to files (path)
{"id":89,"path":"user\/1\/avenant\/Parot
2022-2023.pdf","parent":"user\/1\/avenant","name":"Parot
2022-2023.pdf","type":1,"mime":"application\/pdf","size":167504,"modified":"2024-01-11
09:21:32","image":0,"md5":"19b2c860b05fca0b05fdc5b56ac1dbc0","trash":null}
files (parent): row 91 has an invalid reference to files (path)
{"id":91,"path":"user\/1\/assurance_1\/Attestation_Bateau.pdf","parent":"user\/1\/assurance_1","name":"Attestation_Bateau.pdf","type":1,"mime":"application\/pdf","size":69637,"modified":"2024-01-11
09:23:52","image":0,"md5":"93713955ae46310585719ff16fb53d7a","trash":null}

in .../include/lib/KD2/DB/SQLite3.php:988

984                    $data = $this->first(sprintf('SELECT * FROM %s WHERE rowid
= ?;', $row->table), $row->rowid);

985                    $errors[] = sprintf("%s (%s): row %d has an invalid reference
to %s (%s)\n%s", $row->table, $ref->from, $row->rowid, $row->parent, $ref
? $ref->to : null, json_encode($data));

986            }

987

988            throw new \LogicException(sprintf("Foreign key check: %d errors
found\n", count($errors)) . implode("\n", $errors));

989     }

990

991     public function backup($destination, string $sourceDatabase = 'main' ,
string $destinationDatabase = 'main'): bool

992     {

in .../include/lib/Paheko/Upgrade.php:233

→ KD2\DB\SQLite3->foreignKeyCheck (0 arg.)

229

230                    Plugins::upgradeAllIfRequired();

231

232                    // Vérification de la cohérence des clés étrangères

233                    $db->foreignKeyCheck();

234

235                    // Delete local cached files

236                    Utils::resetCache(USER_TEMPLATES_CACHE_ROOT);

237                    Utils::resetCache(STATIC_CACHE_ROOT);

in .../www/admin/upgrade.php:15

→ Paheko\Upgrade::upgrade (0 arg.)

11      throw new UserException('Aucune mise à jour à effectuer, tout est à jour
:-)');

12}

13

14if (isset($_GET['next'])) {

15      Upgrade::upgrade();

16

17      Install::showProgressSpinner('!', 'Mise à jour terminée');

18}

19else {

Context


date

2024-02-16T10:34:37+01:00


duration

14203.241109848


environment

development


hostname

adherents-test.adpl-lande.fr


http_files

array(0) { }


http_method

GET


http_post

array(0) { }


http_referrer

https://adherents-test.adpl-lande.fr/admin/upgrade.php


http_user_agent

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/121.0.0.0 Safari/537.36


id

raexe81


language

PHP 7.4.33


memory_peak

2097152


memory_used

2097152


os

Linux


paheko_data_root

/home/adplland/adherents_test/data


paheko_version

1.3.5


php_sapi

fpm-fcgi


remote_ip

86.228.56.40


root_directory

/home/adplland/adherents_test


server_addr

10.13.20.83


user_addr

86.228.56.40


url

https://adherents-test.adpl-lande.fr/admin/upgrade.php?next

Problème de migration 1.3.0 vers 1.3.5

BohwaZ/Paheko

16/02/2024 13:51:57

Dans un premier temps je te dirais de tenter effectivement une mise à
jour version par version.

Est-ce que tu stocke les fichiers dans la base de données (défaut) ou
en dehors ?

RE: Problème de migration 1.3.0 vers 1.3.5

<webmestre

16/02/2024 14:19:55

Bonjour.

Merci pour ce retour rapide.

Tous les fichiers sont en base.

Je vais faire la migration release par release en début de semaine et je te retournerai
les résultats. La version en exploitation est toujours la 1.3.0 bien sûr, donc pas de
soucis pour l'asso.

A lundi.

-----Message d'origine-----
De : BohwaZ/Paheko <bohwaz@paheko.cloud> 
Envoyé : vendredi 16 février 2024 13:52
À : hebergement@paheko.cloud
Objet : Re: [hebergement] Problème de migration 1.3.0 vers 1.3.5

Dans un premier temps je te dirais de tenter effectivement une mise à jour version par
version.

Est-ce que tu stocke les fichiers dans la base de données (défaut) ou en dehors ?

RE: Problème de migration 1.3.0 vers 1.3.5

<webmestre

18/02/2024 10:22:29

Bonjour.

 

Je viens de tenter une migration 1.3.0 vers 1.3.1 avec exactement le même message
d'erreur. Le problème est donc dans la base et pas dans le script de migration. Je
m'en doutais un peu ????

 

J'hésite à aller mettre mes gros doigts dans le fichier sqlite pour tenter de faire
le ménage. C'est toujours un peu délicat, mais si c'est la solution, je le
ferai.

 

Le fichier sqlite doit être corrompu depuis un moment, car toutes les sauvegardes
produisent le même résultat. Ça m'apprendra à ne pas tester mes sauvegardes.

 

Tu as peut-être une piste autre que le débogage de la base ?

 

-----Message d'origine-----
De : BohwaZ/Paheko <bohwaz@paheko.cloud> 
Envoyé : vendredi 16 février 2024 13:52
À : hebergement@paheko.cloud
Objet : Re: [hebergement] Problème de migration 1.3.0 vers 1.3.5

 

Dans un premier temps je te dirais de tenter effectivement une mise à jour version par
version.

 

Est-ce que tu stocke les fichiers dans la base de données (défaut) ou en dehors ?

Problème de migration 1.3.0 vers 1.3.5

BohwaZ/Paheko

18/02/2024 15:06:12

Ça indique juste qu'il semble manquer le répertoire parent de certains
fichiers.

Tu dois pouvoir trouver ce qui manque avec cette requête SQL :

SELECT a.parent FROM files a
LEFT JOIN files b ON a.parent = b.path
WHERE b.id IS NULL
GROUP BY a.parent

Dis-moi ce que ça renvoie et je réfléchirais à une solution :)

RE: Problème de migration 1.3.0 vers 1.3.5

<webmestre

18/02/2024 16:35:13

Le résultat de la requête en attachement.

Par ailleurs, j'ai ceci dans le fichier de log.

Dernier point, je n'ai plus accès à SQL dans l'onglet "Fonctions
avancées" de la configuration ni à voir la structure complète dans l'onglet
"Recherche avancée". Le symptôme est le même : site inaccessible.

Merci pour votre assistance.

-----Message d'origine-----
De : BohwaZ/Paheko <bohwaz@paheko.cloud> 
Envoyé : dimanche 18 février 2024 15:06
À : hebergement@paheko.cloud
Objet : Re: [hebergement] Problème de migration 1.3.0 vers 1.3.5

Ça indique juste qu'il semble manquer le répertoire parent de certains fichiers.

Tu dois pouvoir trouver ce qui manque avec cette requête SQL :

SELECT a.parent FROM files a
LEFT JOIN files b ON a.parent = b.path
WHERE b.id IS NULL
GROUP BY a.parent

Dis-moi ce que ça renvoie et je réfléchirais à une solution :)

====

Les fichiers joints suivants ont été supprimés car interdits :
- error.log

Cette liste n'autorise que les types de fichiers joints suivants : svg, png, jpeg,
jpg, gif, webp, pdf, ods, odt, odp, md, txt, html, htm, json, js, css, csv, doc, docx,
xls, xlsx, ppt, pptx, mp3, ics, diff, patch, asc, bundle

TR: Problème de migration 1.3.0 vers 1.3.5

<webmestre

18/02/2024 16:38:05

Avec le fichier log 



-----Message d'origine-----
De : webmestre@adpl-lande.fr <webmestre@adpl-lande.fr> 
Envoyé : dimanche 18 février 2024 16:35
À : hebergement@paheko.cloud
Objet : RE: [hebergement] Problème de migration 1.3.0 vers 1.3.5

Le résultat de la requête en attachement.

Par ailleurs, j'ai ceci dans le fichier de log.

Dernier point, je n'ai plus accès à SQL dans l'onglet "Fonctions
avancées" de la configuration ni à voir la structure complète dans l'onglet
"Recherche avancée". Le symptôme est le même : site inaccessible.

Merci pour votre assistance.

-----Message d'origine-----
De : BohwaZ/Paheko <bohwaz@paheko.cloud> Envoyé : dimanche 18 février 2024 15:06
À : hebergement@paheko.cloud Objet : Re: [hebergement] Problème de migration 1.3.0 vers
1.3.5

Ça indique juste qu'il semble manquer le répertoire parent de certains fichiers.

Tu dois pouvoir trouver ce qui manque avec cette requête SQL :

SELECT a.parent FROM files a
LEFT JOIN files b ON a.parent = b.path
WHERE b.id IS NULL
GROUP BY a.parent

Dis-moi ce que ça renvoie et je réfléchirais à une solution :)

====

Les fichiers joints suivants ont été supprimés car interdits :
- error.log

Cette liste n'autorise que les types de fichiers joints suivants : svg, png, jpeg,
jpg, gif, webp, pdf, ods, odt, odp, md, txt, html, htm, json, js, css, csv, doc, docx,
xls, xlsx, ppt, pptx, mp3, ics, diff, patch, asc, bundle

====

Les fichiers joints suivants ont été supprimés car interdits :
- error-log.zip

Cette liste n'autorise que les types de fichiers joints suivants : svg, png, jpeg,
jpg, gif, webp, pdf, ods, odt, odp, md, txt, html, htm, json, js, css, csv, doc, docx,
xls, xlsx, ppt, pptx, mp3, ics, diff, patch, asc, bundle

Problème de migration 1.3.0 vers 1.3.5

BohwaZ/Paheko

18/02/2024 19:50:43

> Par ailleurs, j'ai ceci dans le fichier de log.

Pas de fichier de log en fichier joint, renomme le en .txt

> Dernier point, je n'ai plus accès à SQL dans l'onglet "Fonctions
> avancées" de la configuration ni à voir la structure complète dans
> l'onglet "Recherche avancée". Le symptôme est le même : site
> inaccessible.

Sans erreur, je ne peux pas dire ce qui se passe...

RE: Problème de migration 1.3.0 vers 1.3.5

<webmestre

18/02/2024 22:11:20

Je remets le fichier lg renommé cette fois.

-----Message d'origine-----
De : BohwaZ/Paheko <bohwaz@paheko.cloud> 
Envoyé : dimanche 18 février 2024 19:50
À : hebergement@paheko.cloud
Objet : Re: [hebergement] Problème de migration 1.3.0 vers 1.3.5

> Par ailleurs, j'ai ceci dans le fichier de log.

Pas de fichier de log en fichier joint, renomme le en .txt

> Dernier point, je n'ai plus accès à SQL dans l'onglet "Fonctions

> avancées" de la configuration ni à voir la structure complète dans 
> l'onglet "Recherche avancée". Le symptôme est le même : site

> inaccessible.

Sans erreur, je ne peux pas dire ce qui se passe...

RE: Problème de migration 1.3.0 vers 1.3.5

<webmestre

18/02/2024 22:17:20

Voici le fichier log renommé.

-----Message d'origine-----
De : BohwaZ/Paheko <bohwaz@paheko.cloud> 
Envoyé : dimanche 18 février 2024 19:50
À : hebergement@paheko.cloud
Objet : Re: [hebergement] Problème de migration 1.3.0 vers 1.3.5

> Par ailleurs, j'ai ceci dans le fichier de log.

Pas de fichier de log en fichier joint, renomme le en .txt

> Dernier point, je n'ai plus accès à SQL dans l'onglet "Fonctions

> avancées" de la configuration ni à voir la structure complète dans 
> l'onglet "Recherche avancée". Le symptôme est le même : site

> inaccessible.

Sans erreur, je ne peux pas dire ce qui se passe...

====

Les fichiers joints suivants ont été supprimés car interdits :
- log.zip.txt (application/octet-stream)

Cette liste n'autorise que les types de fichiers joints suivants : svg, png, jpeg,
jpg, gif, webp, pdf, ods, odt, odp, md, txt, html, htm, json, js, css, csv, doc, docx,
xls, xlsx, ppt, pptx, mp3, ics, diff, patch, asc, bundle

TR: Problème de migration 1.3.0 vers 1.3.5

<webmestre

18/02/2024 22:37:11

Il semblerait que le fichier log soit filtré. Donc le voici in extenso, il n'est pas
très gros :

[26-Jan-2024 09:03:35 Europe/Paris] =========== Error ref. d5ca669a ===========

Exception: database is locked in
/home/adplland/Migration_1.3.0/include/lib/KD2/DB/SQLite3.php:322
Stack trace:
#0 /home/adplland/Migration_1.3.0/include/lib/KD2/DB/SQLite3.php(322):
SQLite3->exec('END;')
#1 /home/adplland/Migration_1.3.0/include/lib/Paheko/Entities/Files/File.php(427):
KD2\DB\SQLite3->commit()
#2 /home/adplland/Migration_1.3.0/include/lib/Paheko/Files/Trash.php(57):
Paheko\Entities\Files\File->delete()
#3 /home/adplland/Migration_1.3.0/www/admin/docs/trash.php(92):
Paheko\Files\Trash::clean()
#4 {main}

<errorReport>
{
    "errors": [
        {
            "message": "database is locked",
            "errorCode": 0,
            "type": "Exception",
            "backtrace": [
                {
                    "file": "...\/include\/lib\/KD2\/DB\/SQLite3.php",
                    "line": 322,
                    "code": {
                        "318": "",
                        "319": "\t\tif ($this->transaction == 0)
{",
                        "320": "\t\t\t$this->connect();",
                        "321": "",
                        "322": "\t\t\t$return =
$this->db->exec('END;');",
                        "323": "",
                        "324": "\t\t\tif ($this->callback) {",
                        "325": "\t\t\t\tcall_user_func($this->callback,
__FUNCTION__, null, $this, ... func_get_args());",
                        "326": "\t\t\t}"
                    }
                },
                {
                    "function": "SQLite3->exec",
                    "file": "...\/include\/lib\/KD2\/DB\/SQLite3.php",
                    "line": 322,
                    "args": {
                        "$query": "string(4) \"END;\""
                    },
                    "code": {
                        "318": "",
                        "319": "\t\tif ($this->transaction == 0)
{",
                        "320": "\t\t\t$this->connect();",
                        "321": "",
                        "322": "\t\t\t$return =
$this->db->exec('END;');",
                        "323": "",
                        "324": "\t\t\tif ($this->callback) {",
                        "325": "\t\t\t\tcall_user_func($this->callback,
__FUNCTION__, null, $this, ... func_get_args());",
                        "326": "\t\t\t}"
                    }
                },
                {
                    "function": "KD2\\DB\\SQLite3->commit",
                    "file":
"...\/include\/lib\/Paheko\/Entities\/Files\/File.php",
                    "line": 427,
                    "code": {
                        "423": "\t\t$this->deleteVersions();",
                        "424": "",
                        "425": "\t\t$r = parent::delete();",
                        "426": "",
                        "427": "\t\t$db->commit();",
                        "428": "",
                        "429": "\t\treturn $r;",
                        "430": "\t}",
                        "431": ""
                    }
                },
                {
                    "function":
"Paheko\\Entities\\Files\\File->delete",
                    "file":
"...\/include\/lib\/Paheko\/Files\/Trash.php",
                    "line": 57,
                    "code": {
                        "53": "\t\t$past = new \\DateTime($expiry);",
                        "54": "\t\t$list =
EM::getInstance(File::class)->all('SELECT * FROM @TABLE WHERE trash IS NOT NULL
AND trash < ?;', $past);",
                        "55": "",
                        "56": "\t\tforeach ($list as $file) {",
                        "57": "\t\t\t$file->delete();",
                        "58": "\t\t}",
                        "59": "\t}",
                        "60": "",
                        "61": "\tstatic public function getSize():
int"
                    }
                },
                {
                    "function": "Paheko\\Files\\Trash::clean",
                    "file": "...\/www\/admin\/docs\/trash.php",
                    "line": 92,
                    "code": {
                        "88": "if (f('delete')) {",
                        "89":
"\t$tpl->display('docs\/trash_delete.tpl');",
                        "90": "}",
                        "91": "else {",
                        "92": "\tTrash::clean();",
                        "93": "",
                        "94": "\t$size = Trash::getSize();",
                        "95": "\t$list = Trash::list();",
                        "96": "\t$list->loadFromQueryString();"
                    }
                }
            ]
        }
    ],
    "context": {
        "date": "2024-01-26T09:03:35+01:00",
        "duration": 10166.479110717773,
        "environment": "development",
        "hostname": "adherents.adpl-lande.fr",
        "http_files": "array(0) {\n  }",
        "http_method": "GET",
        "http_post": "array(0) {\n  }",
        "http_referrer":
"https:\/\/adherents.adpl-lande.fr\/admin\/docs\/",
        "http_user_agent": "Mozilla\/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/120.0.0.0 Safari\/537.36",
        "id": "d5ca669a",
        "language": "PHP 7.4.33",
        "memory_peak": 6291456,
        "memory_used": 6291456,
        "os": "Linux",
        "paheko_data_root": "\/home\/adplland\/Migration_1.3.0\/data",
        "paheko_version": "1.3.0",
        "php_sapi": "fpm-fcgi",
        "remote_ip": "86.209.38.7",
        "root_directory": "\/home\/adplland\/Migration_1.3.0",
        "server_addr": "10.13.20.68",
        "user_addr": "86.209.38.7",
        "url":
"https:\/\/adherents.adpl-lande.fr\/admin\/docs\/trash.php"
    }
}
</errorReport>

[26-Jan-2024 09:03:45 Europe/Paris] =========== Error ref. d5ca669a ===========

Exception: database is locked in
/home/adplland/Migration_1.3.0/include/lib/KD2/DB/SQLite3.php:322
Stack trace:
#0 /home/adplland/Migration_1.3.0/include/lib/KD2/DB/SQLite3.php(322):
SQLite3->exec('END;')
#1 /home/adplland/Migration_1.3.0/include/lib/Paheko/Entities/Files/File.php(427):
KD2\DB\SQLite3->commit()
#2 /home/adplland/Migration_1.3.0/include/lib/Paheko/Files/Trash.php(57):
Paheko\Entities\Files\File->delete()
#3 /home/adplland/Migration_1.3.0/www/admin/docs/trash.php(92):
Paheko\Files\Trash::clean()
#4 {main}

<errorReport>
{
    "errors": [
        {
            "message": "database is locked",
            "errorCode": 0,
            "type": "Exception",
            "backtrace": [
                {
                    "file": "...\/include\/lib\/KD2\/DB\/SQLite3.php",
                    "line": 322,
                    "code": {
                        "318": "",
                        "319": "\t\tif ($this->transaction == 0)
{",
                        "320": "\t\t\t$this->connect();",
                        "321": "",
                        "322": "\t\t\t$return =
$this->db->exec('END;');",
                        "323": "",
                        "324": "\t\t\tif ($this->callback) {",
                        "325": "\t\t\t\tcall_user_func($this->callback,
__FUNCTION__, null, $this, ... func_get_args());",
                        "326": "\t\t\t}"
                    }
                },
                {
                    "function": "SQLite3->exec",
                    "file": "...\/include\/lib\/KD2\/DB\/SQLite3.php",
                    "line": 322,
                    "args": {
                        "$query": "string(4) \"END;\""
                    },
                    "code": {
                        "318": "",
                        "319": "\t\tif ($this->transaction == 0)
{",
                        "320": "\t\t\t$this->connect();",
                        "321": "",
                        "322": "\t\t\t$return =
$this->db->exec('END;');",
                        "323": "",
                        "324": "\t\t\tif ($this->callback) {",
                        "325": "\t\t\t\tcall_user_func($this->callback,
__FUNCTION__, null, $this, ... func_get_args());",
                        "326": "\t\t\t}"
                    }
                },
                {
                    "function": "KD2\\DB\\SQLite3->commit",
                    "file":
"...\/include\/lib\/Paheko\/Entities\/Files\/File.php",
                    "line": 427,
                    "code": {
                        "423": "\t\t$this->deleteVersions();",
                        "424": "",
                        "425": "\t\t$r = parent::delete();",
                        "426": "",
                        "427": "\t\t$db->commit();",
                        "428": "",
                        "429": "\t\treturn $r;",
                        "430": "\t}",
                        "431": ""
                    }
                },
                {
                    "function":
"Paheko\\Entities\\Files\\File->delete",
                    "file":
"...\/include\/lib\/Paheko\/Files\/Trash.php",
                    "line": 57,
                    "code": {
                        "53": "\t\t$past = new \\DateTime($expiry);",
                        "54": "\t\t$list =
EM::getInstance(File::class)->all('SELECT * FROM @TABLE WHERE trash IS NOT NULL
AND trash < ?;', $past);",
                        "55": "",
                        "56": "\t\tforeach ($list as $file) {",
                        "57": "\t\t\t$file->delete();",
                        "58": "\t\t}",
                        "59": "\t}",
                        "60": "",
                        "61": "\tstatic public function getSize():
int"
                    }
                },
                {
                    "function": "Paheko\\Files\\Trash::clean",
                    "file": "...\/www\/admin\/docs\/trash.php",
                    "line": 92,
                    "code": {
                        "88": "if (f('delete')) {",
                        "89":
"\t$tpl->display('docs\/trash_delete.tpl');",
                        "90": "}",
                        "91": "else {",
                        "92": "\tTrash::clean();",
                        "93": "",
                        "94": "\t$size = Trash::getSize();",
                        "95": "\t$list = Trash::list();",
                        "96": "\t$list->loadFromQueryString();"
                    }
                }
            ]
        }
    ],
    "context": {
        "date": "2024-01-26T09:03:45+01:00",
        "duration": 16008.786916732788,
        "environment": "development",
        "hostname": "adherents.adpl-lande.fr",
        "http_files": "array(0) {\n  }",
        "http_method": "GET",
        "http_post": "array(0) {\n  }",
        "http_referrer":
"https:\/\/adherents.adpl-lande.fr\/admin\/docs\/",
        "http_user_agent": "Mozilla\/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/120.0.0.0 Safari\/537.36",
        "id": "d5ca669a",
        "language": "PHP 7.4.33",
        "memory_peak": 4194304,
        "memory_used": 4194304,
        "os": "Linux",
        "paheko_data_root": "\/home\/adplland\/Migration_1.3.0\/data",
        "paheko_version": "1.3.0",
        "php_sapi": "fpm-fcgi",
        "remote_ip": "86.209.38.7",
        "root_directory": "\/home\/adplland\/Migration_1.3.0",
        "server_addr": "10.13.20.68",
        "user_addr": "86.209.38.7",
        "url":
"https:\/\/adherents.adpl-lande.fr\/admin\/docs\/trash.php"
    }
}
</errorReport>

[26-Jan-2024 09:03:45 Europe/Paris] =========== Error ref. 5b2ikube ===========

Exception: Unable to execute statement: database is locked in
/home/adplland/Migration_1.3.0/include/lib/KD2/DB/EntityManager.php:152
Stack trace:
#0 /home/adplland/Migration_1.3.0/include/lib/KD2/DB/EntityManager.php(152):
SQLite3Result->fetchArray(1)
#1 /home/adplland/Migration_1.3.0/include/lib/KD2/DB/EntityManager.php(126):
KD2\DB\EntityManager->iterate('SELECT d.* FROM...', 1, 2, 'user/%')
#2 /home/adplland/Migration_1.3.0/include/lib/Paheko/Files/Files.php(1002):
KD2\DB\EntityManager->all('SELECT d.* FROM...', 1, 2, 'user/%')
#3 /home/adplland/Migration_1.3.0/include/lib/Paheko/Files/Users.php(30):
Paheko\Files\Files::pruneEmptyDirectories('user')
#4 /home/adplland/Migration_1.3.0/www/admin/docs/index.php(51): Paheko\Files\Users::list()
#5 {main}

<errorReport>
{
    "errors": [
        {
            "message": "Unable to execute statement: database is
locked",
            "errorCode": 0,
            "type": "Exception",
            "backtrace": [
                {
                    "file":
"...\/include\/lib\/KD2\/DB\/EntityManager.php",
                    "line": 152,
                    "code": {
                        "148": "\t\t$query =
$this->formatQuery($query);",
                        "149": "\t\t$res = $db->preparedQuery($query,
$params);",
                        "150": "",
                        "151": "\t\tif ($db instanceof SQLite3) {",
                        "152": "\t\t\twhile ($row =
$res->fetchArray(\\SQLITE3_ASSOC)) {",
                        "153": "\t\t\t\t\/\/ If you are getting a row
containing only NULL values",
                        "154": "\t\t\t\t\/\/ it probably means you are
deleting rows before the iteration",
                        "155": "\t\t\t\t\/\/ has a chance to fetch
it!",
                        "156": "\t\t\t\t$obj = new $this->class;"
                    }
                },
                {
                    "function": "SQLite3Result->fetchArray",
                    "file":
"...\/include\/lib\/KD2\/DB\/EntityManager.php",
                    "line": 152,
                    "args": {
                        "$mode": "int(1)"
                    },
                    "code": {
                        "148": "\t\t$query =
$this->formatQuery($query);",
                        "149": "\t\t$res = $db->preparedQuery($query,
$params);",
                        "150": "",
                        "151": "\t\tif ($db instanceof SQLite3) {",
                        "152": "\t\t\twhile ($row =
$res->fetchArray(\\SQLITE3_ASSOC)) {",
                        "153": "\t\t\t\t\/\/ If you are getting a row
containing only NULL values",
                        "154": "\t\t\t\t\/\/ it probably means you are
deleting rows before the iteration",
                        "155": "\t\t\t\t\/\/ has a chance to fetch
it!",
                        "156": "\t\t\t\t$obj = new $this->class;"
                    }
                },
                {
                    "function": "KD2\\DB\\EntityManager->iterate",
                    "file":
"...\/include\/lib\/KD2\/DB\/EntityManager.php",
                    "line": 126,
                    "args": {
                        "$query": "string(210) \"SELECT d.* FROM files
d\n\t\t\tLEFT JOIN files f ON f.type = ? AND f.path LIKE d.path ||
'\/%'\n\t\t\tWHERE d.type = ? AND d.parent LIKE ? ESCAPE
'!'\n\t\t\tGROUP BY d.path\n\t\t\tHAVING COUNT(f.id) = 0\n\t\t\tORDER BY d.path
DESC;\"",
                        "$params": "int(1)",
                        "2": "int(2)",
                        "3": "string(6) \"user\/%\""
                    },
                    "code": {
                        "122": "\t{",
                        "123": "\t\t$res = $this->iterate($query,
...$params);",
                        "124": "\t\t$out = [];",
                        "125": "",
                        "126": "\t\tforeach ($res as $row) {",
                        "127": "\t\t\t$out[] = $row;",
                        "128": "\t\t}",
                        "129": "",
                        "130": "\t\treturn $out;"
                    }
                },
                {
                    "function": "KD2\\DB\\EntityManager->all",
                    "file":
"...\/include\/lib\/Paheko\/Files\/Files.php",
                    "line": 1002,
                    "args": {
                        "$query": "string(210) \"SELECT d.* FROM files
d\n\t\t\tLEFT JOIN files f ON f.type = ? AND f.path LIKE d.path ||
'\/%'\n\t\t\tWHERE d.type = ? AND d.parent LIKE ? ESCAPE
'!'\n\t\t\tGROUP BY d.path\n\t\t\tHAVING COUNT(f.id) = 0\n\t\t\tORDER BY d.path
DESC;\"",
                        "$params": "int(1)",
                        "2": "int(2)",
                        "3": "string(6) \"user\/%\""
                    },
                    "code": {
                        "998": "",
                        "999": "\t\t$like =
DB::getInstance()->escapeLike($parent, '!') . '\/%';",
                        "1000": "",
                        "1001": "\t\t\/\/ Do not use iterate() here, as the
next row might be deleted before we fetch it",
                        "1002": "\t\t$i =
EM::getInstance(File::class)->all($sql, File::TYPE_FILE, File::TYPE_DIRECTORY,
$like);",
                        "1003": "",
                        "1004": "\t\tforeach ($i as $dir) {",
                        "1005": "\t\t\t$dir->delete();",
                        "1006": "\t\t}"
                    }
                },
                {
                    "function":
"Paheko\\Files\\Files::pruneEmptyDirectories",
                    "file":
"...\/include\/lib\/Paheko\/Files\/Users.php",
                    "line": 30,
                    "args": {
                        "$parent": "string(4) \"user\""
                    },
                    "code": {
                        "26": "\t];",
                        "27": "",
                        "28": "\tstatic public function list():
DynamicList",
                        "29": "\t{",
                        "30":
"\t\tFiles::pruneEmptyDirectories(File::CONTEXT_USER);",
                        "31": "",
                        "32": "\t\t$columns = self::LIST_COLUMNS;",
                        "33":
"\t\t$columns['identity']['select'] =
DF::getNameFieldsSQL('u');",
                        "34":
"\t\t$columns['identity']['label'] = DF::getNameLabel();"
                    }
                },
                {
                    "function": "Paheko\\Files\\Users::list",
                    "file": "...\/www\/admin\/docs\/index.php",
                    "line": 51,
                    "code": {
                        "47": "\t\tif ($context ==
File::CONTEXT_TRANSACTION) {",
                        "48": "\t\t\t$list = Transactions::list();",
                        "49": "\t\t}",
                        "50": "\t\telseif ($context == File::CONTEXT_USER)
{",
                        "51": "\t\t\t$list = Users_Files::list();",
                        "52": "\t\t}",
                        "53": "\t}",
                        "54": "\telseif ($context_ref && $context
== File::CONTEXT_USER) {",
                        "55": "\t\t$user_name =
Users::getName($context_ref);"
                    }
                }
            ]
        }
    ],
    "context": {
        "date": "2024-01-26T09:03:46+01:00",
        "duration": 10101.525068283081,
        "environment": "development",
        "hostname": "adherents.adpl-lande.fr",
        "http_files": "array(0) {\n  }",
        "http_method": "GET",
        "http_post": "array(0) {\n  }",
        "http_referrer":
"https:\/\/adherents.adpl-lande.fr\/admin\/docs\/",
        "http_user_agent": "Mozilla\/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/120.0.0.0 Safari\/537.36",
        "id": "5b2ikube",
        "language": "PHP 7.4.33",
        "memory_peak": 4194304,
        "memory_used": 4194304,
        "os": "Linux",
        "paheko_data_root": "\/home\/adplland\/Migration_1.3.0\/data",
        "paheko_version": "1.3.0",
        "php_sapi": "fpm-fcgi",
        "remote_ip": "86.209.38.7",
        "root_directory": "\/home\/adplland\/Migration_1.3.0",
        "server_addr": "10.13.20.68",
        "user_addr": "86.209.38.7",
        "url":
"https:\/\/adherents.adpl-lande.fr\/admin\/docs\/?path=user"
    }
}
</errorReport>

[29-Jan-2024 17:20:10 Europe/Paris] =========== Error ref. 88c9gdza ===========

Exception: table compromised_passwords_cache already exists in
/home/adplland/Migration_1.3.0/include/lib/KD2/DB/SQLite3.php:760
Stack trace:
#0 /home/adplland/Migration_1.3.0/include/lib/KD2/DB/SQLite3.php(760):
SQLite3->exec('VACUUM INTO '/h...')
#1 /home/adplland/Migration_1.3.0/include/lib/Paheko/Backup.php(134):
KD2\DB\SQLite3->exec('VACUUM INTO '/h...')
#2 /home/adplland/Migration_1.3.0/include/lib/Paheko/Backup.php(116):
Paheko\Backup::make('/home/adplland/...')
#3 /home/adplland/Migration_1.3.0/www/admin/config/backup/index.php(19):
Paheko\Backup::create()
#4 [internal function]: Paheko\{closure}()
#5 /home/adplland/Migration_1.3.0/include/lib/Paheko/Form.php(29):
call_user_func(Object(Closure))
#6 /home/adplland/Migration_1.3.0/include/lib/Paheko/Form.php(80):
Paheko\Form->run(Object(Closure), 'backup_save',
'!config/backup/...', false)
#7 /home/adplland/Migration_1.3.0/www/admin/config/backup/index.php(20):
Paheko\Form->runIf('create', Object(Closure), 'backup_save',
'!config/backup/...')
#8 {main}

Next KD2\DB\DB_Exception: table compromised_passwords_cache already exists in
/home/adplland/Migration_1.3.0/include/lib/KD2/DB/SQLite3.php:764
Stack trace:
#0 /home/adplland/Migration_1.3.0/include/lib/Paheko/Backup.php(134):
KD2\DB\SQLite3->exec('VACUUM INTO '/h...')
#1 /home/adplland/Migration_1.3.0/include/lib/Paheko/Backup.php(116):
Paheko\Backup::make('/home/adplland/...')
#2 /home/adplland/Migration_1.3.0/www/admin/config/backup/index.php(19):
Paheko\Backup::create()
#3 [internal function]: Paheko\{closure}()
#4 /home/adplland/Migration_1.3.0/include/lib/Paheko/Form.php(29):
call_user_func(Object(Closure))
#5 /home/adplland/Migration_1.3.0/include/lib/Paheko/Form.php(80):
Paheko\Form->run(Object(Closure), 'backup_save',
'!config/backup/...', false)
#6 /home/adplland/Migration_1.3.0/www/admin/config/backup/index.php(20):
Paheko\Form->runIf('create', Object(Closure), 'backup_save',
'!config/backup/...')
#7 {main}

<errorReport>
{
    "errors": [
        {
            "message": "table compromised_passwords_cache already
exists",
            "errorCode": 1,
            "type": "KD2\\DB\\DB_Exception",
            "backtrace": [
                {
                    "file": "...\/include\/lib\/KD2\/DB\/SQLite3.php",
                    "line": 764,
                    "code": {
                        "760": "\t\t\t$return =
$this->db->exec($statement);",
                        "761": "\t\t}",
                        "762": "\t\tcatch (\\Exception $e) {",
                        "763": "\t\t\tif ($this->db->lastErrorCode())
{",
                        "764": "\t\t\t\tthrow new
DB_Exception($this->db->lastErrorMsg(), $this->db->lastErrorCode(),
$e);",
                        "765": "\t\t\t}",
                        "766": "",
                        "767": "\t\t\tthrow $e;",
                        "768": "\t\t}"
                    }
                },
                {
                    "function": "KD2\\DB\\SQLite3->exec",
                    "file": "...\/include\/lib\/Paheko\/Backup.php",
                    "line": 134,
                    "args": {
                        "$statement": "string(87) \"VACUUM INTO
'\/home\/adplland\/Migration_1.3.0\/data\/association.2024-01-29-171955.sqlite';\""
                    },
                    "code": {
                        "130": "\t\tUtils::safe_unlink($dest);",
                        "131": "",
                        "132": "\t\tif ($version['versionNumber']
>= 3027000) {",
                        "133": "\t\t\t\/\/ use VACUUM INTO instead when
SQLite 3.27+ is required",
                        "134": "\t\t\t$db->exec(sprintf('VACUUM
INTO %s;', $db->quote($dest)));",
                        "135": "\t\t}",
                        "136": "\t\telse {",
                        "137": "\t\t\t\/\/ use ::backup since PHP
7.4.0+",
                        "138": "\t\t\t\/\/
https:\/\/www.php.net\/manual\/en\/sqlite3.backup.php"
                    }
                },
                {
                    "function": "Paheko\\Backup::make",
                    "file": "...\/include\/lib\/Paheko\/Backup.php",
                    "line": 116,
                    "args": {
                        "$dest": "string(45)
\"...\/data\/association.2024-01-29-171955.sqlite\""
                    },
                    "code": {
                        "112": "\t\t$suffix = $name ?? ($auto ?
'auto.1' : date('Y-m-d-His'));",
                        "113": "",
                        "114": "\t\t$backup =
str_replace('.sqlite', sprintf('.%s.sqlite', $suffix),
DB_FILE);",
                        "115": "",
                        "116": "\t\tself::make($backup);",
                        "117": "",
                        "118": "\t\treturn basename($backup);",
                        "119": "\t}",
                        "120": ""
                    }
                },
                {
                    "function": "Paheko\\Backup::create",
                    "file":
"...\/www\/admin\/config\/backup\/index.php",
                    "line": 19,
                    "code": {
                        "15": "}, $csrf_key);",
                        "16": "",
                        "17": "\/\/ Create local backup",
                        "18": "$form->runIf('create', function
() {",
                        "19": "\tBackup::create();",
                        "20": "}, $csrf_key,
'!config\/backup\/?msg=BACKUP_CREATED');",
                        "21": "",
                        "22": "\/\/ Download all files as ZIP",
                        "23": "$form->runIf('zip', function ()
{"
                    }
                },
                {
                    "function": "Paheko\\{closure}"
                },
                {
                    "function": "call_user_func",
                    "file": "...\/include\/lib\/Paheko\/Form.php",
                    "line": 29,
                    "args": {
                        "$function_name": "object(Closure) (1) {\n 
[0]=> *RECURSION*\n  }"
                    },
                    "code": {
                        "25": "\t\t\tif (null !== $csrf_key &&
!\\KD2\\Form::tokenCheck($csrf_key)) {",
                        "26": "\t\t\t\tthrow new
ValidationException('Une erreur est survenue, merci de bien vouloir renvoyer le
formulaire.', 401);",
                        "27": "\t\t\t}",
                        "28": "",
                        "29": "\t\t\tcall_user_func($fn);",
                        "30": "",
                        "31": "\t\t\tif (null !== $redirect) {",
                        "32": "\t\t\t\tif ($js) {",
                        "33": "\t\t\t\t\thttp_response_code(204);"
                    }
                },
                {
                    "function": "Paheko\\Form->run",
                    "file": "...\/include\/lib\/Paheko\/Form.php",
                    "line": 80,
                    "args": {
                        "$fn": "object(Closure) (1) {\n  [0]=>
*RECURSION*\n  }",
                        "$csrf_key": "string(11)
\"backup_save\"",
                        "$redirect": "string(34)
\"!config\/backup\/?msg=BACKUP_CREATED\"",
                        "$follow_redirect": "bool(false)"
                    },
                    "code": {
                        "76": "\t\telseif (is_bool($condition) &&
!$condition) {",
                        "77": "\t\t\treturn null;",
                        "78": "\t\t}",
                        "79": "",
                        "80": "\t\treturn $this->run($fn, $csrf_key,
$redirect, $follow_redirect);",
                        "81": "\t}",
                        "82": "",
                        "83": "\tpublic function hasErrors()",
                        "84": "\t{"
                    }
                },
                {
                    "function": "Paheko\\Form->runIf",
                    "file":
"...\/www\/admin\/config\/backup\/index.php",
                    "line": 20,
                    "args": {
                        "$condition": "string(6)
\"create\"",
                        "$fn": "object(Closure) (1) {\n  [0]=>
*RECURSION*\n  }",
                        "$csrf_key": "string(11)
\"backup_save\"",
                        "$redirect": "string(34)
\"!config\/backup\/?msg=BACKUP_CREATED\""
                    },
                    "code": {
                        "16": "",
                        "17": "\/\/ Create local backup",
                        "18": "$form->runIf('create', function
() {",
                        "19": "\tBackup::create();",
                        "20": "}, $csrf_key,
'!config\/backup\/?msg=BACKUP_CREATED');",
                        "21": "",
                        "22": "\/\/ Download all files as ZIP",
                        "23": "$form->runIf('zip', function ()
{",
                        "24": "\tFiles::zipAll();"
                    }
                }
            ]
        },
        {
            "message": "table compromised_passwords_cache already
exists",
            "errorCode": 0,
            "type": "Exception",
            "backtrace": [
                {
                    "file": "...\/include\/lib\/KD2\/DB\/SQLite3.php",
                    "line": 760,
                    "code": {
                        "756": "\t\t\tcall_user_func($this->callback,
__FUNCTION__, 'before', $this, ... func_get_args());",
                        "757": "\t\t}",
                        "758": "",
                        "759": "\t\ttry {",
                        "760": "\t\t\t$return =
$this->db->exec($statement);",
                        "761": "\t\t}",
                        "762": "\t\tcatch (\\Exception $e) {",
                        "763": "\t\t\tif ($this->db->lastErrorCode())
{",
                        "764": "\t\t\t\tthrow new
DB_Exception($this->db->lastErrorMsg(), $this->db->lastErrorCode(), $e);"
                    }
                },
                {
                    "function": "SQLite3->exec",
                    "file": "...\/include\/lib\/KD2\/DB\/SQLite3.php",
                    "line": 760,
                    "args": {
                        "$query": "string(87) \"VACUUM INTO
'\/home\/adplland\/Migration_1.3.0\/data\/association.2024-01-29-171955.sqlite';\""
                    },
                    "code": {
                        "756": "\t\t\tcall_user_func($this->callback,
__FUNCTION__, 'before', $this, ... func_get_args());",
                        "757": "\t\t}",
                        "758": "",
                        "759": "\t\ttry {",
                        "760": "\t\t\t$return =
$this->db->exec($statement);",
                        "761": "\t\t}",
                        "762": "\t\tcatch (\\Exception $e) {",
                        "763": "\t\t\tif ($this->db->lastErrorCode())
{",
                        "764": "\t\t\t\tthrow new
DB_Exception($this->db->lastErrorMsg(), $this->db->lastErrorCode(), $e);"
                    }
                },
                {
                    "function": "KD2\\DB\\SQLite3->exec",
                    "file": "...\/include\/lib\/Paheko\/Backup.php",
                    "line": 134,
                    "args": {
                        "$statement": "string(87) \"VACUUM INTO
'\/home\/adplland\/Migration_1.3.0\/data\/association.2024-01-29-171955.sqlite';\""
                    },
                    "code": {
                        "130": "\t\tUtils::safe_unlink($dest);",
                        "131": "",
                        "132": "\t\tif ($version['versionNumber']
>= 3027000) {",
                        "133": "\t\t\t\/\/ use VACUUM INTO instead when
SQLite 3.27+ is required",
                        "134": "\t\t\t$db->exec(sprintf('VACUUM
INTO %s;', $db->quote($dest)));",
                        "135": "\t\t}",
                        "136": "\t\telse {",
                        "137": "\t\t\t\/\/ use ::backup since PHP
7.4.0+",
                        "138": "\t\t\t\/\/
https:\/\/www.php.net\/manual\/en\/sqlite3.backup.php"
                    }
                },
                {
                    "function": "Paheko\\Backup::make",
                    "file": "...\/include\/lib\/Paheko\/Backup.php",
                    "line": 116,
                    "args": {
                        "$dest": "string(45)
\"...\/data\/association.2024-01-29-171955.sqlite\""
                    },
                    "code": {
                        "112": "\t\t$suffix = $name ?? ($auto ?
'auto.1' : date('Y-m-d-His'));",
                        "113": "",
                        "114": "\t\t$backup =
str_replace('.sqlite', sprintf('.%s.sqlite', $suffix),
DB_FILE);",
                        "115": "",
                        "116": "\t\tself::make($backup);",
                        "117": "",
                        "118": "\t\treturn basename($backup);",
                        "119": "\t}",
                        "120": ""
                    }
                },
                {
                    "function": "Paheko\\Backup::create",
                    "file":
"...\/www\/admin\/config\/backup\/index.php",
                    "line": 19,
                    "code": {
                        "15": "}, $csrf_key);",
                        "16": "",
                        "17": "\/\/ Create local backup",
                        "18": "$form->runIf('create', function
() {",
                        "19": "\tBackup::create();",
                        "20": "}, $csrf_key,
'!config\/backup\/?msg=BACKUP_CREATED');",
                        "21": "",
                        "22": "\/\/ Download all files as ZIP",
                        "23": "$form->runIf('zip', function ()
{"
                    }
                },
                {
                    "function": "Paheko\\{closure}"
                },
                {
                    "function": "call_user_func",
                    "file": "...\/include\/lib\/Paheko\/Form.php",
                    "line": 29,
                    "args": {
                        "$function_name": "object(Closure) (1) {\n 
[0]=> *RECURSION*\n  }"
                    },
                    "code": {
                        "25": "\t\t\tif (null !== $csrf_key &&
!\\KD2\\Form::tokenCheck($csrf_key)) {",
                        "26": "\t\t\t\tthrow new
ValidationException('Une erreur est survenue, merci de bien vouloir renvoyer le
formulaire.', 401);",
                        "27": "\t\t\t}",
                        "28": "",
                        "29": "\t\t\tcall_user_func($fn);",
                        "30": "",
                        "31": "\t\t\tif (null !== $redirect) {",
                        "32": "\t\t\t\tif ($js) {",
                        "33": "\t\t\t\t\thttp_response_code(204);"
                    }
                },
                {
                    "function": "Paheko\\Form->run",
                    "file": "...\/include\/lib\/Paheko\/Form.php",
                    "line": 80,
                    "args": {
                        "$fn": "object(Closure) (1) {\n  [0]=>
*RECURSION*\n  }",
                        "$csrf_key": "string(11)
\"backup_save\"",
                        "$redirect": "string(34)
\"!config\/backup\/?msg=BACKUP_CREATED\"",
                        "$follow_redirect": "bool(false)"
                    },
                    "code": {
                        "76": "\t\telseif (is_bool($condition) &&
!$condition) {",
                        "77": "\t\t\treturn null;",
                        "78": "\t\t}",
                        "79": "",
                        "80": "\t\treturn $this->run($fn, $csrf_key,
$redirect, $follow_redirect);",
                        "81": "\t}",
                        "82": "",
                        "83": "\tpublic function hasErrors()",
                        "84": "\t{"
                    }
                },
                {
                    "function": "Paheko\\Form->runIf",
                    "file":
"...\/www\/admin\/config\/backup\/index.php",
                    "line": 20,
                    "args": {
                        "$condition": "string(6)
\"create\"",
                        "$fn": "object(Closure) (1) {\n  [0]=>
*RECURSION*\n  }",
                        "$csrf_key": "string(11)
\"backup_save\"",
                        "$redirect": "string(34)
\"!config\/backup\/?msg=BACKUP_CREATED\""
                    },
                    "code": {
                        "16": "",
                        "17": "\/\/ Create local backup",
                        "18": "$form->runIf('create', function
() {",
                        "19": "\tBackup::create();",
                        "20": "}, $csrf_key,
'!config\/backup\/?msg=BACKUP_CREATED');",
                        "21": "",
                        "22": "\/\/ Download all files as ZIP",
                        "23": "$form->runIf('zip', function ()
{",
                        "24": "\tFiles::zipAll();"
                    }
                }
            ]
        }
    ],
    "context": {
        "date": "2024-01-29T17:20:10+01:00",
        "duration": 17006.993055343628,
        "environment": "development",
        "hostname": "adherents.adpl-lande.fr",
        "http_files": "array(0) {\n  }",
        "http_method": "POST",
        "http_post": "array(2) {\n 
[\"ct_a5180cf48712ddc07d838e50581f4519d76ab6a7\"]=> string(87)
\"***HIDDEN***\"\n  [\"create\"]=> string(1)
\"***HIDDEN***\"\n  }",
        "http_referrer":
"https:\/\/adherents.adpl-lande.fr\/admin\/config\/backup\/",
        "http_user_agent": "Mozilla\/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/120.0.0.0 Safari\/537.36",
        "id": "88c9gdza",
        "language": "PHP 7.4.33",
        "memory_peak": 6291456,
        "memory_used": 6291456,
        "os": "Linux",
        "paheko_data_root": "\/home\/adplland\/Migration_1.3.0\/data",
        "paheko_version": "1.3.0",
        "php_sapi": "fpm-fcgi",
        "remote_ip": "86.209.38.7",
        "root_directory": "\/home\/adplland\/Migration_1.3.0",
        "server_addr": "10.13.20.49",
        "user_addr": "86.209.38.7",
        "url":
"https:\/\/adherents.adpl-lande.fr\/admin\/config\/backup\/"
    }
}
</errorReport>

[29-Jan-2024 17:20:11 Europe/Paris] =========== Error ref. ai9v4l82 ===========

Exception: disk I/O error in
/home/adplland/Migration_1.3.0/include/lib/KD2/DB/SQLite3.php:760
Stack trace:
#0 /home/adplland/Migration_1.3.0/include/lib/KD2/DB/SQLite3.php(760):
SQLite3->exec('VACUUM INTO '/h...')
#1 /home/adplland/Migration_1.3.0/include/lib/Paheko/Backup.php(134):
KD2\DB\SQLite3->exec('VACUUM INTO '/h...')
#2 /home/adplland/Migration_1.3.0/include/lib/Paheko/Backup.php(116):
Paheko\Backup::make('/home/adplland/...')
#3 /home/adplland/Migration_1.3.0/www/admin/config/backup/index.php(19):
Paheko\Backup::create()
#4 [internal function]: Paheko\{closure}()
#5 /home/adplland/Migration_1.3.0/include/lib/Paheko/Form.php(29):
call_user_func(Object(Closure))
#6 /home/adplland/Migration_1.3.0/include/lib/Paheko/Form.php(80):
Paheko\Form->run(Object(Closure), 'backup_save',
'!config/backup/...', false)
#7 /home/adplland/Migration_1.3.0/www/admin/config/backup/index.php(20):
Paheko\Form->runIf('create', Object(Closure), 'backup_save',
'!config/backup/...')
#8 {main}

Next KD2\DB\DB_Exception: disk I/O error in
/home/adplland/Migration_1.3.0/include/lib/KD2/DB/SQLite3.php:764
Stack trace:
#0 /home/adplland/Migration_1.3.0/include/lib/Paheko/Backup.php(134):
KD2\DB\SQLite3->exec('VACUUM INTO '/h...')
#1 /home/adplland/Migration_1.3.0/include/lib/Paheko/Backup.php(116):
Paheko\Backup::make('/home/adplland/...')
#2 /home/adplland/Migration_1.3.0/www/admin/config/backup/index.php(19):
Paheko\Backup::create()
#3 [internal function]: Paheko\{closure}()
#4 /home/adplland/Migration_1.3.0/include/lib/Paheko/Form.php(29):
call_user_func(Object(Closure))
#5 /home/adplland/Migration_1.3.0/include/lib/Paheko/Form.php(80):
Paheko\Form->run(Object(Closure), 'backup_save',
'!config/backup/...', false)
#6 /home/adplland/Migration_1.3.0/www/admin/config/backup/index.php(20):
Paheko\Form->runIf('create', Object(Closure), 'backup_save',
'!config/backup/...')
#7 {main}

<errorReport>
{
    "errors": [
        {
            "message": "disk I\/O error",
            "errorCode": 10,
            "type": "KD2\\DB\\DB_Exception",
            "backtrace": [
                {
                    "file": "...\/include\/lib\/KD2\/DB\/SQLite3.php",
                    "line": 764,
                    "code": {
                        "760": "\t\t\t$return =
$this->db->exec($statement);",
                        "761": "\t\t}",
                        "762": "\t\tcatch (\\Exception $e) {",
                        "763": "\t\t\tif ($this->db->lastErrorCode())
{",
                        "764": "\t\t\t\tthrow new
DB_Exception($this->db->lastErrorMsg(), $this->db->lastErrorCode(),
$e);",
                        "765": "\t\t\t}",
                        "766": "",
                        "767": "\t\t\tthrow $e;",
                        "768": "\t\t}"
                    }
                },
                {
                    "function": "KD2\\DB\\SQLite3->exec",
                    "file": "...\/include\/lib\/Paheko\/Backup.php",
                    "line": 134,
                    "args": {
                        "$statement": "string(87) \"VACUUM INTO
'\/home\/adplland\/Migration_1.3.0\/data\/association.2024-01-29-171956.sqlite';\""
                    },
                    "code": {
                        "130": "\t\tUtils::safe_unlink($dest);",
                        "131": "",
                        "132": "\t\tif ($version['versionNumber']
>= 3027000) {",
                        "133": "\t\t\t\/\/ use VACUUM INTO instead when
SQLite 3.27+ is required",
                        "134": "\t\t\t$db->exec(sprintf('VACUUM
INTO %s;', $db->quote($dest)));",
                        "135": "\t\t}",
                        "136": "\t\telse {",
                        "137": "\t\t\t\/\/ use ::backup since PHP
7.4.0+",
                        "138": "\t\t\t\/\/
https:\/\/www.php.net\/manual\/en\/sqlite3.backup.php"
                    }
                },
                {
                    "function": "Paheko\\Backup::make",
                    "file": "...\/include\/lib\/Paheko\/Backup.php",
                    "line": 116,
                    "args": {
                        "$dest": "string(45)
\"...\/data\/association.2024-01-29-171956.sqlite\""
                    },
                    "code": {
                        "112": "\t\t$suffix = $name ?? ($auto ?
'auto.1' : date('Y-m-d-His'));",
                        "113": "",
                        "114": "\t\t$backup =
str_replace('.sqlite', sprintf('.%s.sqlite', $suffix),
DB_FILE);",
                        "115": "",
                        "116": "\t\tself::make($backup);",
                        "117": "",
                        "118": "\t\treturn basename($backup);",
                        "119": "\t}",
                        "120": ""
                    }
                },
                {
                    "function": "Paheko\\Backup::create",
                    "file":
"...\/www\/admin\/config\/backup\/index.php",
                    "line": 19,
                    "code": {
                        "15": "}, $csrf_key);",
                        "16": "",
                        "17": "\/\/ Create local backup",
                        "18": "$form->runIf('create', function
() {",
                        "19": "\tBackup::create();",
                        "20": "}, $csrf_key,
'!config\/backup\/?msg=BACKUP_CREATED');",
                        "21": "",
                        "22": "\/\/ Download all files as ZIP",
                        "23": "$form->runIf('zip', function ()
{"
                    }
                },
                {
                    "function": "Paheko\\{closure}"
                },
                {
                    "function": "call_user_func",
                    "file": "...\/include\/lib\/Paheko\/Form.php",
                    "line": 29,
                    "args": {
                        "$function_name": "object(Closure) (1) {\n 
[0]=> *RECURSION*\n  }"
                    },
                    "code": {
                        "25": "\t\t\tif (null !== $csrf_key &&
!\\KD2\\Form::tokenCheck($csrf_key)) {",
                        "26": "\t\t\t\tthrow new
ValidationException('Une erreur est survenue, merci de bien vouloir renvoyer le
formulaire.', 401);",
                        "27": "\t\t\t}",
                        "28": "",
                        "29": "\t\t\tcall_user_func($fn);",
                        "30": "",
                        "31": "\t\t\tif (null !== $redirect) {",
                        "32": "\t\t\t\tif ($js) {",
                        "33": "\t\t\t\t\thttp_response_code(204);"
                    }
                },
                {
                    "function": "Paheko\\Form->run",
                    "file": "...\/include\/lib\/Paheko\/Form.php",
                    "line": 80,
                    "args": {
                        "$fn": "object(Closure) (1) {\n  [0]=>
*RECURSION*\n  }",
                        "$csrf_key": "string(11)
\"backup_save\"",
                        "$redirect": "string(34)
\"!config\/backup\/?msg=BACKUP_CREATED\"",
                        "$follow_redirect": "bool(false)"
                    },
                    "code": {
                        "76": "\t\telseif (is_bool($condition) &&
!$condition) {",
                        "77": "\t\t\treturn null;",
                        "78": "\t\t}",
                        "79": "",
                        "80": "\t\treturn $this->run($fn, $csrf_key,
$redirect, $follow_redirect);",
                        "81": "\t}",
                        "82": "",
                        "83": "\tpublic function hasErrors()",
                        "84": "\t{"
                    }
                },
                {
                    "function": "Paheko\\Form->runIf",
                    "file":
"...\/www\/admin\/config\/backup\/index.php",
                    "line": 20,
                    "args": {
                        "$condition": "string(6)
\"create\"",
                        "$fn": "object(Closure) (1) {\n  [0]=>
*RECURSION*\n  }",
                        "$csrf_key": "string(11)
\"backup_save\"",
                        "$redirect": "string(34)
\"!config\/backup\/?msg=BACKUP_CREATED\""
                    },
                    "code": {
                        "16": "",
                        "17": "\/\/ Create local backup",
                        "18": "$form->runIf('create', function
() {",
                        "19": "\tBackup::create();",
                        "20": "}, $csrf_key,
'!config\/backup\/?msg=BACKUP_CREATED');",
                        "21": "",
                        "22": "\/\/ Download all files as ZIP",
                        "23": "$form->runIf('zip', function ()
{",
                        "24": "\tFiles::zipAll();"
                    }
                }
            ]
        },
        {
            "message": "disk I\/O error",
            "errorCode": 0,
            "type": "Exception",
            "backtrace": [
                {
                    "file": "...\/include\/lib\/KD2\/DB\/SQLite3.php",
                    "line": 760,
                    "code": {
                        "756": "\t\t\tcall_user_func($this->callback,
__FUNCTION__, 'before', $this, ... func_get_args());",
                        "757": "\t\t}",
                        "758": "",
                        "759": "\t\ttry {",
                        "760": "\t\t\t$return =
$this->db->exec($statement);",
                        "761": "\t\t}",
                        "762": "\t\tcatch (\\Exception $e) {",
                        "763": "\t\t\tif ($this->db->lastErrorCode())
{",
                        "764": "\t\t\t\tthrow new
DB_Exception($this->db->lastErrorMsg(), $this->db->lastErrorCode(), $e);"
                    }
                },
                {
                    "function": "SQLite3->exec",
                    "file": "...\/include\/lib\/KD2\/DB\/SQLite3.php",
                    "line": 760,
                    "args": {
                        "$query": "string(87) \"VACUUM INTO
'\/home\/adplland\/Migration_1.3.0\/data\/association.2024-01-29-171956.sqlite';\""
                    },
                    "code": {
                        "756": "\t\t\tcall_user_func($this->callback,
__FUNCTION__, 'before', $this, ... func_get_args());",
                        "757": "\t\t}",
                        "758": "",
                        "759": "\t\ttry {",
                        "760": "\t\t\t$return =
$this->db->exec($statement);",
                        "761": "\t\t}",
                        "762": "\t\tcatch (\\Exception $e) {",
                        "763": "\t\t\tif ($this->db->lastErrorCode())
{",
                        "764": "\t\t\t\tthrow new
DB_Exception($this->db->lastErrorMsg(), $this->db->lastErrorCode(), $e);"
                    }
                },
                {
                    "function": "KD2\\DB\\SQLite3->exec",
                    "file": "...\/include\/lib\/Paheko\/Backup.php",
                    "line": 134,
                    "args": {
                        "$statement": "string(87) \"VACUUM INTO
'\/home\/adplland\/Migration_1.3.0\/data\/association.2024-01-29-171956.sqlite';\""
                    },
                    "code": {
                        "130": "\t\tUtils::safe_unlink($dest);",
                        "131": "",
                        "132": "\t\tif ($version['versionNumber']
>= 3027000) {",
                        "133": "\t\t\t\/\/ use VACUUM INTO instead when
SQLite 3.27+ is required",
                        "134": "\t\t\t$db->exec(sprintf('VACUUM
INTO %s;', $db->quote($dest)));",
                        "135": "\t\t}",
                        "136": "\t\telse {",
                        "137": "\t\t\t\/\/ use ::backup since PHP
7.4.0+",
                        "138": "\t\t\t\/\/
https:\/\/www.php.net\/manual\/en\/sqlite3.backup.php"
                    }
                },
                {
                    "function": "Paheko\\Backup::make",
                    "file": "...\/include\/lib\/Paheko\/Backup.php",
                    "line": 116,
                    "args": {
                        "$dest": "string(45)
\"...\/data\/association.2024-01-29-171956.sqlite\""
                    },
                    "code": {
                        "112": "\t\t$suffix = $name ?? ($auto ?
'auto.1' : date('Y-m-d-His'));",
                        "113": "",
                        "114": "\t\t$backup =
str_replace('.sqlite', sprintf('.%s.sqlite', $suffix),
DB_FILE);",
                        "115": "",
                        "116": "\t\tself::make($backup);",
                        "117": "",
                        "118": "\t\treturn basename($backup);",
                        "119": "\t}",
                        "120": ""
                    }
                },
                {
                    "function": "Paheko\\Backup::create",
                    "file":
"...\/www\/admin\/config\/backup\/index.php",
                    "line": 19,
                    "code": {
                        "15": "}, $csrf_key);",
                        "16": "",
                        "17": "\/\/ Create local backup",
                        "18": "$form->runIf('create', function
() {",
                        "19": "\tBackup::create();",
                        "20": "}, $csrf_key,
'!config\/backup\/?msg=BACKUP_CREATED');",
                        "21": "",
                        "22": "\/\/ Download all files as ZIP",
                        "23": "$form->runIf('zip', function ()
{"
                    }
                },
                {
                    "function": "Paheko\\{closure}"
                },
                {
                    "function": "call_user_func",
                    "file": "...\/include\/lib\/Paheko\/Form.php",
                    "line": 29,
                    "args": {
                        "$function_name": "object(Closure) (1) {\n 
[0]=> *RECURSION*\n  }"
                    },
                    "code": {
                        "25": "\t\t\tif (null !== $csrf_key &&
!\\KD2\\Form::tokenCheck($csrf_key)) {",
                        "26": "\t\t\t\tthrow new
ValidationException('Une erreur est survenue, merci de bien vouloir renvoyer le
formulaire.', 401);",
                        "27": "\t\t\t}",
                        "28": "",
                        "29": "\t\t\tcall_user_func($fn);",
                        "30": "",
                        "31": "\t\t\tif (null !== $redirect) {",
                        "32": "\t\t\t\tif ($js) {",
                        "33": "\t\t\t\t\thttp_response_code(204);"
                    }
                },
                {
                    "function": "Paheko\\Form->run",
                    "file": "...\/include\/lib\/Paheko\/Form.php",
                    "line": 80,
                    "args": {
                        "$fn": "object(Closure) (1) {\n  [0]=>
*RECURSION*\n  }",
                        "$csrf_key": "string(11)
\"backup_save\"",
                        "$redirect": "string(34)
\"!config\/backup\/?msg=BACKUP_CREATED\"",
                        "$follow_redirect": "bool(false)"
                    },
                    "code": {
                        "76": "\t\telseif (is_bool($condition) &&
!$condition) {",
                        "77": "\t\t\treturn null;",
                        "78": "\t\t}",
                        "79": "",
                        "80": "\t\treturn $this->run($fn, $csrf_key,
$redirect, $follow_redirect);",
                        "81": "\t}",
                        "82": "",
                        "83": "\tpublic function hasErrors()",
                        "84": "\t{"
                    }
                },
                {
                    "function": "Paheko\\Form->runIf",
                    "file":
"...\/www\/admin\/config\/backup\/index.php",
                    "line": 20,
                    "args": {
                        "$condition": "string(6)
\"create\"",
                        "$fn": "object(Closure) (1) {\n  [0]=>
*RECURSION*\n  }",
                        "$csrf_key": "string(11)
\"backup_save\"",
                        "$redirect": "string(34)
\"!config\/backup\/?msg=BACKUP_CREATED\""
                    },
                    "code": {
                        "16": "",
                        "17": "\/\/ Create local backup",
                        "18": "$form->runIf('create', function
() {",
                        "19": "\tBackup::create();",
                        "20": "}, $csrf_key,
'!config\/backup\/?msg=BACKUP_CREATED');",
                        "21": "",
                        "22": "\/\/ Download all files as ZIP",
                        "23": "$form->runIf('zip', function ()
{",
                        "24": "\tFiles::zipAll();"
                    }
                }
            ]
        }
    ],
    "context": {
        "date": "2024-01-29T17:20:11+01:00",
        "duration": 15625.829935073853,
        "environment": "development",
        "hostname": "adherents.adpl-lande.fr",
        "http_files": "array(0) {\n  }",
        "http_method": "POST",
        "http_post": "array(2) {\n 
[\"ct_a5180cf48712ddc07d838e50581f4519d76ab6a7\"]=> string(87)
\"***HIDDEN***\"\n  [\"create\"]=> string(1)
\"***HIDDEN***\"\n  }",
        "http_referrer":
"https:\/\/adherents.adpl-lande.fr\/admin\/config\/backup\/",
        "http_user_agent": "Mozilla\/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/120.0.0.0 Safari\/537.36",
        "id": "ai9v4l82",
        "language": "PHP 7.4.33",
        "memory_peak": 6291456,
        "memory_used": 6291456,
        "os": "Linux",
        "paheko_data_root": "\/home\/adplland\/Migration_1.3.0\/data",
        "paheko_version": "1.3.0",
        "php_sapi": "fpm-fcgi",
        "remote_ip": "86.209.38.7",
        "root_directory": "\/home\/adplland\/Migration_1.3.0",
        "server_addr": "10.13.20.49",
        "user_addr": "86.209.38.7",
        "url":
"https:\/\/adherents.adpl-lande.fr\/admin\/config\/backup\/"
    }
}
</errorReport>


-----Message d'origine-----
De : webmestre@adpl-lande.fr <webmestre@adpl-lande.fr> 
Envoyé : dimanche 18 février 2024 22:16
À : 'hebergement@paheko.cloud' <hebergement@paheko.cloud>
Objet : RE: [hebergement] Problème de migration 1.3.0 vers 1.3.5

Voici le fichier log renommé.

-----Message d'origine-----
De : BohwaZ/Paheko <bohwaz@paheko.cloud> Envoyé : dimanche 18 février 2024 19:50
À : hebergement@paheko.cloud Objet : Re: [hebergement] Problème de migration 1.3.0 vers
1.3.5

> Par ailleurs, j'ai ceci dans le fichier de log.

Pas de fichier de log en fichier joint, renomme le en .txt

> Dernier point, je n'ai plus accès à SQL dans l'onglet "Fonctions

> avancées" de la configuration ni à voir la structure complète dans 
> l'onglet "Recherche avancée". Le symptôme est le même : site

> inaccessible.

Sans erreur, je ne peux pas dire ce qui se passe...

====

Les fichiers joints suivants ont été supprimés car interdits :
- log.zip.txt (application/octet-stream)

Cette liste n'autorise que les types de fichiers joints suivants : svg, png, jpeg,
jpg, gif, webp, pdf, ods, odt, odp, md, txt, html, htm, json, js, css, csv, doc, docx,
xls, xlsx, ppt, pptx, mp3, ics, diff, patch, asc, bundle

TR: Problème de migration 1.3.0 vers 1.3.5

BohwaZ/Paheko

19/02/2024 21:32:52

Hello,

ce sont des erreurs dans le passé qui n'ont pas de rapport avec la page
SQL. Elles sont probablement dûes à ton hébergeur qui a eu des soucis.

Du coup je ne peux pas t'aider sans message d'erreur pour la page SQL.

Pour ton problème de mise à jour essaye de lancer cette requête (avec
un outil externe, Paheko ne permet pas ce genre de choses) :

INSERT OR IGNORE INTO files (path, parent, name, type)
VALUES
('user/1', 'user', '1', 2),
('user/47', 'user', '47', 2),
('user/1/assurance_1', 'user/1', 'assurance_1', 2),
('user/1/carte_1', 'user/1', 'carte_1', 2),
('user/1/avenant', 'user/1', 'carte_1', 2),
('user/1/convention', 'user/1', 'carte_1', 2),
('user/47/assurance_1', 'user/47', 'assurance_1', 2),
('user/47/carte_1', 'user/47', 'carte_1', 2);

Ensuite tu refait ta mise à jour et ça devrait être bon ?

RE: TR: Problème de migration 1.3.0 vers 1.3.5

<webmestre

21/02/2024 10:44:45

Bonjour.

La requête a fait le travail. J'en ai profité pour m'instruire sur la
structure de la base avec mon éditeur favoris. Il faut maintenant que je lise la doc,
d'autant que j'aurai des modules à créer pour notre asso.

Donc merci beaucoup !

Je vais voir avec le bureau pour un don à Paheko.

Jean-Michel

-----Message d'origine-----
De : BohwaZ/Paheko <bohwaz@paheko.cloud> 
Envoyé : lundi 19 février 2024 21:10
À : hebergement@paheko.cloud
Objet : Re: TR: [hebergement] Problème de migration 1.3.0 vers 1.3.5

Hello,

ce sont des erreurs dans le passé qui n'ont pas de rapport avec la page SQL. Elles
sont probablement dûes à ton hébergeur qui a eu des soucis.

Du coup je ne peux pas t'aider sans message d'erreur pour la page SQL.

Pour ton problème de mise à jour essaye de lancer cette requête (avec un outil externe,
Paheko ne permet pas ce genre de choses) :

INSERT OR IGNORE INTO files (path, parent, name, type) VALUES ('user/1',
'user', '1', 2), ('user/47', 'user',
'47', 2), ('user/1/assurance_1', 'user/1',
'assurance_1', 2), ('user/1/carte_1', 'user/1',
'carte_1', 2), ('user/1/avenant', 'user/1',
'carte_1', 2), ('user/1/convention', 'user/1',
'carte_1', 2), ('user/47/assurance_1', 'user/47',
'assurance_1', 2), ('user/47/carte_1', 'user/47',
'carte_1', 2);

Ensuite tu refait ta mise à jour et ça devrait être bon ?