1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
<?php
//Cette fonction va permettre d'écrire dans un fichier de LOG.
function ecrire_log($str_log) {
$ddmmyyhhmmss = date("d-m-Y H:i:s");
$a_ecrire = "[".$ddmmyyhhmmss." : ]" . $str_log . " " ."\r\n";
$filename = "log/concat_xml_ap.log";
fwrite(fopen($filename, 'a+'), $a_ecrire);
}
// Fonction qui permet d'ouvrir un fichier et d'enrichir le fichier temporaire
function concat_xml($fichier,$fichier_tmp) {
if (is_file($fichier)) {
if ($TabFich = file($fichier)) {
for($j = 0; $j < count($TabFich); $j++) {
// ouverture du fichier en écriture
$fp = fopen($fichier_tmp,"a");
fputs($fp, "$TabFich[$j]");
fclose($fp);
}
}
}
else {
// On écrit dans le log
ecrire_log("ERREUR ! $fichier n'est pas un fichier xml !");
}
}
// Déclaration fichier temporaire pour la concaténation
$fichier_tmp = "concat_xml_ap.xml";
// On déclare 2 tableaux qui contiendront respectivement les fichires d'entête et les fichiers détails des flux AP
$tableau_entete = array();
$tableau_detail = array();
// On ouvre le dossier que l'on doit traiter
$dossier = opendir ('.');
while ($fichier = readdir ($dossier)) {
if ($fichier != '.' && $fichier != '..') {
// on stocke le nom des fichiers entetes dans un tableau
if (preg_match("/^E/", $fichier)) {
$tableau_entete[] = $fichier;
}
// on stocke le nom des fichiers detail dans un tableau
if (preg_match("/^D/", $fichier)) {
$tableau_detail[] = $fichier;
}
}
}
closedir ($dossier);
// Compte le nombre de fichiers pour chaque tableau
$nbfichiers_entete = count($tableau_entete);
$nbfichiers_detail = count($tableau_detail);
// Si le nombre de fichiers est identique entre les 2 tableaux (même nombre de fichiers entête que détails, c'est bon)
if ($nbfichiers_entete == $nbfichiers_detail) {
// On écrit dans le log
ecrire_log("Le nombre de fichiers entête est identique au nombre de fichiers détails.");
// On effectue un tri sur les entrées du tableau
sort($tableau_entete);
sort($tableau_detail);
// On boucle sur le nombre de fichiers
for ($i=0; $i<$nbfichiers_entete; $i++){
// On vérifie que nom du lot entre le fichier entete et le fichier détail est identique
$entete = substr("$tableau_entete[$i]",1,20);
$detail = substr("$tableau_detail[$i]",1,20);
// Les 3 = permettent de vérifier que les valeurs sont de même type et identique
if ($entete === $detail) {
concat_xml($tableau_entete[$i],$fichier_tmp);
concat_xml($tableau_detail[$i],$fichier_tmp);
//On copie les fichiers qui ont servi à la concaténation dans un autre répertoire
rename($tableau_entete[$i],"sav_xml/$tableau_entete[$i]");
rename($tableau_detail[$i],"sav_xml/$tableau_detail[$i]");
rename($fichier_tmp,$tableau_detail[$i]);
}
else {
// On écrit dans le log
ecrire_log("Le fichier $tableau_entete[$i] est different du fichier $tableau_detail[$i].");
//On copie les fichiers en erreur dans un autre répertoire
rename($tableau_entete[$i],"ko_xml/$tableau_entete[$i]");
rename($tableau_detail[$i],"ko_xml/$tableau_detail[$i]");
}
}
}
else {
// On écrit dans le log
ecrire_log("ERREUR ! Il n'y a pas le même nombre de fichiers entete et detail.");
}
?> |
Partager