Il modulo MimeDetect di Drupal 6 con php 5.3

Il modulo MimeDetect di drupal è un modlo di servizio che consente a drupal e agli altri moduli installati di determinare il tipo di un file caricato sul server.

Con php 5.3 questo modulo non funziona correttamente. Se si controlla il resoconto sullo stato di drupal si potrà verificare che il modulo MimeDetect riporta il seguente errore: "Fileinfo could not load the magic file. It could be corrupted. Try reinstalling the magic file distributed with the MimeDetect module. (Currently using Mime type detection PHP Fileinfo Extension)".

Infatti con la versione 5.3.11 (e 5.4.1) di php il formato del file magic (un database di regole per la determinazione del tipo di file) è stato modificato, quindi se si cerca di caricare un magic file esterno tale caricamento fallisce. Per ovviare a ciò è possibile utilizzare il magic file integrato all'interno di php stesso.

Per fare ciò è sufficiente non specificare il secondo parametro alla funzione finfo_open. Sapendo ciò si potrà applicare la seguente patch al modulo MimeDetect e il tutto dovrebbe tornare a funzionare correttamente:

 

diff --git a/mimedetect.install b/mimedetect.install
index 4228d19..3e6992d 100644
--- a/mimedetect.install
+++ b/mimedetect.install
@@ -27,7 +27,7 @@ function mimedetect_requirements($phase) {
 
   if (extension_loaded('fileinfo')) {
     $requirement['value'] = $t('PHP Fileinfo Extension');
-    if (!$finfo = @finfo_open(FILEINFO_MIME, variable_get('mimedetect_magic', drupal_get_path('module', 'mimedetect') .'/magic'))) {
+    if (!$finfo = @finfo_open(FILEINFO_MIME)) {
       $requirement['description'] = $t('Fileinfo could not load the magic file. It could be corrupted. Try reinstalling the magic file distributed with the MimeDetect module.');
       $requirement['severity'] = REQUIREMENT_ERROR;
     }
diff --git a/mimedetect.module b/mimedetect.module
index b8fc7f4..a5f64b4 100644
--- a/mimedetect.module
+++ b/mimedetect.module
@@ -57,7 +57,7 @@ function mimedetect_mime($file) {
   // Try to use the fileinfo extension first.
   if (extension_loaded('fileinfo')) {
     static $finfo = FALSE;
-    if ($finfo || $finfo = @finfo_open(FILEINFO_MIME, $magic_file)) {
+    if ($finfo || $finfo = @finfo_open(FILEINFO_MIME)) {
       $mime = finfo_file($finfo, drupal_realpath($file->uri));
     }
   }

UPDATE:

La patch sopra può essere evitata aggiungendo la seguente riga al file settings.php:

$conf['mimedetect_magic'] = '';

In questo modo si ottiene lo stesso effetto di caricaare il file magic di default distribuito con php

 

Riferimenti: