================================================================================================ SUIVI #1228 — DIAG documents marché/avenant (public → privé) — LECTURE SEULE 2026-08-06T12:04:37+00:00 DB: mysql / hectareenvol Driver: mysql APP_URL: https://envol.hectare.fr ================================================================================================ §1 TABLES ET COLONNES (schéma réel) ------------------------------------------------------------------------------------------------ ### marche_documents colonnes présentes : id, marche_id, type_document, nom_fichier, fichier_path, sharepoint_url, sharepoint_item_id, date_expiration, statut, commentaire, created_at, updated_at lignes : 78 nom_fichier : varchar (varchar(255)) null=NO fichier_path : varchar (varchar(255)) null=NO sharepoint_url : varchar (varchar(255)) null=YES ### avenant_documents colonnes présentes : id, avenant_id, nom_fichier, fichier_path, sharepoint_url, sharepoint_item_id, uploaded_by, created_at, updated_at lignes : 1 nom_fichier : varchar (varchar(255)) null=NO fichier_path : varchar (varchar(255)) null=NO sharepoint_url : varchar (varchar(255)) null=YES Disque : NON stocké en base (aucune colonne disk). Code : storage_path('app/public/'.$fichier_path) en dur dans MarcheController. Convention écriture : marches/{id}/… et avenants/{id}/… ================================================================================================ §2 ÉCHANTILLON fichier_path (10 lignes) — classification ------------------------------------------------------------------------------------------------ ### marche_documents id=1 class=chemin_relatif path=marches/1/AUTRE.pdf id=2 class=chemin_relatif path=marches/1/DECENNAL….pdf id=3 class=chemin_relatif path=marches/1/RC_PRO.pdf id=4 class=chemin_relatif path=marches/1/URSSAF.pdf id=5 class=chemin_relatif path=marches/1/RIB.pdf id=6 class=chemin_relatif path=marches/1/KBIS.pdf id=7 class=chemin_relatif path=marches/1/MARCHE_S….pdf id=8 class=chemin_relatif path=marches/2/DECENNAL….pdf id=9 class=chemin_relatif path=marches/2/RC_PRO.pdf id=10 class=chemin_relatif path=marches/2/KBIS.pdf ### avenant_documents id=1 class=chemin_relatif path=avenants/1/41eed54e….png ### Répartition classes (toutes lignes des 2 tables) chemin_relatif : 79 url_absolue : 0 chemin_absolu_fs : 0 relatif_prefixe_suspect : 0 relatif_autre : 0 vide : 0 >>> VERDICT OBJET 1 : CHEMIN RELATIF (convention marches/|avenants/) — déplacement sans réécriture DB possible. ================================================================================================ §3 VOLUMES DISQUE (storage/app/public/{marches,avenants}) ------------------------------------------------------------------------------------------------ public root : /home/hectare/envol.hectare.fr/storage/app/public private root (cible potentielle) : /home/hectare/envol.hectare.fr/storage/app/private public exists : oui ### marches/ fichiers : 75 taille cumulée : 68.28 Mo (71599846 o) plus gros : 13.54 Mo — marches/73/AUTRE.zip par extension : .pdf : 72 .zip : 2 .png : 1 top dossiers (id) par volume : 73 : 1 fichier(s), 13.54 Mo 160 : 1 fichier(s), 11.93 Mo 11 : 6 fichier(s), 9.13 Mo 175 : 2 fichier(s), 6.64 Mo 6 : 6 fichier(s), 3.68 Mo 7 : 6 fichier(s), 3.56 Mo 16 : 1 fichier(s), 2.9 Mo 5 : 6 fichier(s), 2.65 Mo 9 : 6 fichier(s), 2 Mo 12 : 6 fichier(s), 1.75 Mo 15 : 1 fichier(s), 1.66 Mo 10 : 6 fichier(s), 1.41 Mo 8 : 6 fichier(s), 1.29 Mo 1 : 7 fichier(s), 1.27 Mo 14 : 1 fichier(s), 1.19 Mo … (7 autres) nb dossiers enfants : 22 ### avenants/ fichiers : 1 taille cumulée : 146.5 Ko (150066 o) plus gros : 146.5 Ko — avenants/1/41eed54e….png par extension : .png : 1 top dossiers (id) par volume : 1 : 1 fichier(s), 146.5 Ko nb dossiers enfants : 1 Hors périmètre (non scanné) : logos/, bug-reports/. ================================================================================================ §4 COHÉRENCE BASE ↔ DISQUE ------------------------------------------------------------------------------------------------ ### Synthèse manquants (en base, absents du disque public) marche_documents : ok=78 manquants=0 path_vide=0 avenant_documents : ok=1 manquants=0 path_vide=0 ### Orphelins (sur disque, absents de la base) count=0 taille≈0 o → si manquants+orphelins élevés : nettoyer avant déplacement auto. ### Couverture SharePoint (hors déplacement disque, info) marche_documents : total=78 avec_fichier_path=78 avec_sharepoint_url=78 avenant_documents : total=1 avec_fichier_path=1 avec_sharepoint_url=1 ================================================================================================ §5 DISQUE STOCKÉ OU DÉDUIT ? ------------------------------------------------------------------------------------------------ Colonne disk sur marche_documents : NON Colonne disk sur avenant_documents : NON Déduction code : TOUJOURS storage/app/public + fichier_path relatif. Comparaison : tache_suivi_documents a une colonne disk ; factures → disk factures ; entity_documents → FoncierEntityDocumentService::DISK = local (privé). ================================================================================================ §6 PARAMÈTRES PHP CLI + ESPACE DISQUE ------------------------------------------------------------------------------------------------ PHP_SAPI : fpm-fcgi max_execution_time : 165 memory_limit : 512M upload_max_filesize : 512M post_max_size : 520M disk_free_space(public) : 8542858 Mo (8957835870208 o) disk_total_space(public) : 16321817.13 Mo disk_free_space(private) : 8542858 Mo (8957835870208 o) copie temporaire ~80 Mo possible : OUI ================================================================================================ FIN DIAG #1228 — aucune écriture effectuée. Commande OVH : php tools/diag/diag_documents_marche_public_1228.php ================================================================================================