Valider 00cce098 rédigé par rastapopoulos@spip.org's avatar rastapopoulos@spip.org
Parcourir les fichiers

Encore remaniement de comment on cherche les extracteurs. Désormais :

1) on a deux dossiers "defaut" et "fallback", dans le premier on y met les librairies bien, les plus complètes ou les plus rapides, dans le second, les librairies moins cool, par exemple les trucs tout en PHP
2) pour chacun de ces dossiers, on a deux possibilités
   2.1) soit on met les fonctions dans un dossier de type MIME, comme "fallback/application_pdf/truc.php", si on veut gérer un ou des types précis
   2.2) soit on met à la racine, comme "defaut/truc.php" pour les librairies qui savent gérer de nombreux types d'un coup d'un seul

Pour résumé, l'ordre de recherche est donc le suivant :
- extraire/defaut/application_pdf/10_superlib_pdf.php
- extraire/defaut/10_superlib_generique.php
- extraire/fallback/application_pdf/10_pourri_pdf.php
- extraire/fallback/10_pourri_generique.php

Pour chaque librairie c'est comme avant : on fait une fonction "test" et une fonction "extraire", suivant le formalisme de nommage de charger_fonction().

On a donc maintenant la possibilité de fournir des librairies génériques comme Tika qui savent gérer tous les fichiers ou presque, et cela SANS créer un fichier pour chaque 200 types MIME que ça gère !…
Cf l'exemple dans "extraire/defaut/10_tika_server.php".
parent ffb18eac
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+2 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
* text=auto !eol
extraire/application_pdf/10_tika_server.php -text
extraire/application_pdf/90_pdfparser.php -text
extraire/defaut/10_tika_server.php -text
extraire/fallback/application_pdf/90_pdfparser.php -text
finfo/magic -text
inc/extraire_document.php -text
lib/Composer/Autoload/ClassLoader.php -text
+2 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -3,7 +3,7 @@
/**
 * Tester si cette méthode d'extraction est disponible
 **/
function extraire_application_pdf_10_tika_server_test_dist() {
function extraire_defaut_10_tika_server_test_dist() {
	include_spip('inc/distant');
	
	// On cherche si le serveur Tika est bien lancé en local (valeurs peut-être à configurer…)
@@ -24,7 +24,7 @@ function extraire_application_pdf_10_tika_server_test_dist() {
 * @param $fichier le fichier à traiter
 * @return Scontenu le contenu brut
 **/
function extraire_application_pdf_10_tika_server_extraire_dist($fichier) {
function extraire_defaut_10_tika_server_extraire_dist($fichier) {
    $infos = array('contenu' => false);
    $contenu = '';

+2 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -3,7 +3,7 @@
/**
 * Tester si cette méthode d'extraction est disponible
 **/
function extraire_application_pdf_90_pdfparser_test_dist() {
function extraire_fallback_application_pdf_90_pdfparser_test_dist() {
	if (
		is_dir(_DIR_RACINE . 'lib/TCPDF-6.2.6')
		and is_dir(_DIR_RACINE . 'lib/pdfparser-0.9.22/src')
@@ -22,7 +22,7 @@ function extraire_application_pdf_90_pdfparser_test_dist() {
 * @param $fichier le fichier à traiter
 * @return Scontenu le contenu brut
 **/
function extraire_application_pdf_90_pdfparser_extraire_dist($fichier) {
function extraire_fallback_application_pdf_90_pdfparser_extraire_dist($fichier) {
    $infos = array('contenu' => false);
    $contenu = '';

+33 −18
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -75,29 +75,44 @@ function inc_extraire_document($document = array()) {
	}
	
	// On cherche le bon extracteur de jus de fichier
	// tous les "extraire/application_pdf/10_superlib.php"
	// le test n'est fait qu'une seule fois par type MIME, on garde le résultat en mémoire
	$chemin_mime = str_replace('/','_', $mime);
	$chemin_mime = preg_replace('/[^\w_]+/','_', $mime); // on accepte seulement chiffre, lettre, et _
	$fonction_extraire = null;
	// Si on a déjà un extracteur pour ce type MIME
	if (isset($extracteurs_ok[$chemin_mime])) {
		$fonction_extraire = $extracteurs_ok[$chemin_mime];
	}
	elseif ($extracteurs = find_all_in_path("extraire/{$chemin_mime}/", '[.]php$')) {
	else {
		// On cherche dans l'ordre :
		// extraire/defaut/application_pdf/10_superlib_pdf.php
		// extraire/defaut/10_superlib_generic.php
		// extraire/fallback/application_pdf/10_pourri_pdf.php
		// extraire/fallback/10_pourri_generic.php
		foreach (array(
			"extraire/defaut/{$chemin_mime}/",
			"extraire/defaut/",
			"extraire/fallback/{$chemin_mime}/",
			"extraire/fallback/",
		) as $dossier) {
			if ($extracteurs = find_all_in_path($dossier, '[.]php$')) {
				$extracteurs = array_keys($extracteurs);
				sort($extracteurs); // On trie par nom pour chercher dans un ordre
				
				// On teste si ça marche dans l'ordre
				foreach ($extracteurs as $fonction) {
					$fonction = substr($fonction, 0, strlen($fonction)-4);
					
					// Si la librairie trouvée existe et que le test dit qu'elle est bien active
					if (
				// extraire_application_pdf_10_superlib_test_dist()
				$fonction_test = charger_fonction('test', "extraire/{$chemin_mime}/{$fonction}")
				and $fonction_test()
						$fonction_test = charger_fonction('test', $dossier.$fonction)
						and $fonction_test($mime)
					) {
				// extraire_application_pdf_10_superlib_extraire_dist()
				$fonction_extraire = charger_fonction('extraire', "extraire/{$chemin_mime}/{$fonction}");
						// On cherche la vraie fonction d'extraction et on la garde en mémoire
						$fonction_extraire = charger_fonction('extraire', $dossier.$fonction);
						$extracteurs_ok[$chemin_mime] = $fonction_extraire;
				break; // On arrête la recherche, on a trouvé le meilleur extracteur
						break 2; // On arrête la recherche, on a trouvé le meilleur extracteur
					}
				}
			}
		}
	}
+2 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<paquet
	prefix="extrairedoc"
	categorie="outil"
	version="1.1.0"
	etat="dev"
	version="1.2.0"
	etat="test"
	compatibilite="[3.0.0;3.1.*]"
	logo=""
	documentation=""