#!/usr/bin/php valideSiren($siren)) { kbisLog($siren, $piece, "IN : Siren $siren Invalide !"); exit; } else { switch (strlen($siren)) { case 1: $siren='00000000'.$siren; break; case 2: $siren='0000000'.$siren; break; case 3: $siren='000000'.$siren; break; case 4: $siren='00000'.$siren; break; case 5: $siren='0000'.$siren; break; case 6: $siren='000'.$siren; break; case 7: $siren='00'.$siren; break; case 8: $siren='0'.$siren; break; } } if ($piece<>'kbis') { kbisLog($siren, $piece, "IN : Piece $piece inexistante !"); exit; } define('FORMAT', 'PDF'); //HTML ou PDF define('PKBIS_HOST', '192.168.3.4'); define('PKBIS_USER', 'kbis'); define('PKBIS_PASS', 'kbis'); define('PDFTOTEXT', '/usr/bin/pdftotext'); // Vérifier que l'executable existe define('WKHTMLTOPDF', '/usr/bin/wkhtmltopdf'); // Vérifier que l'executable existe.... /* Principe de fonctionnement - Vérifier en local que le fichier n'existe pas déjà et qu'il a moins d'un jour - Envoi dun fichier portant le nom de $pieces-$siren.txt sur le ftp pour le début de la récupération du kbis - Vérifier sur le FTP que le fichier est disponible Comparaison avec un ftp_nlist sur dossier /pdf ou /html - Vérifier la date du fichier HTML (qui est le fichier source) afin d'écrire dans les logs - Vérifier que le fichier PDF ou HTML correspond bien au SIREN demandé Pour le fichier PDF, transformation avec pdftotext, et on parcours le fichier texte à la recherche du SIREN Pour le fichier HTML, on parcours le fichier à la recherche du siren et on le tranforme en PDF grâce à wkhtmltopdf */ $kbisLocalPDF = DOC_WEB_LOCAL."kbis/$piece-$siren.pdf"; $kbisLocalHTML = DOC_WEB_LOCAL."kbis/$piece-$siren.html"; $kbisLocalTXT = DOC_WEB_LOCAL."kbis/$piece-$siren.txt"; if (file_exists($kbisLocalPDF) && date('Ymd',filectime($kbisLocalPDF))==date('Ymd')){ exit; } else { if (file_exists($kbisLocalHTML)) unlink($kbisLocalHTML); if (file_exists($kbisLocalPDF)) unlink($kbisLocalPDF); if (file_exists($kbisLocalTXT)) unlink($kbisLocalTXT); } // Ouverture de la connexion FTP $conn_id = ftp_connect(PKBIS_HOST); $login_result = ftp_login($conn_id, PKBIS_USER, PKBIS_PASS); $tabListInit = ftp_nlist($conn_id, strtolower(FORMAT).'/'); $nbList = count($tabListInit); $nbEssais = 0; // Nombre de tentatives de récupération // Fichier à déposer sur le FTP pour débuter la commande $fp = fopen(DOC_WEB_LOCAL."kbis/$piece-$siren", 'w+'); fwrite($fp, "$siren;$piece;$type;$visu;$courrier;$ref"); rewind($fp); if (!ftp_fput($conn_id, "in/$piece-$siren.txt", $fp, FTP_ASCII)){ //Envoi mail pour erreur exit; } fclose($fp); kbisLog($siren, $piece, "IN : Fichier déposé en commande sur le FTP"); // Surveillance du FTP pour récupération du fichier while (true) { $nbEssais++; sleep($dureeInterval); $tabList = ftp_nlist($conn_id, strtolower(FORMAT).'/'); if (count($tabList)>$nbList) { kbisLog($siren, $piece, "WAIT : Essai $nbEssais, des nouveaux fichiers sont disponibles sur le FTP !"); sleep($dureeInterval); // Laisse le temps au serveur de K-Bis de finir le fichier PDF !!! $tabNom = array_diff($tabList,$tabListInit); //Récupération du fichier ftp_chdir($conn_id, strtolower(FORMAT)); $ficDist = str_replace(strtolower(FORMAT).'/', '', reset($tabNom)); if (!ftp_get($conn_id,DOC_WEB_LOCAL."kbis/$piece-$siren.".strtolower(FORMAT), $ficDist, FTP_BINARY)) { // Problème FTP --> STOP kbisLog($siren, $piece, "OUT : Problème FTP"); exit; } //Traitement en fonction du format if (FORMAT == 'PDF') { shell_exec(PDFTOTEXT.' '.$kbisLocalPDF.' '.$kbisLocalTXT); $str = file_get_contents($kbisLocalTXT); $sirenLu = checkSiren($siren, $str); if ($sirenLu){ kbisLog($siren, $piece, "OUT : Le nouveau fichier est celui attendu ($sirenLu=$siren)"); } else { kbisLog($siren, $piece, "OUT : Le nouveau fichier n'est pas celui attendu ($sirenLu<>$siren)"); unlink($kbisLocalPDF); } break; } elseif (FORMAT == 'HTML') { $str = file_get_contents($kbisLocalHTML); $str = preg_replace('@
.*?
@si', '', $str); file_put_contents($kbisLocalHTML, $str); $sirenLu = checkSiren($siren, $str); if ($sirenLu){ kbisLog($siren, $piece, "OUT : Le nouveau fichier est celui attendu ($sirenLu=$siren)"); shell_exec(WKHTMLTOPDF.' '.$kbisLocalHTML.' '.$kbisLocalPDF); } else { kbisLog($siren, $piece, "OUT : Le nouveau fichier n'est pas celui attendu ($sirenLu<>$siren)"); unlink($kbisLocalHTML); } break; } //Log ? ftp_chdir($conn_id, '/html'); $tabListHtml = ftp_nlist($conn_id, $siren.'*'); foreach ($tabListHtml as $fichierHtml) { $ficDist2 = str_replace('html/', '', $fichierHtml); $buff = ftp_mdtm($conn_id, $ficDist2); if ($buff!=-1 && date("Ymd", $buff)==date("Ymd")) { $fp = fopen(LOG_PATH."/$piece-commande.log", 'a+'); fwrite($fp, date('Y/m/d H:i:s')." - $siren - Nb fichier HTML : ".count($tabListHtml).print_r($tabListHtml)); fclose($fp); } } } else { kbisLog($siren, $piece, "WAIT : Essai $nbEssais, aucun nouveau fichier disponible sur le FTP !"); if (($nbEssais*$dureeInterval)>$dureeMaxi) { kbisLog($siren, $piece, "OUT : Essai $nbEssais, ERREUR aucun kbis trouvé en $dureeMaxi secondes sur le FTP !"); kbisLog($siren, $piece, "OUT : Essai $nbEssais, ERREUR aucun kbis trouvé en $dureeMaxi secondes sur le FTP !", 'ERROR'); $message="ERREUR lors de la récupération du '$piece' pour le siren $siren (aucun PDF sur le serveur FTP au bout de $nbEssais essais en $dureeMaxi secondes)".EOL; $message.=EOL."Si vous obtenez régulièrement ce message avec des siren différents, il faut probablement relancer la passerelle de commandes de pièces officielles.".EOL; sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com,mricois@scores-decisions.com', 'ERREUR KBIS entre la passerelle et le WebService', $message); exit; } } } // Fermeture de la connexion et du pointeur de fichier ftp_close($conn_id); kbisLog($siren, $piece, "OUT : Fin normale de la récupération du kbis".EOL);