Comment PHP peut vous sortir d'embarras...

Côme
Site Admin
Messages : 846
Enregistré le : Sam Sep 14, 2002 10:41 pm
Localisation : Igny (Essonne)

Comment PHP peut vous sortir d'embarras...

Messagepar Côme » Mer Sep 09, 2009 7:45 pm

Imaginez la situation :

Une de vos tables, importante évidemment, n'est tout d'un coup plus accessible avec un message peu engageant : "Blob file not found or corrupt"... ou en français "Fichier blob absent ou endommagé".

Patatra, catastrophe tous vos memos sont en péril. Bon vous restez calme car vous savez que Paradox offre nativement un outil de reconstruction, le fameux tutility. Mais , stupeur, celui ne parvient pas à réparer la table ou plutôt il accepte finalement mais vous réalisez que le fichier blob a été réinitialisé... Tous vos mémos sont perdus.

Un peu stressé vous essayez dans la foulée TOUS les outils connus de réparation Paradox, dont le fameux Chimney Sweep mais rien à faire votre fichier mémo semble véritablement perdu...

Bon vous scrutez nerveusement les sauvegardes disponibles pour réaliser qu'évidemment cette table n'a pas été sauvegardée depuis longtemps et là vous vous prenez un coup de chaud... surtout si le problème survient pour un gentil client à qui vous répétez depuis quinze ans que Paradox est véritablement "l'outil magique" qui ne fera que son bonheur...

Non vous n'abandonnerez pas ! Pas question qu'un client puisse perdre des données. Voyons voyons comment s'y prendre ? Etudier le format de fichier pour l'attaquer nativement, vous sentez la chose possible mais devinez que cela va vous prendre un temps infini.

Non ce qu'il faudrait ce serait une librairie qui attaquerait nativement les fichiers Paradox sans passer par le BDE ni autre ODBC. Ah mais vous avez connaissance d'une telle librairie bien connue dans le monde PHP, pxlib, écrite en C et disponible en standard depuis PHP ou Python. Allez tentons le coup...

Vite vite un premier petit test pour tester cette solution :
Ici la table endommagée s'appelle FactPro et... elle est cryptée.

Code : Tout sélectionner

<?php
if(!$pxdoc = px_new()) { 
   echo "Pb pxlib";

$fp = fopen("factpro.db", "r"); 
if(!px_open_fp($pxdoc, $fp)) { 
   echo "Impossible d'ouvrir la table";


// Ici il faut apparemmet désigner par un path absolu
// le chemin vers le fichier blob.

$fichier = "c:\\xampp\\htdocs\\test_pxlib\\Factpro.mb";
px_set_blob_file ( $pxdoc , $fichier);

// Ici on tente de récupérer le premier enregistrement indexé en 0

$mon_tableau = px_get_record($pxdoc ,0);

// On affiche ce que l'on a obtenu
print_r($mon_tableau);

px_close($pxdoc); 
px_delete($pxdoc); 
fclose($fp); 
?>

Et bingo ! vous visualisez le contenu de vos mémos pour le premier enregistrement (noté 0). La librairie gère même le décryptage des données ! Yes ! "Y'a plus qu'à..." comme on dit :

Une petite boucle de parcours pour écrire un fichier CSV avec nos précieuses données

Code : Tout sélectionner

<?php
if(!$pxdoc = px_new()) { 
   echo "Pb pxlib";

$fp = fopen("factpro.db", "r"); 
if(!px_open_fp($pxdoc, $fp)) { 
   echo "Impossible d'ouvrir la table";

$fichier = "c:\\xampp\\htdocs\\test_pxlib\\Factpro.mb";
px_set_blob_file ( $pxdoc , $fichier);

// On va écrire nos données dans un fichier CSV pour les retraiter
// facilement avant réimport dans notre table Paradox.

$fichier_dest=fopen("FactPro.CSV","w");

// Ici ma table dispose de 1549 records, bon on aurait pu rendre cela
// dynamique mais pour l'heure cela fera l'affaire

For ($i=0;$i<1549;$i++)
{
   $row = px_get_record($pxdoc ,$i);
   //print_r($mon_tableau);
   
   $nofact = $row['NoFact'];
   $nophase = $row['NoPhase'];
   $noligne = $row['NoLigne'];
      
    // Ici le fameux blob...
   $detprod = $row['DetProduit'];
   
   // Retraiter detprod pour virer le maximum de caractères parasites
   $detprod = preg_replace("/\\x0|[\x01-\x1f]/U","",$detprod);

  // Et hop un fichier CSV   
   fwrite($fichier_dest,"$nofact;$nophase;$noligne;$detprod;\n");   
}

fclose($fichier_dest);
px_close($pxdoc); 
px_delete($pxdoc); 
fclose($fp); 
?>

Alors certes le fichier résultat n'est pas parfait il reste quelques soucis de caractères accentués par exemple mais quelques recherche/remplacer à l'aide de Notepad++ et hop votre fichier est maintenant parfait !!

Reste alors à le réintégrer dans Paradox ce qui se fait en 5 minutes à l'aide d'un ou deux TCursor et TextStream....

Ouf... L'honneur est sauf et vous pouvez maintenant insister pour la remise en place rapide de la sauvegarde automatique qui ne fonctionne plus depuis que le disque dur portable ... a été débranché pour d'autres offices !

:D
Modifié en dernier par Côme le Lun Sep 14, 2009 10:15 am, modifié 1 fois.

Côme
Site Admin
Messages : 846
Enregistré le : Sam Sep 14, 2002 10:41 pm
Localisation : Igny (Essonne)

Messagepar Côme » Jeu Sep 10, 2009 12:57 pm

Ah un mot aussi sur l'origine probable du souci, un utilisateur itinérant qui se connectait en WIFI pour accéder à l'application Paradox en réseau... A éviter véritablement pour une telle application. :roll:


Retourner vers « Paradox »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités